Zum Inhalt springen
Alles Automatisch

Stundenplan im Home Assistant: Aktuelles und nächstes Fach automatisch anzeigen

Erfahre, wie du einen digitalen Stundenplan in Home Assistant integrierst. Zeige das aktuelle und nächste Fach automatisch im Dashboard an, inklusive praktischer Vorlage.

Stundenplan im Home Assistant: Aktuelles und nächstes Fach automatisch anzeigen

Ein digitaler Stundenplan im Home Assistant kann den Alltag deutlich erleichtern, besonders, wenn es darum geht, immer den Überblick über aktuelle und kommende Unterrichtsstunden zu behalten. Mit einer passenden Integration lässt sich der Stundenplan automatisiert im Dashboard anzeigen, inklusive der jeweiligen Fächer und Zeiten. Das sorgt für mehr Organisation und weniger vergessene Materialien.

Warum ein Stundenplan im Home Assistant sinnvoll ist

Wer Home Assistant nutzt, will meistens den Alltag strukturieren und wiederkehrende Abläufe automatisieren. Ein digitaler Stundenplan hilft dabei, stets zu wissen, welches Fach gerade stattfindet und welches als nächstes ansteht. Das ist besonders für Familien mit schulpflichtigen Kindern oder für Studierende praktisch, die ihre Stundenpläne flexibel verwalten möchten.

Die Integration eines Stundenplans ins Home Assistant Dashboard bietet nicht nur Übersicht, sondern auch die Möglichkeit, Erinnerungen und Automatisierungen zu verknüpfen. So kann beispielsweise eine Benachrichtigung ausgelöst werden, wenn ein bestimmtes Fach beginnt, oder das Licht im Arbeitszimmer passend zur Unterrichtszeit gesteuert werden.

Technische Umsetzung mit Home Assistant und Vorlagen

Die Umsetzung eines Stundenplans in Home Assistant erfordert einige vorbereitende Schritte. Zunächst wird eine YAML-Datei erstellt, in der die einzelnen Wochentage, Fächer und Uhrzeiten strukturiert hinterlegt sind. Mithilfe von Template-Sensoren kann dann ermittelt werden, welches Fach aktuell läuft und welches als nächstes folgt. Für die Anzeige im Dashboard werden benutzerdefinierte Karten genutzt, die die Informationen übersichtlich darstellen.

In vielen Haushalten ist der Schulalltag durch wiederkehrende Zeiten und Fächer geprägt. Dieser Snippet zeigt dir, wie du einen dynamischen Stundenplan direkt in Home Assistant abbilden kannst. Anstatt lediglich ein statisches Widget zu nutzen, erzeugt diese Konfiguration mehrere Home-Assistant-Sensoren, die dir zuverlässig anzeigen, welches Fach gerade läuft, was als Nächstes kommt und eine komplette Übersicht der Woche bereitstellen. So kannst du dein Smart Home nicht nur informieren, sondern auch Automationen daran ausrichten, etwa Benachrichtigungen vor dem Unterricht oder angepasste Szenen zu Schulbeginn.

Was macht dieser Stundenplan in Home Assistant?

Diese Konfiguration liest eine lokal gespeicherte JSON-Datei mit deinem Wochenstundenplan aus und erstellt mehrere Home-Assistant-Sensoren:

  • sensor.school_current_subject – aktuelles Fach
  • sensor.school_next_subject – nächstes Fach
  • sensor.school_schedule_table – vollständige Stundenplan-Tabelle
  • binary_sensor.school_in_session – zeigt an, ob gerade Unterricht ist

Du kannst diese Werte z.B. in Lovelace-Karten anzeigen oder für Automationen verwenden, etwa um Benachrichtigungen vor Unterrichtsbeginn zu senden oder dein Smart-Home-Setup an Unterrichtszeiten anzupassen.

Voraussetzungen

Damit die Lösung funktioniert, brauchst du:

  • Einen funktionierenden Home-Assistant-Server
  • Die Möglichkeit, eine Datei unter /config/data/ abzulegen
  • Den Stundenplan als JSON-Datei im definierten Format

Stundenplan als JSON speichern

Lege die Datei /config/data/school_timetable.json an und fülle sie mit deinem Stundenplan im folgenden Format:

json
1{
2  "monday": [
3    { "subject": "Mathematik", "start": "08:00", "end": "08:45" },
4    { "subject": "Deutsch", "start": "08:50", "end": "09:35" }
5  ],
6  "tuesday": [
7    { "subject": "Englisch", "start": "08:00", "end": "08:45" }
8  ],
9  "wednesday": [],
10  "thursday": [],
11  "friday": [],
12  "saturday": [],
13  "sunday": []
14}

Jeder Eintrag braucht genau drei Felder: subject, start und end. Die Uhrzeiten schreibst du zweistellig im Format HH:MM, sonst stimmt der Vergleich in den Templates nicht. JSON kennt keine Kommentare, lass sie also weg.

Du kannst alle Wochentage definieren, auch wenn manche leer bleiben. Der Plan bildet die Grundlage für die Sensoren, die nach aktuellen Uhrzeiten filtern und den Ablauf interpretieren.

Konfiguration in Home Assistant

Ergänze in deiner configuration.yaml oder einem Package-File folgende Sensordefinition:

yaml
1command_line:
2  - sensor:
3      name: School Timetable JSON
4      command: "bash -c 'cat /config/data/school_timetable.json'"
5      scan_interval: 3600
6      json_attributes:
7        - monday
8        - tuesday
9        - wednesday
10        - thursday
11        - friday
12        - saturday
13        - sunday
14template:
15  - trigger:
16      - platform: time_pattern
17        minutes: "/1"
18      - platform: state
19        entity_id: sensor.school_timetable_json
20    sensor:
21      - name: "School Current Subject"
22        unique_id: school_current_subject
23        state: >
24          {% set days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] %}
25          {% set wd = days[now().weekday()] %}
26          {% set day = state_attr('sensor.school_timetable_json', wd) or [] %}
27          {% set current = day
28              | selectattr('start', 'le', now().strftime('%H:%M'))
29              | selectattr('end', 'gt', now().strftime('%H:%M'))
30              | list %}
31          {{ current[0].subject if current | count > 0 else 'Kein Unterricht' }}
32        attributes:
33          current_start: >
34            {% set days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] %}
35            {% set day = state_attr('sensor.school_timetable_json', days[now().weekday()]) or [] %}
36            {% set current = day
37                | selectattr('start', 'le', now().strftime('%H:%M'))
38                | selectattr('end', 'gt', now().strftime('%H:%M'))
39                | list %}
40            {{ current[0].start if current | count > 0 else '' }}
41          current_end: >
42            {% set days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] %}
43            {% set day = state_attr('sensor.school_timetable_json', days[now().weekday()]) or [] %}
44            {% set current = day
45                | selectattr('start', 'le', now().strftime('%H:%M'))
46                | selectattr('end', 'gt', now().strftime('%H:%M'))
47                | list %}
48            {{ current[0].end if current | count > 0 else '' }}
49    binary_sensor:
50      - name: "School In Session"
51        unique_id: school_in_session
52        state: >
53          {% set days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] %}
54          {% set day = state_attr('sensor.school_timetable_json', days[now().weekday()]) or [] %}
55          {{ day
56              | selectattr('start', 'le', now().strftime('%H:%M'))
57              | selectattr('end', 'gt', now().strftime('%H:%M'))
58              | list | count > 0 }}

Diese Definition verwendet den JSON-Stundenplan und ermittelt abhängig von der aktuellen Uhrzeit das passende Fach. Die scan_interval sorgt dafür, dass die JSON-Daten regelmäßig neu eingelesen werden. Der Trigger sorgt dafür, dass die Zwischensensoren jede Minute aktualisiert werden.

Nächste Stunde und Stundenplan-Tabelle

Die beiden restlichen Sensoren nutzen dieselbe Template-Logik. Sie kommen in denselben sensor:-Block wie oben, direkt hinter „School Current Subject":

yaml
1      - name: "School Next Subject"
2        unique_id: school_next_subject
3        state: >
4          {% set days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] %}
5          {% set day = state_attr('sensor.school_timetable_json', days[now().weekday()]) or [] %}
6          {% set upcoming = day
7              | selectattr('start', 'gt', now().strftime('%H:%M'))
8              | sort(attribute='start')
9              | list %}
10          {{ upcoming[0].subject if upcoming | count > 0 else 'Kein weiterer Unterricht' }}
11
12      - name: "School Schedule Table"
13        unique_id: school_schedule_table
14        state: >
15          {% set days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'] %}
16          {% set ns = namespace(total=0) %}
17          {% for d in days %}
18            {% set ns.total = ns.total + (state_attr('sensor.school_timetable_json', d) or []) | count %}
19          {% endfor %}
20          {{ ns.total }}
21        unit_of_measurement: "Stunden"
22        attributes:
23          table: >-
24            {%- set labels = {'monday': 'Montag', 'tuesday': 'Dienstag', 'wednesday': 'Mittwoch', 'thursday': 'Donnerstag', 'friday': 'Freitag'} -%}
25            {%- set ns = namespace(rows=['| Tag | Zeit | Fach |', '|---|---|---|']) -%}
26            {%- for d, label in labels.items() -%}
27              {%- for lesson in (state_attr('sensor.school_timetable_json', d) or []) | sort(attribute='start') -%}
28                {%- set ns.rows = ns.rows + ['| ' ~ label ~ ' | ' ~ lesson.start ~ '-' ~ lesson.end ~ ' | ' ~ lesson.subject ~ ' |'] -%}
29              {%- endfor -%}
30            {%- endfor -%}
31            {{ ns.rows | join('\n') }}

Den Zustand einer Entität begrenzt Home Assistant auf 255 Zeichen. Die Tabelle steckt deshalb im Attribut table und nicht im State. In einer Markdown-Card holst du sie dir mit {{ state_attr('sensor.school_schedule_table', 'table') }}.

Mit dem folgenden Snippet lasse ich mir das aktuelle Fach dann auf meinem Dashboard anzeigen. Wenn aktuell kein Unterricht stattfindet, ist diese Card automatisch ausgeblendet.

yaml
1type: conditional
2conditions:
3  - entity: binary_sensor.school_in_session
4    state: "on"
5card:
6  type: custom:mushroom-template-card
7  primary: "{{ states('sensor.school_current_subject') }}"
8  secondary: >
9    {{ state_attr('sensor.school_current_subject', 'current_start') }} – {{
10    state_attr('sensor.school_current_subject', 'current_end') }}
11  icon: mdi:school
12  icon_color: indigo
13  layout: vertical
14  tap_action:
15    action: more-info

Praxistipp

Für eine noch bessere Integration kannst du den Stundenplan automatisch aus einer externen Quelle generieren lassen, etwa einem Kalender. Alternativ lassen sich noch weitere Automationen bauen, die auf binary_sensor.school_in_session reagieren, wie etwa Erinnerungen oder das Einschalten von Lichtern am Morgen.

Fazit

Mit einem einfachen JSON-Datei-Ansatz und ein paar Template-Sensoren kannst du in Home Assistant einen voll funktionsfähigen Schulstundenplan abbilden. Neben aktueller und nächster Stunde hast du eine strukturierte Wochenübersicht und viele Möglichkeiten zur Einbindung in Automationen und Dashboards. Diese Lösung schafft Überblick und hilft, deine smarte Umgebung an den Alltag anzupassen.

Das Video zeigt, wie der Umgang mit „Dein Stundenplan in Home Assistant – Mit aktuellem & nächstem Fach automatisch im Dashboard“ konkret aussieht.

Snippet teilen