Seite 1 von 1
Kaffee Maschine starten | Erste Bewegung Schlafzimmer
Verfasst: 11. Jul 2021 16:33
von juschi
Hallo Zusammen,
ich suche gerade nach einer Regel um die Kaffeemaschine zu starten, wenn man morgens aus dem Bett aufsteht.
Ich habe auch schon eine funktionierende Regel gebaut, glaube aber dass es evtl. eine bessere Lösung gibt. Vorschläge sind herzlich willkommen.
Das ist die bisherige Regen:
Code: Alles auswählen
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
Re: Kaffee Maschine starten | Erste Bewegung Schlafzimmer
Verfasst: 12. Jul 2021 00:19
von udo1toni
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():
Code: Alles auswählen
var Boolean bCoffee = false
rule "Kaffee"
when
Item motion_sz_status changed to ON // Bewegung erkannt
then
if(coffee_automatik.state != ON) // Automatik aus?
return;
if(anwesenheit.state != ON) // Abwesend?
return;
if(bCoffee) // heute schon eingeschaltet?
return;
if (now.getHour() < 7 || now.getHour() > 9) // zwischen 7 und 10 Uhr?
return;
coffee_system_power_state_on_off.sendCommand(ON) // Kaffeemaschine an
bCoffee = true // Einschaltvorgang merken
end
rule "Reset Merker"
when
Time cron "0 0 0 * * ?" // täglich um 0:00:00 Uhr
then
bCoffee = false // Variable zurücksetzen
end
Re: Kaffee Maschine starten | Erste Bewegung Schlafzimmer
Verfasst: 12. Jul 2021 22:50
von juschi
Mal wieder vielen Dank für deine ausführliche Antwort
Ich hab das mal so übernommen, nur dass ich die Zeiten angepasst habe ... das kleiner und größer sieht etwas unlogisch aus.
Hast du evtl auch einen Ansatz mit einem Zeitvergleich?
Re: Kaffee Maschine starten | Erste Bewegung Schlafzimmer
Verfasst: 12. Jul 2021 23:26
von udo1toni
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:
Code: Alles auswählen
if((now.getHour*60+now.getMinute)<(6*60+30) || (now.getHour*60+now.getMinute)>(10*60+15) )
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.
Re: Kaffee Maschine starten | Erste Bewegung Schlafzimmer
Verfasst: 12. Jul 2021 23:48
von juschi
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.
Das habe ich mal benutzt und will dieses Zeitstempel so abgleichen, dass es nur der erste ist.
Re: Kaffee Maschine starten | Erste Bewegung Schlafzimmer
Verfasst: 13. Jul 2021 16:22
von udo1toni
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.