Watchdog soll nur in bestimmten Zeitraum auslösen

Begonnen von d0m2011, 12 März 2017, 19:07:14

Vorheriges Thema - Nächstes Thema

d0m2011

Hallo zusammen,

ich bin etwas am verzweifeln.
Folgende Idee:
Sobald alle Personen aus dem Haus sind, soll mein Staubsauer (nach 30 Minuten) am Montag zwischen 07:00 Uhr und 14:00 Uhr loslegen.
Mein Code:

Bewohner:absent.* 00:30:00 Bewohner:home.* { if(($wday == 1 ) && (($hour >= 7 || $hour < 14))) { fhem("set clean on") }}; setstate clean_montag defined

Leider, sobald am Abend alle noch einmal das Haus nach 14 Uhr verlassen, läuft der Roboter wieder los.
Klar, durch setstate "reaktiviere" ich den Watchdog wieder. Dennoch sollte er nach 14 Uhr nicht mehr reagieren.

Laut Wiki ist der Zeitraum richtig definiert.

Ich habe zwei weitere Watchdogs für Mittwoch und Freitag (gleiches Prozedere).
Wahrscheinlich werde ich setstate wieder wegnehmen und am Samstag alle Watchdogs wieder reaktivieren lassen -> Um Doppelausführungen zwischen 07:00 und 14:00 Uhr zu vermeiden.


Danke vorab für eure Hilfe!
Grüße

betateilchen

watchdog kennt das Attribut disabledForIntervals, das ist genau dafür gemacht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

d0m2011

Ah okay, perfekt.
Heißt er macht das Ganze nur einmal.
Aber wie sage ich ihm, dass er die Woche drauf es wieder tun soll?

Und was ist bei meinem Zeitraum falsch?

betateilchen

vemutlich falsche Logik.

Wenn er zwischen 7 Uhr UND 14 Uhr arbeiten soll, macht es keinen Sinn, auf ODER zu prüfen.

if ( $wday == 1  && $hour >= 7 && $hour < 14 )
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

d0m2011

Ah okay, also so:

Bewohner:absent.* 00:30:00 Bewohner:home.* { if ($wday == 1 && $hour >= 7 $hour < 14) { fhem("set clean on") }}

Wie funktioniert das mit "disableForIntervals"?

kumue


d0m2011

Bewohner:absent.* 00:30:00 Bewohner:home.* { if(($wday == 5 ) && (($hour >= 7 && $hour < 14))) { fhem("set clean on") }}

So ist es richtig. Beide Striche müssen durch zwei && ersetzt werden.

betateilchen

Das ist doch gleiche wie mein Vorschlag oben, nur mit einer Menge völlig sinnloser Klammern.

Und Dein Staubsauger arbeitet jetzt freitags statt montags.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

d0m2011

Ich hab die Klammer nun stehen lassen.
Ohne hat es nicht funktioniert, komisch, ich weiß.

Mein Staubsauber muss Montag, Mittwoch und Freitag ran ;)

CoolTux

Zitat von: d0m2011 am 12 März 2017, 22:07:58
Ich hab die Klammer nun stehen lassen.
Ohne hat es nicht funktioniert, komisch, ich weiß.

Mein Staubsauber muss Montag, Mittwoch und Freitag ran ;)


Bewohner:absent.* 00:30:00 Bewohner:home.* { fhem("set clean on") if( ($wday == 1 or $wday == 3 or $wday == 5) and $hour >= 7 and $hour < 14) };
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

d0m2011

Stimmt, ich könnte es auch mit nur einem Watchdog lösen.
Dann bleibt nur noch ein Problem.
Wie bringe ich Ihm bei, nur einmal an diesen Tagen zu saugen?

Annahme:
Ich verlasse um 07:00 das Haus. Staubsauger legt um 07:30 los.
Ich komme um 10 und gehe um 10:30 wieder -> Staubsauger legt um 11:00 Uhr wieder los.
Lösung wäre: Drei Wachtdogs (einer je Tag) und diese am Sonntag wieder auf defined setzen.

Mit der "Interval Funktion" finde ich keine Lösung.

CoolTux

Suche Dir ein Reading beim Staubsaugerdevice was sich nur ändert wenn der Staubsauger saugt. Das fragst Du mit ReadingsAge ab. Wenn das Alter des Readings mehr wie 24 Stunden ist darf er saugen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net