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 :D

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.

Code: Alles auswählen

postUpdate(kamera_flur_video_1, new DateTimeType())
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.