Guten Abend zusammen.
Ich habe ein Regensensor gebaut.
list:
Internals:
CFGFN
DEF 39
FUUID 5eaa89bd-f33f-a126-9890-9f40a245d8e28f02
IODev JLLaCrosse
JLLaCrosse_MSGCNT 20603
JLLaCrosse_RAWMSG OK 9 57 1 2 213 106
JLLaCrosse_TIME 2020-05-06 20:34:39
LASTInputDev JLLaCrosse
LaCrosse_lastRcv 2020-05-06 20:34:39
MSGCNT 20603
NAME LaCrosse_39
NR 9844
STATE kein Regen
TYPE LaCrosse
addr 39
battery_new 0
bufferedH
bufferedT
corr1 0
corr2 0
previousH 106
previousT -27.4
sensorType 0=T(H)
Helper:
DBLOG:
is_raining_Indikator:
DBLogging:
TIME 1588790079.87532
VALUE -0
READINGS:
2020-05-06 20:34:39 battery ok
2020-05-06 20:34:39 is_raining_Indikator -0
2020-05-05 20:22:43 needRain 1
2020-05-06 20:34:39 state T: -27.5
2020-05-06 20:34:39 temperature -27.5
Attributes:
DbLogExclude .*
DbLogInclude is_raining_Indikator
IODev JLLaCrosse
alias Regensensor
room Garten
stateFormat { if(ReadingsVal("$name","is_raining_Indikator",0) > "0") {return "Regen";} else {return "kein Regen";} }
userReadings is_raining_Indikator { sprintf("%.0f",ReadingsVal($name,"temperature",0)+27.1);;;; }
Sobald es regnet, steigt der Wert auf > 0 an.
Ich wollte nun mit diesem DOIF überprüfen, ob es 3 Tage am Stück nicht regnet. Testweise habe ich erstmal 15 Sekunden eingetragen.
list
Internals:
CFGFN
DEF ([LaCrosse_39:is_raining_indikator] < 1) (setreading LaCrosse_39 needRain 1 ) DOELSE (setreading LaCrosse_39 needRain 0 )
FUUID 5eb1aa3c-f33f-a126-6f98-59d436a56732038b
MODEL FHEM
NAME needRainDoif
NOTIFYDEV LaCrosse_39,global
NR 28408
NTFY_ORDER 50-needRainDoif
STATE initialized
TYPE DOIF
VERSION 21224 2020-02-18 18:45:49
Helper:
DBLOG:
cmd:
DBLogging:
TIME 1588701756.70782
VALUE 0
mode:
DBLogging:
TIME 1588701756.70782
VALUE enabled
state:
DBLogging:
TIME 1588701756.70782
VALUE initialized
READINGS:
2020-05-06 20:32:37 cmd 0
2020-05-06 20:32:37 mode enabled
2020-05-06 20:32:37 state initialized
Regex:
accu:
cond:
LaCrosse_39:
0:
is_raining_indikator ^LaCrosse_39$:^is_raining_indikator:
attr:
cmdState:
waitdel:
0:
15
condition:
0 ::ReadingValDoIf($hash,'LaCrosse_39','is_raining_indikator') < 1
do:
0:
0 setreading LaCrosse_39 needRain 1
1:
0 setreading LaCrosse_39 needRain 0
helper:
DEVFILTER ^global$|^LaCrosse_39$
NOTIFYDEV global|LaCrosse_39
globalinit 1
last_timer 0
sleeptimer -1
readings:
all LaCrosse_39:is_raining_indikator
uiState:
uiTable:
Attributes:
DbLogExclude .*
comment 259200 entspricht 3 Tagen
waitdel 15
Meinem Verständnis nach, sollte das Reading needRain am Regensensor nach 15 Sekunden auf 0 gesetzt werden. Passiert aber leider nicht.
Kann mir jemand sagen, wo es klemmt?
Gruß Stephan
Du brauchst noch ein do always
Wie oft sendet dein Sensor ein Event mit is_raining_Indikator?
Danke für die Antwort. Das do always hat auch nichtsverändert. Dachte ich benötige das aufgrund des DOELSE Zweiges nicht.
2020-05-10 19:23:44 LaCrosse LaCrosse_39 is_raining_Indikator: 2
2020-05-10 19:23:49 LaCrosse LaCrosse_39 is_raining_Indikator: 2
2020-05-10 19:23:53 LaCrosse LaCrosse_39 is_raining_Indikator: 2
2020-05-10 19:23:58 LaCrosse LaCrosse_39 is_raining_Indikator: 2
2020-05-10 19:24:02 LaCrosse LaCrosse_39 is_raining_Indikator: 2
2020-05-10 19:24:06 LaCrosse LaCrosse_39 is_raining_Indikator: 2
2020-05-10 19:26:46 LaCrosse LaCrosse_39 is_raining_Indikator: 1
2020-05-10 19:26:55 LaCrosse LaCrosse_39 is_raining_Indikator: 1
2020-05-10 19:27:04 LaCrosse LaCrosse_39 is_raining_Indikator: 1
2020-05-10 19:27:09 LaCrosse LaCrosse_39 is_raining_Indikator: 1
Events gibt es eigentlich reichlich.
Ich vermute das es am userreading liegt. Warum auch immer. Ich werde es mal mit nem anderen Reading testen.
Grüße
Ich weiß nicht, ob du die Funktionsweise von waitdel richtig verstanden hast, zumindest habe ich deine Definition nicht verstanden.
waitdel unterbindet eine verzögerte Ausführung, wenn innerhalb der angegebenen Zeitspanne, das Ereignis wiederholt eintritt - das willst du aber eigentlich nicht.
Umgekehrt bedeutet es, es wird verzögert etwas ausgeführt, wenn sich ein Ereignis (innerhalb der Zeitspanne) nicht wiederholt.
Zitat von: Damian am 10 Mai 2020, 19:42:40
Ich weiß nicht, ob du die Funktionsweise von waitdel richtig verstanden hast, zumindest habe ich deine Definition nicht verstanden.
waitdel unterbindet eine verzögerte Ausführung, wenn innerhalb der angegebenen Zeitspanne, das Ereignis wiederholt eintritt - das willst du aber eigentlich nicht.
Umgekehrt bedeutet es, es wird verzögert etwas ausgeführt, wenn sich ein Ereignis (innerhalb der Zeitspanne) nicht wiederholt.
Wieso möchte ich das nicht?
([LaCrosse_39:is_raining_indikator] < 1) (setreading LaCrosse_39 needRain 1 ) DOELSE (setreading LaCrosse_39 needRain 0 )
Ich mache doch hier nichts anderes , als folgendes.
Wenn der Wert "is_raining_indikator" kleiner 1 ist, setzte needRain auf 1 ansonsten auf 0
Durch das waitdel muss "is_raining_indikator" meinem Verständnis nach mindestens 15 Sekunden unter 1 sein, damit das Reading "needRain" auf 1 gesetzt wird.
Sollte "is_raining_indikator" in den 15 Sekunden über 1 steigen, wird sobald "is_raining_indikator" wieder unter 1 fällt geprüft werden, ob er wieder mindestens für 15 Sekunden unter 1 ist.
Scheibar macht das Userreading zusätzlich probleme. Mit einem dummy nachgestellt, tut das DOIF zumindest schonmal etwas.
Grüße
Zitat von: Esjay am 11 Mai 2020, 10:34:49
Wieso möchte ich das nicht?
([LaCrosse_39:is_raining_indikator] < 1) (setreading LaCrosse_39 needRain 1 ) DOELSE (setreading LaCrosse_39 needRain 0 )
Ich mache doch hier nichts anderes , als folgendes.
Wenn der Wert "is_raining_indikator" kleiner 1 ist, setzte needRain auf 1 ansonsten auf 0
Durch das waitdel muss "is_raining_indikator" meinem Verständnis nach mindestens 15 Sekunden unter 1 sein, damit das Reading "needRain" auf 1 gesetzt wird.
Sollte "is_raining_indikator" in den 15 Sekunden über 1 steigen, wird sobald "is_raining_indikator" wieder unter 1 fällt geprüft werden, ob er wieder mindestens für 15 Sekunden unter 1 ist.
Scheibar macht das Userreading zusätzlich probleme. Mit einem dummy nachgestellt, tut das DOIF zumindest schonmal etwas.
Grüße
Das was du vorhast, ist die typische Funktion eines normalen wait-Attributes.
Ok, jetzt passt es.. Danke für die Hilfe.
Grüße