FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: d0m2011 am 12 März 2017, 19:07:14

Titel: Watchdog soll nur in bestimmten Zeitraum auslösen
Beitrag von: d0m2011 am 12 März 2017, 19:07:14
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
Titel: Antw:Watchdog soll nur in bestimmten Zeitraum auslösen
Beitrag von: betateilchen am 12 März 2017, 19:13:29
watchdog kennt das Attribut disabledForIntervals, das ist genau dafür gemacht.
Titel: Antw:Watchdog soll nur in bestimmten Zeitraum auslösen
Beitrag von: d0m2011 am 12 März 2017, 19:40:41
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?
Titel: Antw:Watchdog soll nur in bestimmten Zeitraum auslösen
Beitrag von: betateilchen am 12 März 2017, 19:46:10
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 )
Titel: Antw:Watchdog soll nur in bestimmten Zeitraum auslösen
Beitrag von: d0m2011 am 12 März 2017, 19:55:04
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"?
Titel: Antw:Watchdog soll nur in bestimmten Zeitraum auslösen
Beitrag von: kumue am 12 März 2017, 19:58:34
wie das Attribut funktioniert, ist hier beschrieben..
http://fhem.de/commandref_DE.html#disabledForIntervals (http://fhem.de/commandref_DE.html#disabledForIntervals)
Titel: Antw:Watchdog soll nur in bestimmten Zeitraum auslösen
Beitrag von: d0m2011 am 12 März 2017, 20:17:13
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.
Titel: Antw:Watchdog soll nur in bestimmten Zeitraum auslösen
Beitrag von: betateilchen am 12 März 2017, 20:19:25
Das ist doch gleiche wie mein Vorschlag oben, nur mit einer Menge völlig sinnloser Klammern.

Und Dein Staubsauger arbeitet jetzt freitags statt montags.
Titel: Antw:Watchdog soll nur in bestimmten Zeitraum auslösen
Beitrag 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 ;)
Titel: Antw:Watchdog soll nur in bestimmten Zeitraum auslösen
Beitrag von: CoolTux am 12 März 2017, 22:28:09
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) };
Titel: Antw:Watchdog soll nur in bestimmten Zeitraum auslösen
Beitrag von: d0m2011 am 12 März 2017, 22:31:39
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.
Titel: Antw:Watchdog soll nur in bestimmten Zeitraum auslösen
Beitrag von: CoolTux am 12 März 2017, 22:38:17
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.