Zeitschaltuhr mit Channels

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

Zeitschaltuhr mit Channels

Beitrag von harteknut »

Hallo zusammen,

ein immer mal wiederkehrendes Thema in openHAB ist m.E. die nicht vorhandene Zeitschaltuhr.
Ich kann zwar auf cron-Expressions triggern (oder auf "when time is midnight"), aber nicht einfach auf DateTime-Items.

Daher meine Frage:
Ist es möglich, ein Thing zu erzeugen, dass entsprechende Channels hat, die bei durch DateTime-Items festgelegte Zeitpunkte feuern?

Bislang gehe ich den Umweg über einen Switch, fände den anderen Weg aber "eleganter".

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Zeitschaltuhr mit Channels

Beitrag von udo1toni »

Das stimmt so einfach nicht. Richtig ist, es gibt keine Widgets, um Timer zu erstellen. Richtig ist weiterhin, dass es nicht vorgesehen ist, Rules anhand eines Status zu starten, was auch logisch ist, denn openHAB triggert Rules ausschließlich aufgrund von Events. Ein DateTime Item Status ist aber kein Event, sondern ein Status.
Es ist aber durchaus möglich, Timer zu definieren und an Terminen auszuführen, das geht über (externe) Kalender. Zu nennen sind hier das gcal Binding und das iCalendar Binding, sowie (in OH1/2) das caldav Binding. iCalendar ist quasi der Nachfolger von caldav, ist aber nicht deckungsgleich.

openHAB will verschiedenste Technologien zusammenführen, Ziel ist es erklärtermaßen nicht, für alle Funktionen eine eigene Oberfläche zu implementieren. Es mag lästig sein, für eine Timerfunktion extra OwnCloud oder NextCloud zu installieren, das gilt aber für alle anderen Technologien auch (extra mosquitto installieren usw.) und man kann natürlich auch schon vorhandene (online) Kalender verwenden, natürlich um den Preis, dass man auf eine Internetverbindung angewiesen ist. Man kann aber den Kalender perfekt nutzen, um Einzeltermine oder auch wiederkehrende Termine zu planen und man hat eine gewohnte Umgebung, um Termine zu planen.

Zeitschaltuhren werden immer wieder als absolutes Muss gesehen, insbesondere, dass man jederzeit komfortabel die Schaltzeiten einstellen kann. Aber ganz ehrlich: Wie oft werden die Schaltzeiten tatsächlich geändert? Und wenn dies häufig passiert: Ist dann eine Zeitschaltuhr wirklich das Mittel der Wahl?
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

Re: Zeitschaltuhr mit Channels

Beitrag von harteknut »

Hallo Udo,
danke für Deine Antwort (auch wenn sie mit "Das stimmt so einfach nicht." beginnt).
Ich habe mich evtl. falsch ausgedrückt. Ich weiß schon, dass ich nur mit Events Rules triggern kann, das passt ja auch. Und ich will die Schaltzeiten gar nicht an der UI umstellen, denn wie Du schon richtig vermutest, stelle ich die (wie wahrscheinlich die Meisten) eh über mehrere Jahre nicht um.
Mein OH aber schon, weil ich z.B. den Aufheizstart für die Bäder von der Außentemperatur abhängig mache. Heißt: Es wird jeden Tag ein anderer Zeitpunkt berechnet. Daher arbeite ich mit DateTime-Items und nicht mit cron.
Aktuell habe ich für meine zeitabhängigen Ereignisse eine Regel, die alle 5min durchläuft und mit "isbefore" und "isafter" alles mögliche prüft und dann verschiedene Items setzt, deren Statuswechsel dann entsprechende Rules triggert. Das ist irgendwie unschön.

Mein Gedanke war Folgender:
Beispielsweise das Astro Binding hat Things (Sonne, Mond) und an jedem hängen Channels, z.B. "rise#start" (DateTime-Item) und entsprechende Trigger "rise#event". Das DateTime Item wird jetzt automatisch (je nach Ort und Jahreszeitpunkt) befüllt, der Trigger feuert dann, wenn das entsprechende Ereignis erreicht ist.
So gehen jeden Abend meine Jalousien runter.

Ich dachte nun es könnte auch ein Binding geben, das ich evtl. nicht kenne, welches dasselbe ohne die externe Befüllung des Items macht. Ich hätte alse ein Thing, z.B. "Uhr" mit entsprechenden Channels mit DateTime-Items, die ich dann (per Rule o.ä.) beschreiben kann, und Triggern, die dann entsprechend feuern. Gibt es sowas?

Könnte ich natürlich auch mit iCalendar versuchen, da habe ich mich noch nicht rangewagt.

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Zeitschaltuhr mit Channels

Beitrag von udo1toni »

Das ist eine relativ spezielle Steuerung :) es wäre tatsächlich schick, ein Binding zu haben, dem man über Items mittteilen kann, einen Event Channel zu einem bestimmten Zeitpunkt zu triggern. Gibt es aber meines Wissens nicht :(

Eine bessere Art der Timer Steuerung wäre, die errechnete Zeit mit createTimer() in einen Timer zu schreiben, der dann einfach den Code ausführt. Ein zyklischer Vergleich ist definitiv nur die zweite Wahl :)
Wenn Du ein DateTime Item nutzt, reicht eine Rule, die bei Änderung des DateTime Items triggert, den Inhalt prüft (liegt der Status in der Zukunft?) und gegebenenfalls den Timer anlegt. Zum konfigurierten Zeitpunkt führt der Scheduler dann den Code aus.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

Re: Zeitschaltuhr mit Channels

Beitrag von harteknut »

Das mit dem Timer ist eine supergute Idee! Diese zyklisch ausgeführten Regeln nerven nämlich voll. Das guck ich mir mal an...

harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

Re: Zeitschaltuhr mit Channels

Beitrag von harteknut »

Noch eine Frage: Kann ich als Aktion, die nach Ablauf des Timers durchgeführt wird, auch eine rule auslösen? Oder muss ich dafür den Umweg über ein Dummy-Item gehen?

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Zeitschaltuhr mit Channels

Beitrag von udo1toni »

Letzteres. Der Scheduler führt immer das Lambda aus, welches beim Anlegen übergeben wurde. Letztlich musst Du also nur den Code in den Timer schreiben, statt in einer separaten Rule.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten