Erst nach x-facher Wiederholung - Bedingung wahr?

Begonnen von FunkOdyssey, 08 Februar 2017, 17:02:33

Vorheriges Thema - Nächstes Thema

FunkOdyssey

Tag, ich bin hier 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



Ellert

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.

Per

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.

FunkOdyssey

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.  :)

Per


Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FunkOdyssey

Jetzt bin ich verwirrt.
Kann das sein, Damian, dass du evtl. die Grafik im (oben) verlinkten Thread nicht gesehen hast?
Die Meldung soll kommen, wenn die > 500W-Zyklen ein paarmal durchlaufen sind und dann ca. 100sec Ruhe einkehrt.

Damian

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 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

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF