var Number n_starts = 0
rule "Kaffee"
when Item motion_sz_status changed from OFF to ON or Time cron "0 0 0 ? * * *"
then
if (now.getHour() > 6 && now.getHour() <= 9 && anwesenheit.state == ON && n_starts == 0 && coffee_automatik.state == ON) {
n_starts = 1
coffee_system_power_state_on_off.sendCommand("on") }
if (now.getHour() == 0) {
n_starts = 0 }
end
Sagen wir mal so: in diesem Fall wäre es zum Einen besser, zwei Rules zu verwenden, zum Anderen bevorzuge ich bei solchen Rules den fallweisen Abbruch, denn dann steht der Weg offen, eine Meldung einzubauen - z.B. mit logInfo():
Wieso unlogisch? Falls die aktuelle Stunde (also die Stellen vor dem Doppelpunkt bei einer Digitalanzeige) kleiner als 7 ist oder größer als 9, wird die Rule abgebrochen. Damit ist der erlaubte Zeitraum zum Einschalten 7:00:00 Uhr bis 09:59:59 Uhr.
Wenn der gewünschte Zeitrahmen nicht mit der vollen Stunde beginnt und/oder endet, empfielt es sich, auf die Minute des Tages auszuweichen. In OH1/2 stand stand sogar eine eigene Funktion zur Verfügung, Java Time hat die leider nicht, so muss es dann so gehen:
Diese Bedingung trifft also zu, wenn es vor 6:30 Uhr ist oder nach 10:15 Uhr. es spielt dabei nur die Minute eine Rolle, 10:15:59 ist also nicht außerhalb des Zeitfensters.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
Ja, du hast natürlich vollkommen Recht! Ich habe meine bisherigen Regeln immer darauf aufgebaut, dass diese nur bei positiv Bedingung weitergehen. Ich sollte wohl den abendlichen Whiskey weglassen wenn ich mich mit OH beschäftige
Ich habe eher an eine Regel gedacht, wo der erste Auslöser (Bewegung) das Datum in eine Variable schreibt und diese mit dem heutigen Datum vergleicht. Ich hab mich wohl etwas falsch ausgedrückt.
juschi hat geschrieben: ↑12. Jul 2021 23:48
Ich habe eher an eine Regel gedacht, wo der erste Auslöser (Bewegung) das Datum in eine Variable schreibt und diese mit dem heutigen Datum vergleicht.
Datumsvergleich ist immer aufwändig... Die Boolean Variable reicht doch vollkommen aus, um die Maschine maximal einmal am Tag einzuschalten? Natürlich brauchst Du eine Rule zum Zurücksetzen, aber die trägt halt nicht weiter auf, wie man im Code ja gut sehen kann.
Du könntest natürlich auch ein Item zum Speichern verwenden, das kannst Du dann persistieren, um sicherzustellen, dass die Information auch nach einem Neustart von openHAB noch zur Verfügung steht. Da aber das Item schon persistiert wird (muss ja...) reicht ein MeinMerkerItem.postUpdate(NULL) aus. In der Rule kannst Du dann MeinMerkerItem.lastUpdate verwenden und zum Vergleich heranziehen.
Falls Du den Zeitpunkt festhalten willst, kannst Du natürlich auch einen Zeitstempel ins Item schreiben.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet