(gelöst) DOIF - doppelte Meldung - Anfängerfrage

Begonnen von Parador, 03 Januar 2019, 09:31:17

Vorheriges Thema - Nächstes Thema

Pfriemler

Zitat von: Otto123 am 03 Januar 2019, 13:12:55
Ich hoffe das war jetzt alles richtig. Bezüglich 2. bin ich mir bezüglich "Event von state" nicht ganz sicher.
Immerhin wären wir schon zu zweit  :)

Zitat von: KernSani am 03 Januar 2019, 13:52:02
Vielleicht noch als kleiner Hinweis: Es ist immer sinnvoll sich gegenseitig ausschließende Zweige zu bauen. In deinem DOIF können beispielsweise die ersten 3 Bedingungen alle wahr sein. Je nachdem in welchem state sich das DOIF befindet kann dann das Verhalten schwer nachvollziehbar sein, also:
1. DOIF ist in Cmd4, du bist abwesend und es ist nach 18:30
2. "open" wird gemeldet, DOIF triggert im ersten Zweig, ist also in Cmd1
3. "open" wird nochmal getriggert (bevor close o.ä. kam), Cmd1 wird nicht ausgelöst, da kein do always gesetzt ist, sondern Cmd2 wird ausgelöst
...
In deinem Beispiel ist das vielleicht nicht so wild, generell würde ich das aber bei der DOIF-Definition berücksichtigen.
Nö, das DOIF hier wechselt nicht den Zustand, nur weil ein Zweig schon erfüllt ist. Die erste Bedingung bleibt bei weiteren Triggern erfüllt und damit behält das DOIF seinen Zustand auch einfach - nur der Ausführungsteil wird nicht erneut ausgeführt, wenn es kein "do always"gibt.
Die Reihenfolge ist schon so ok, wenn die Bedingungen gut erfüllt sind. Erste Nebenbedingung ist hier "nicht anwesend" - dann immer Meldung 1, egal welche Uhrzeit. Ist einer anwesend, dann nur von 18:30 bis 7 Uhr Meldung 2. In allen anderen Fällen 3. Und in jedem Fall nur einmal, wenn es zwischendurch keine anderen Trigger gibt.

Ansonsten hat KernSani aber schon recht: Vor allem beim reinen Triggern auf das Event "open" wird es keine vernünftige Reaktion auf "closed" mehr geben. Statt das DOIF zu reinitialisieren könnte der vierte Zweig auch einfach auf "closed" getriggert werden, ohne einen Ausführungsteil. Auch damit ist das DOIF bereit für eine erneute Auslösung per "open".
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Pfriemler

#16
Zitat von: Otto123 am 03 Januar 2019, 13:59:37
Deine Anwesenheit sendet offenbar auch immer wieder den gleichen Event. Auch hier ist eventuell ein event-on-change-reading angesagt. Bewirkt in Deinem Fall sicher das Gleiche wie das ? davor.

Einspruch. Ohne Fragezeichen würde der erste (oder ein anderer) Zweig getriggert werden, wenn Sensor open ist (etwa schon länger oder durch wiederholte Auslösung) und sich der Status von Residence ändert. Ähnliche Effekte könnten beim Erreichen der Zeitgrenzen auftreten. Bei einem Bewegungssensor eher weniger relevant, weil der sicher öfter auf "no motion" rsp. "closed" wechselt, aber bei einem Fenstersensor wäre das bei dauerhaft offenem Fenster schon relevanter. Oder vielleicht gerade beabsichtigt, wenn es bei offenem Fenster zu Hause 18:30 Uhr wird.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."