Problem mit OH3 Timer-Rule

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
cyrill.sneer
Beiträge: 17
Registriert: 25. Jan 2022 12:14
Answers: 0

Problem mit OH3 Timer-Rule

Beitrag von cyrill.sneer »

Hallo zusammen,

ich habe einen Timer, der immer dann mit 90 Miunten gestartet wird, wenn der Bewegungsmelder im Flur ausschaltet.
Ziel ist zwischen 22 und 7 Uhr zu erkennen, dass es 90 Minuten keine Bewegung im Flur gab und dann das Haus in den Standby schaltet.

Code: Alles auswählen

rule "Sleeptimer"
  when
		Item EG_FLUR_LED_Treppe_Schalten changed
	then	{ 
		if
		((now.toLocalTime.getHour > 22 ||
		now.toLocalTime.getHour < 7) &&
		timer_sleep === null)	{
			timer_sleep = createTimer(now.plusMinutes(90))
			[|PanasonicTV_Remote.sendCommand("POWER")
//			weitere Schritte
			timer_sleep = null]
   			 }
  else	{ timer_sleep.reschedule(now.plusMinutes(90))}
		}
end
Das funktioniert soweit einwandfrei. Allerdings schaltet die Rule auch morgens 90 Minuten nach dem letzten ausschalten der BWM in den Standby. Woran kann das liegen? Ich bin gerade ratlos...

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

Re: Problem mit OH3 Timer-Rule

Beitrag von udo1toni »

Das ist einem Denkfehler Deinerseits geschuldet :)

Du nutzt ein if - else.
Du prüfst, ob Zeitraum erfüllt und Timer nicht gestartet. Ist das der Fall, legst Du den Timer an (soweit korrekt)
Andernfalls planst Du den Timer erneut (also falls auch nur eine der Bedingungen oben nicht erfüllt ist).

Weiterhin triggert die Rule bei jeder Änderung. Im Zweifel wird das Licht nach weniger als 90 Minuten ausgehen, es wäre also sinnvoll, auf changed to OFF zu triggern, da dies ohnehin der letzte Trigger ist.

Code: Alles auswählen

rule "Sleeptimer"
when
    Item EG_FLUR_LED_Treppe_Schalten changed to OFF                 // Licht schaltet nach Bewegung wieder aus
then
    timer_sleep?.cancel                                             // Timer entfernen, falls geplant
    if(now.toLocalTime.getHour < 23 && now.toLocalTime.getHour > 6) // falls Uhrzeit zwischen 7:00:00 und 23:00:00
        return;                                                     // Regel abbrechen

    timer_sleep?.cancel                                             // Timer entfernen, falls geplant
    timer_sleep = createTimer(now.plusMinutes(90), [ |              // Timer anlegen (Lambda ist 2. Parameter der Definition) 
        PanasonicTV_Remote.sendCommand("POWER")
        //    weitere Schritte
    ])                                                              // Ende von createTimer
end
Der Code ist etwas anders formatiert und arbeitet im Detail etwas anders, sollte aber Deinem Wunsch entsprechen.

Die Rule wird nur beim Ausschalten des Lichts getriggert.

Zunächst wird ein eventuell laufender Timer entfernt. Das Fragezeichen zwischen timer_sleep und .cancel bewirkt, dass der Befehl .cancel nur ausgeführt wird, wenn der Timer auch existiert. Ist also das Gleiche wie if(timer_sleep !== null) timer_sleep.cancel.
Dieser Punkt ist nicht unwichtig, denn wir wollen nicht, dass ein eventuell kurz vor 7 Uhr gestarteter Timer noch auf Standby schaltet, falls danach wieder Bewegung erkannt wird.
Eventuell möchtest Du noch eine weitere Rule anlegen, die um 7 Uhr gezielt laufende Timer cancelt.

Sollte die Rule zwischen 7 Uhr und 23 Uhr getriggert werden, so wird sie an dieser Stelle abgebrochen.

Anschließend ist sichergestellt, dass es keinen laufenden Timer gibt, aber der Zeitraum passt.
Nun kann also der Timer angelegt werden.

Ich nutze gerne die Schreibweise, bei der deutlich wird, dass das Lambda (Teil zwischen [ | und ]) ein Teil des Funktionsaufrufs createTimer() ist. Deshalb schreibe ich es innerhalb der Klammern und trenne es als zweiten Parameter mit einem Komma ab.

Ich gehe davon aus, dass PanasonicTV_Remote.sendCommand("POWER") nicht hinreichend ist. Oder ist dies ein definierter Ausschaltbefehl?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

cyrill.sneer
Beiträge: 17
Registriert: 25. Jan 2022 12:14
Answers: 0

Re: Problem mit OH3 Timer-Rule

Beitrag von cyrill.sneer »

Hallo Udo,

wow! Zunächst einmal herzlichen Dank für die schnelle und kompetente Antwort.
Ich habe es gerade eingebaut und es scheint zu funktionieren :-)

Der Exit (return) wenn die Uhrzeit nicht richtig ist, macht Sinn. Tatsächlich war das den Logikfehler...
Ansonsten kannte ich das mit dem Fragezeichen zur Prüfung ob ein Wert enthalten ist nicht. Klasse.

Ob ich bei Change oder beim Ausschalten triggere, ist egal, da der letzte Wechsel immer ein Off ist und die Zeitdauer deutlich unter der des Sleeptimers ist.

PS:
Nachdem das Pana-Binding unter OH3 nicht mehr verfügbar ist, habe ich eine Lösung per http-Aufruf im Weg gefunden un implementiert. Die Zeile PanasonicTV_Remote.sendCommand("POWER") schaltet die Glotze ab.

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

Re: Problem mit OH3 Timer-Rule

Beitrag von udo1toni »

cyrill.sneer hat geschrieben: 25. Jan 2022 19:03 Ob ich bei Change oder beim Ausschalten triggere, ist egal, da der letzte Wechsel immer ein Off ist und die Zeitdauer deutlich unter der des Sleeptimers ist.
Na ja, nein :) Der Punkt ist, dass es sinnlos ist, auf changed (ohne to OFF) zu triggern, weil jeder von OFF verschiedene Wert in weniger als 90 Minuten wieder überschrieben wird.
Mehr noch, stellen wir uns vor, du machst einen 2-Stunden-Dauerlauf in Deinem Flur und der Bewegungsmelder triggert die Lampe alle paar Sekunden auf ON. die Lampe bleibt also dauerhaft eingeschaltet, weil ständig Bewegung erkannt wird. Leider hast Du um 23:00:00 Uhr mit dem Dauerlauf angefangen, das Haus geht dann nach 90 Minuten in Standby, obwohl Du die ganze Zeit den Flur rauf und runter wetzt. ;)
Ich gebe zu, dass es eher ungewöhnlich wäre... aber den Sonderfall "mehr als 90 Minuten Hochbetrieb nach 23 Uhr" deckst Du zusätzlich ab, wenn Die Rule nur auf das OFF-Ereignis triggert. Eigentlich müsste man sogar from ON to OFF setzen, um auszuschließen, dass Du bei einem Systemstart nach 23 Uhr die Rule triggerst (Statuswechsel von UNDEFINED oder NULL zu OFF).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

cyrill.sneer
Beiträge: 17
Registriert: 25. Jan 2022 12:14
Answers: 0

Re: Problem mit OH3 Timer-Rule

Beitrag von cyrill.sneer »

Danke für Deine ausführliche Antwort! Ich verneige mein Haupt und triggere auf OFF :)

Antworten