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
watchdog kennt das Attribut disabledForIntervals, das ist genau dafür gemacht.
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?
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 )
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"?
wie das Attribut funktioniert, ist hier beschrieben..
http://fhem.de/commandref_DE.html#disabledForIntervals (http://fhem.de/commandref_DE.html#disabledForIntervals)
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.
Das ist doch gleiche wie mein Vorschlag oben, nur mit einer Menge völlig sinnloser Klammern.
Und Dein Staubsauger arbeitet jetzt freitags statt montags.
Ich hab die Klammer nun stehen lassen.
Ohne hat es nicht funktioniert, komisch, ich weiß.
Mein Staubsauber muss Montag, Mittwoch und Freitag ran ;)
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) };
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.
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.