Kaffee Maschine starten | Erste Bewegung Schlafzimmer

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
juschi
Beiträge: 13
Registriert: 23. Mär 2020 21:49
Answers: 0

Kaffee Maschine starten | Erste Bewegung Schlafzimmer

Beitrag 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


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

Re: Kaffee Maschine starten | Erste Bewegung Schlafzimmer

Beitrag 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
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

juschi
Beiträge: 13
Registriert: 23. Mär 2020 21:49
Answers: 0

Re: Kaffee Maschine starten | Erste Bewegung Schlafzimmer

Beitrag 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?

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

Re: Kaffee Maschine starten | Erste Bewegung Schlafzimmer

Beitrag 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.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

juschi
Beiträge: 13
Registriert: 23. Mär 2020 21:49
Answers: 0

Re: Kaffee Maschine starten | Erste Bewegung Schlafzimmer

Beitrag 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.

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

Re: Kaffee Maschine starten | Erste Bewegung Schlafzimmer

Beitrag 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.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten