FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: FunkOdyssey am 08 Februar 2017, 17:02:33

Titel: Erst nach x-facher Wiederholung - Bedingung wahr?
Beitrag von: FunkOdyssey am 08 Februar 2017, 17:02:33
Tag, ich bin hier (https://forum.fhem.de/index.php?topic=66344) mal mit einer Spielerei angefangen, die mit folgenden Code grundsätzlich gut funktioniert. Aber ich möchte die Abfragen sicherer/zutreffender machen..

Darum folgende Frage:

Wie kann man das abfragen, dass eine Bedingung (hier cmd1) nur dann eintritt, wenn diese z.B. fünfmal hintereinander zutrifft?
Also nach fünf Zyklen über 500 Watt soll der Schritt in cmd1 gemacht werden. Bin ich mal wieder zu blind? :-)

Danke.


(
[zw_sw_kaffee:state] eq "on" and
[zw_sw_kaffee:power:d] > 500 and
[$SELF:cmd_nr,"2"] !~ /2/
)
(
{Log 3, "Debug"}
)
DOELSEIF
(
[$SELF:cmd_nr],"1" =~ "1" and
[zw_sw_kaffee:state] eq "on" and
[zw_sw_kaffee:power:d] <= 10
)
(
(msg push ...)
)
DOELSEIF
(
[zw_sw_kaffee:state] eq "off"
)


repeatsame 1:1:1
wait 0:100:0


Titel: Antw:Erst nach x-facher Wiederholung - Bedingung wahr?
Beitrag von: Ellert am 08 Februar 2017, 19:17:42
Du könntest in Zweig 1 ein Zähler-Reading hochzählen und in Zweig 2 auf den Zähler triggern, wenn er 5 ist und irgendwann zurücksetzen.
Titel: Antw:Erst nach x-facher Wiederholung - Bedingung wahr?
Beitrag von: Per am 09 Februar 2017, 11:45:17
Warum nicht do resetwait?


([zw_sw_kaffee:power:d] > 500)
()(msg push ...)

attr xxx wait 0:100
attr xxx do resetwait

Zahlen müssten evlt. angepasst werden.
Titel: Antw:Erst nach x-facher Wiederholung - Bedingung wahr?
Beitrag von: FunkOdyssey am 09 Februar 2017, 13:38:34
Hmm, ehrlich gesagt habe ich do resetwait nicht wirklich verstanden. Aber gerade noch einmal eingelesen.

Du meinst aber sicherlich den das wait wie folgt, oder?
attr xxx wait 0,100

Du lässt das DOIF also so lange durch cmd1_1 laufen bis 100 Sekunden weniger verbraucht wird als 500 Watt, oder?
Dann der Wechsel in cmd1_2. Verstehe ich das richtig?

Wenn ja, dann habe ich auch endlich das do resetwait verstanden bzw. erstmals auch einen Anwendungsfalls bei mir gefunden.  :)
Titel: Antw:Erst nach x-facher Wiederholung - Bedingung wahr?
Beitrag von: Per am 09 Februar 2017, 14:06:22
Zitat von: FunkOdyssey am 09 Februar 2017, 13:38:34Du meinst aber sicherlich den das wait wie folgt, oder?
attr xxx wait 0,100
Ähm  :-[ ja.
Titel: Antw:Erst nach x-facher Wiederholung - Bedingung wahr?
Beitrag von: Damian am 09 Februar 2017, 18:43:28
Naja, ich bin mir nicht sicher, dass das die Lösung für die Anforderung sein soll, denn solange power>500 ist, wird der Timer immer wieder neu gestartet, also kommt die Meldung nicht, die Meldung käme erst, wenn power unter 500 fällt, dann ist die Bedingung nicht wahr und der Timer schlägt zu - das war aber nicht gewünscht.

Ich würde es ganz banal so definieren

([zw_sw_kaffee:power:d] > 500) (msg push ...)

attr xxx wait 100


ohne do always und ohne do resetwait.

Hier kommt die Meldung nach 100 Sekunden, nach dem power über 500 gestiegen ist. Wenn power in dieser Zeit unter 500 fällt, kommt cmd_2 zum Tragen und es gibt keine Meldung.
Titel: Antw:Erst nach x-facher Wiederholung - Bedingung wahr?
Beitrag von: FunkOdyssey am 10 Februar 2017, 10:28:26
Jetzt bin ich verwirrt.
Kann das sein, Damian, dass du evtl. die Grafik im (oben) verlinkten Thread (https://forum.fhem.de/index.php/topic,66344.html) nicht gesehen hast?
Die Meldung soll kommen, wenn die > 500W-Zyklen ein paarmal durchlaufen sind und dann ca. 100sec Ruhe einkehrt.
Titel: Antw:Erst nach x-facher Wiederholung - Bedingung wahr?
Beitrag von: Damian am 10 Februar 2017, 11:29:19
Zitat von: FunkOdyssey am 10 Februar 2017, 10:28:26
Jetzt bin ich verwirrt.
Kann das sein, Damian, dass du evtl. die Grafik im (oben) verlinkten Thread (https://forum.fhem.de/index.php/topic,66344.html) nicht gesehen hast?
Die Meldung soll kommen, wenn die > 500W-Zyklen ein paarmal durchlaufen sind und dann ca. 100sec Ruhe einkehrt.
Die Grafik habe ich tatsächlich nicht gesehen. Da würde auch reichen:

([zw_sw_kaffee:power:d] > 500) (msg push ...)

attr xxx wait 100
attr xxx do resetwait