NEWS
Time Of Day - Design Pattern
-
Hallo,
nach Suche im Forum habe ich leider kein "Time Of Day"-Pattern gefunden und daher selbst ein kleines Skript geschrieben.
Worum geht es:
Abbildung einer Zeitschaltuhr über Zustände der aktuellen Tageszeit.
Dies Zustände sind beispielweise: Morgen, Nachmittag, Abend, Bettzeit etc.
Im Prinzip wird der Tag in mehrere Zeitabschnitte eingeteilt und diese in einem Datenpunkt vorgehalten.Beispiel:
// Zustand Start //------------------------------------------ // MORNING 05:30 // DAY Sunrise // HIGHNOON Solarnoon - 30 minutes // AFTERNOON Solarnoon + 30 minutes // LATEAFTERNOON Sunset - 60 minutes // EVENING Sunset -5 minutes // NIGHT 23:00 // BED 00:30Bezogen auf das Beispiel nimmt der Datenpunkt den Zustand jeweils mit Eintritt des Start-Ereignisses an.
D.h. der Zustand "MORNING" startet um 5:30 Uhr und gilt bis zum nächsten Zustandswechsel durch den Zustand "DAY" mit "Sunrise" (Sonnenaufgang).Mit Ausführung des Skripts wird ein Datenpunkt "javascript.0.TimeOfDay.timeOfDay.current" erzeugt, der die aktuelle Tageszeit wiederspiegelt:

Beispiel: Praktische Anwendung der Lösung:
Ich nutze das Skript momentan, um die Lampen im Haus automatisiert ein- und auszuschalten.

Jeden Morgen um 5:30 Uhr (MORNING) und 5 Minuten vor Sonnenuntergang (EVENING) werden bestimmte Lampen eingeschaltet. Mit Sonnenaufgang (DAY) und Beginn der Bettzeit (BED) werden die Lampen im gesamten Haus ausgeschaltet. Zusätzlich versende ich noch ein Telegram (zur Kontrolle).
Beispiel-Blockly:
Genauso wie die Lampen gesteuert werden können sind natürlich unendlich weitere Kombinationslogiken möglich.
Vor/Nachteile der Lösung:
Sehr einfache Lösung einer "Zeitschaltuhr" ohne komplexen Nebenlogiken.
Zentralisierung der Logik der Zeitschaltuhr in einem Skript.
In allen anderen Skripten / Logiken kann man auf den Datenpunkt zugreifen und einfach den Zustand der aktuellen Tageszeit abfragen. Nachteilig ist, dass es keine Überschneidungen von Zeiten gibt. Ebenso werden nur globale Zeiten vorgegeben.Ideen/Co-Autoren
Die Idee des "Time Of Day"-Pattern habe ich von OpenHab übernommen (siehe Desing Pattern: Time of Day).
Das Skript mit der Astrologik beruhet auf dem Skript von Pix (siehe Iobroker.net Community Post).Installation
In den Haupteinstellungen von IOBroker sind Breiten- und Längengrad vorzugeben, damit die Astro-Funktion die richtigen Zeiten ermitteln kann (für Sonnenaufgang / Sonnenuntergang etc.).
Das folgende Skript ist als JavaScript "TimeOfDay" einfügen.
Die Zeiten bzw. weitere Tageszeitzustände können prinzipiell natürlich selbst nochmal an die eigenen Vorgaben angepasst werden.Javascript "TimeOfDay"
Optimierungspotenziale
Im Datenpunkt erscheint der aktuelle Tageszustand erst mit initialem Wechsel der Zeit (hier könnte man bei initialer Ausführung noch den aktuellen Zustand ermitteln!).
Prizipiell sind die Astro-Funktionen nicht notwendig für das Skript (ich habe sie hier drin, damit ich selbst weiss welche Zeiten ich für Systemzustände setzen kann).
Aktuell wird das Skript für die Astro-Funktion minütlich aufgerufen (ich hatte dies aus dem Skript von PIX übernommen). Dies ist gar nicht notwendig, es sollte denke ich ausreichen die Astro-Zeiten einmal am Tag neu zu ermitteln (mit Tageswechsel!).
-
Hallo,
nach Suche im Forum habe ich leider kein "Time Of Day"-Pattern gefunden und daher selbst ein kleines Skript geschrieben.
Worum geht es:
Abbildung einer Zeitschaltuhr über Zustände der aktuellen Tageszeit.
Dies Zustände sind beispielweise: Morgen, Nachmittag, Abend, Bettzeit etc.
Im Prinzip wird der Tag in mehrere Zeitabschnitte eingeteilt und diese in einem Datenpunkt vorgehalten.Beispiel:
// Zustand Start //------------------------------------------ // MORNING 05:30 // DAY Sunrise // HIGHNOON Solarnoon - 30 minutes // AFTERNOON Solarnoon + 30 minutes // LATEAFTERNOON Sunset - 60 minutes // EVENING Sunset -5 minutes // NIGHT 23:00 // BED 00:30Bezogen auf das Beispiel nimmt der Datenpunkt den Zustand jeweils mit Eintritt des Start-Ereignisses an.
D.h. der Zustand "MORNING" startet um 5:30 Uhr und gilt bis zum nächsten Zustandswechsel durch den Zustand "DAY" mit "Sunrise" (Sonnenaufgang).Mit Ausführung des Skripts wird ein Datenpunkt "javascript.0.TimeOfDay.timeOfDay.current" erzeugt, der die aktuelle Tageszeit wiederspiegelt:

Beispiel: Praktische Anwendung der Lösung:
Ich nutze das Skript momentan, um die Lampen im Haus automatisiert ein- und auszuschalten.

Jeden Morgen um 5:30 Uhr (MORNING) und 5 Minuten vor Sonnenuntergang (EVENING) werden bestimmte Lampen eingeschaltet. Mit Sonnenaufgang (DAY) und Beginn der Bettzeit (BED) werden die Lampen im gesamten Haus ausgeschaltet. Zusätzlich versende ich noch ein Telegram (zur Kontrolle).
Beispiel-Blockly:
Genauso wie die Lampen gesteuert werden können sind natürlich unendlich weitere Kombinationslogiken möglich.
Vor/Nachteile der Lösung:
Sehr einfache Lösung einer "Zeitschaltuhr" ohne komplexen Nebenlogiken.
Zentralisierung der Logik der Zeitschaltuhr in einem Skript.
In allen anderen Skripten / Logiken kann man auf den Datenpunkt zugreifen und einfach den Zustand der aktuellen Tageszeit abfragen. Nachteilig ist, dass es keine Überschneidungen von Zeiten gibt. Ebenso werden nur globale Zeiten vorgegeben.Ideen/Co-Autoren
Die Idee des "Time Of Day"-Pattern habe ich von OpenHab übernommen (siehe Desing Pattern: Time of Day).
Das Skript mit der Astrologik beruhet auf dem Skript von Pix (siehe Iobroker.net Community Post).Installation
In den Haupteinstellungen von IOBroker sind Breiten- und Längengrad vorzugeben, damit die Astro-Funktion die richtigen Zeiten ermitteln kann (für Sonnenaufgang / Sonnenuntergang etc.).
Das folgende Skript ist als JavaScript "TimeOfDay" einfügen.
Die Zeiten bzw. weitere Tageszeitzustände können prinzipiell natürlich selbst nochmal an die eigenen Vorgaben angepasst werden.Javascript "TimeOfDay"
Optimierungspotenziale
Im Datenpunkt erscheint der aktuelle Tageszustand erst mit initialem Wechsel der Zeit (hier könnte man bei initialer Ausführung noch den aktuellen Zustand ermitteln!).
Prizipiell sind die Astro-Funktionen nicht notwendig für das Skript (ich habe sie hier drin, damit ich selbst weiss welche Zeiten ich für Systemzustände setzen kann).
Aktuell wird das Skript für die Astro-Funktion minütlich aufgerufen (ich hatte dies aus dem Skript von PIX übernommen). Dies ist gar nicht notwendig, es sollte denke ich ausreichen die Astro-Zeiten einmal am Tag neu zu ermitteln (mit Tageswechsel!).
@Tirador Vielen Dank für das tolle Skript, dass diverse Zeiten einfach über einen DP verfügbar macht :)