Zeitschaltuhr
Schreibt einen Datenpunkt zeitgesteuert. Wochentag, Uhrzeit, Astro-Ereignis (Sonnenauf-/-untergang, Dämmerung) mit Offset, einmaliges Datum oder Zeitraum. Master-Schalter pausiert ohne die Ereignisse zu verlieren.
Der Anwender legt im Frontend per Tipp aufs Widget Ereignisse an (nur Zeitpunkt). Was beim Auslösen geschrieben wird, konfiguriert der Admin im Widget-Edit-Panel.
Datenpunkt
Kein Haupt-Datenpunkt am Widget. Stattdessen Widget-Optionen (Admin):
| Feld | Pflicht | Typ | |
|---|---|---|---|
targetDp | ja | beliebig | Datenpunkt, der beim Auslösen geschrieben wird |
value | ja | string | wird automatisch als boolean · number · string geparst |
holidaysDp | nein | string (JSON) · boolean | Feiertage — Format siehe Sondertage |
vacationDp | nein | string (JSON) · boolean | Urlaubstage — Format siehe Sondertage |
holidaysValue | nein | string | Wert an Feiertagen — siehe Ausnahme-Wert |
vacationValue | nein | string | Wert im Urlaub — siehe Ausnahme-Wert |
Pro Widget gibt es unter aura.0.timers.<widget-id> drei States: config (JSON aller Ereignisse), enabled (Master) und reapply (siehe Plan erneut anwenden). Der Backend-Scheduler liest aus diesen States.
Layouts
Default
Statussymbol, Titel, Master-Schalter, Status-Zeile, Ereignisliste, Hinzufügen-Button — für mittlere Zellen.
Compact
Eine Kopfzeile mit Icon, Titel, Master und Zähler; darunter die Ereignisse in einer Zeile pro Eintrag — für schmale Zellen.
Custom
Frei plaziert in einer Zellenmatrix. Verfügbare Komponenten: icon, master, status, events, add, special-days, special-days-sm, actions (+ Ereignis und Ausnahmetage nebeneinander). Startet auf Wunsch aus dem bisherigen Layout (Aus Layout übernehmen); dafür die Komponenten status-line, event-list, master-sm, events-compact und das Feld countShort.
Statusfarbe
| Farbe | Bedeutung |
|---|---|
| Grau | Ziel-DP nicht gesetzt (und keine Ansage erlaubt) oder keine Ereignisse |
| Slate | Master aus — Ereignisse bleiben gespeichert |
| Orange | Master an, aber kein Ereignis aktiv |
| Grün | Mindestens ein Ereignis aktiv |
Einstellungen (Admin)
Sichtbare Felder
| Option | Standard | |
|---|---|---|
showTitle | true | Titel anzeigen |
showIcon | true | Statussymbol anzeigen |
showMasterSwitch | true | Master-Schalter anzeigen |
showEvents | true | Ereignisliste anzeigen |
showAddButton | true | „+ Ereignis"-Button anzeigen |
showSpecialDaysButton | true | Taste Ausnahmetage neben „+ Ereignis“ — nur mit holidaysDp / vacationDp |
icon | Timer | Lucide-Icon |
iconSize | 20 | px |
titleAlign | left | left · center · right |
Ziel-Aktion
| Option | Standard | |
|---|---|---|
targetDp | — | Ziel-DP — ohne Ziel-DP feuert nichts |
extraTargetDps | — | Weitere Ziel-DPs („+ Weiterer Datenpunkt“), bekommen denselben Wert — z. B. mehrere Thermostate |
value | true | Wert beim Auslösen |
reapplyOnStart | false | Beim Adapterstart den Wert schreiben, der laut Plan gerade gilt — siehe Plan erneut anwenden |
Beim Auslöser-Typ Zeitraum schreibt der Scheduler am Ende den invertierten Wert (true → false, 42 → 0, sonst leerer String).
Ansage
Ein Ereignis kann beim Auslösen etwas ansagen — z. B. täglich 7:00 „Die Mülltonne muss raus“. Über die Sprachausgabe, auch wenn kein Dashboard offen ist.
| Option | Standard | |
|---|---|---|
allowEventAnnounce | false | Feld Ansage im Ereignis-Editor; die Zeitschaltuhr läuft dann auch ohne targetDp |
announceTarget | device | device = auf dem Gerät, auf dem das Ereignis gespeichert wurde · all = alle Geräte |
| Ansage | |
|---|---|
| Inhalt | Text oder Sounddatei; [[Datenpunkt-ID]] = Wert eines Datenpunkts |
| Zeitraum | nur am Anfang |
mit targetDp | Wert schreiben und ansagen |
| in der Liste | 📢-Symbol am Ereignis |
In Popup-Ansicht oder Gerätekarte
targetDp | Verhalten |
|---|---|
mit Platzhalter, z. B. {{dp}} | je Gerät ein eigener Zeitplan; Ereignisse der Vorlage gelten, bis sie für das Gerät geändert werden |
| fester Datenpunkt | ein gemeinsamer Zeitplan für alle |
Ein Gerät wird erst geplant, wenn sein Popup einmal geöffnet bzw. seine Karte angezeigt wurde. In der Vorschau des Popup-Editors wird nichts geplant.
Sondertage (optional)
Wenn nicht gesetzt, sind die Filter „Nur Feiertage" / „Nur Urlaub" / „Ohne Sondertage" wirkungslos.
Der DP-Wert ist entweder ein Boolean oder ein JSON-Array:
| Variante | DP-Wert | Bedeutung |
|---|---|---|
| Boolean | true / false | true = heute ist Sondertag, false = nicht |
| JSON-Array | [ … ] | Liste aus den folgenden Einträgen, beliebig gemischt |
| ↳ Tag | "YYYY-MM-DD" | einzelner Tag |
| ↳ Zeitraum | "YYYY-MM-DD/YYYY-MM-DD" | beide Enden inklusive |
| ↳ Zeitraum | { "from": "YYYY-MM-DD", "to": "YYYY-MM-DD" } | beide Enden inklusive |
Beispiele
Boolean — z. B. feiertage.0.heute.boolean oder ein eigener Schalter „Urlaubsmodus“:
trueJSON — Feiertage, einzeln:
["2026-01-01", "2026-04-03", "2026-12-25", "2026-12-26"]JSON — Urlaub als Zeiträume, gemischt mit einem Einzeltag:
[
"2026-05-15",
"2026-07-20/2026-08-07",
"2026-10-26/2026-10-30"
]JSON — Zeitraum als Objekt (praktisch in Skripten):
[{ "from": "2026-12-28", "to": "2027-01-02" }]| Option | Standard | |
|---|---|---|
holidaysDp | — | DP für Feiertage (Boolean oder JSON-Array) |
vacationDp | — | DP für Urlaub (Boolean oder JSON-Array) |
holidaysValue | — | Wert, solange holidaysDp den Tag als Feiertag markiert |
vacationValue | — | Wert, solange vacationDp den Tag als Urlaub markiert |
holidaysEditable | true | Feiertagsliste im Frontend bearbeitbar |
vacationEditable | true | Urlaubsliste im Frontend bearbeitbar |
Ausnahmetage im Frontend
Taste unten neben „+ Ereignis“ → Popup mit je einem Reiter für Urlaub und Feiertage.
| Beschriftung | Bedeutung |
|---|---|
Urlaub heute · Urlaub bis 18.10. | heute ist Sondertag — Taste hervorgehoben |
Urlaub ab 01.03. · Feiertag 24.12. | nächster anstehender Eintrag |
Ausnahmetage | nichts geplant |
Urlaub geht vor Feiertag.
| Aktion | Ergebnis im DP |
|---|---|
| Tag wählen, „Tag hinzufügen“ | "YYYY-MM-DD" |
| Tag + „Bis“, „Zeitraum hinzufügen“ | "YYYY-MM-DD/YYYY-MM-DD" |
| Papierkorb | Eintrag entfernt |
| „Vergangen → Alle entfernen“ | abgelaufene Einträge entfernt |
| DP-Wert | Popup |
|---|---|
| leer · JSON-Array | bearbeitbar; vorhandene Einträge (auch {from,to}) bleiben unverändert |
Boolean (z. B. feiertage-Adapter) | nur Anzeige, wird nie überschrieben |
…Editable = false | nur Anzeige |
Der DP muss existieren (Typ string). Die Liste gilt für jede Zeitschaltuhr mit demselben DP.
Ausnahme-Wert
Leer = aus. Gesetzt:
| Moment | Verhalten |
|---|---|
| Ausnahme beginnt | Wert wird einmal in targetDp geschrieben (spätestens nach einem Tick) |
| Ausnahme aktiv | alle Ereignisse pausieren — außer Filter only-vacation (Urlaub) bzw. only-holidays (Feiertag) |
| Ausnahme endet | Wert des zuletzt fälligen regulären Ereignisses (bis 7 Tage zurück) wird wieder geschrieben |
| Urlaub + Feiertag | vacationValue hat Vorrang |
Beispiel Heizung: vacationValue = 16, Urlaub als Zeitraum bis einen Tag vor der Rückkehr — am Rückreisetag läuft wieder der normale Heizplan.
Ereignis-Editor (Anwender)
Tipp auf einen Eintrag oder den + Ereignis-Button öffnet das Modal. Schließt nur über X · Abbruch · ESC (kein Klick außerhalb).
Auslöser
| Typ | Felder | Hinweis |
|---|---|---|
| Zeit | hour, minute | tagesaktuell, kombiniert mit Wochentagen |
| Astro | event, offsetMin | sunrise · sunset · dawn · dusk · solarNoon mit Offset in Minuten |
| Einmalig | iso | feuert genau einmal, danach automatisch deaktiviert |
| Zeitraum | fromIso, toIso | feuert am Start und am Ende (invertiert) |
Wochentage
Sieben Toggle-Chips (Mo–So) bei Zeit- und Astro-Auslösern. Kein Wochentag ausgewählt = das Ereignis feuert nie.
Filter
| Wert | Verhalten |
|---|---|
all-days | keine Einschränkung |
no-special | überspringt Tage aus holidaysDp oder vacationDp |
only-holidays | nur an Tagen aus holidaysDp |
only-vacation | nur an Tagen aus vacationDp |
blocked | überspringt, wenn blockFromMin ≤ aktuelle Minute < blockToMin (Fenster darf Mitternacht überschreiten) |
Scheduler
Der Backend-Scheduler läuft im iobroker.aura-Adapter-Prozess. Tick-Intervall ist in den Instanz-Einstellungen einstellbar (timerTickSeconds, 5–600 s, Standard 30 s). Jeder Tick prüft alle Ereignisse aller Timer-Widgets gegen das aktuelle Tick-Fenster und schreibt fällige Werte mit ack=false.
Logzeilen im Adapter:
[timers] loaded N timer widget(s)
[timers] scheduler tick = 30s
[timers] fired <Label>: <Ziel-DP> ← <Wert>Plan erneut anwenden
aura.0.timers.<widget-id>.reapply = true (z. B. per Skript) schreibt sofort den Wert, der laut Plan gerade gilt — nützlich nach Stromausfall oder Handbedienung.
| Situation | geschrieben wird |
|---|---|
| Ausnahme aktiv | holidaysValue / vacationValue |
| sonst | Wert des zuletzt fälligen Ereignisses (bis 7 Tage zurück); Zeitraum-Ende = invertierter Wert |
| Timer aus (Master) | nichts |
| kein fälliges Ereignis | nichts |
Einmal-Ereignisse zählen nicht mit. Mit reapplyOnStart passiert dasselbe bei jedem Adapterstart.
Bearbeitungsmodus
Im Admin-Editor ist das Widget read-only — Master, Events und der „+ Ereignis"-Button reagieren nicht, der Admin stylt und layoutet nur. Ereignisse pflegt ausschließlich der Anwender im Live-Frontend.