Moin zusammen,
ich versuche mich jetzt schon seit ein paar Tagen an der DOIF Lösung, es will aber nicht klappen. Zum Glück regnet es alle Nase lang, damit geht die Testerei recht gut (hi).
Das Reading "raining" wird per setreading sauber gesetzt, aber nach den gewünschten 10min ohne Regen wird es nicht zurückgesetzt.
Dazu bräuchte ich euren Tipp!
VG Helmut
Szenario:
Ich habe einen TFA-Drop, der Regen meldet, aber kein Reading "raining" hat. Das soll also durch ein DOIF erzeugt werden.
List vom Sensor, nur Readings und Attribute:
Internals:
2021-06-03 19:24:22 batteryChanged 1
2021-07-28 15:08:07 batteryState ok
2021-07-28 15:08:07 rain_total 218.44
2021-07-28 15:03:38 raining 1
2021-07-28 15:08:07 rawRainCounter 860
2021-07-28 15:08:07 sendCounter 4
2021-07-28 15:03:37 statRain_total Hour: 0.762 Day: 1.524 Month: 133.858 Year: 218.440 (since: 2021-06-04 )
2021-07-28 14:59:55 statRain_totalLast Hour: 0.508 Day: 5.842 Month: 84.582 Year: 17.526 (since: 2021-06-04 )
2021-07-28 15:03:37 statRain_totalMonth 133.858
2021-06-30 23:59:55 statRain_totalMonthLast 84.582
2021-07-28 15:08:07 state R: 218.44
2021-07-28 15:08:07 type TFA 30.3233.01
helper:
_98_statistics Statistik
Attributes:
alias Regensensor
event-on-change-reading batteryChanged,batteryState,rain_total,raining,rawRainCounter,state
group Regensensor
icon weather_rain
room Aussen,Wetter
stateFormat statRain_total
Hier das zugehörige DOIF. Die Def wurde über den Eventmonitor angelegt. Der Trigger ist der rawRainCounter, der vom TFA Drop jeweils um 1 hochgezählt wird. Die Idee ist, der Trigger wird gesetzt und DOIF führt cmd1 aus. Das funktioniert. Wenn der Trigger 10min (attr repeatcmd) nicht geändert wurde (der bleibt wirklich auf dem Wert 860), dann soll cmd2 ausgeführt werden.
Irgendwo muss also ein Denkfehler sein, den ich nicht finde.
Internals:
DEF ([SD_WS_54_R:"^rawRainCounter:.*$"]) (setreading SD_WS_54_R raining 1) DOELSE (setreading SD_WS_54_R raining 0)
FUUID 60f01bfc-f33f-27cb-8024-58b0a31505fef514
MODEL FHEM
NAME Regenerkennung
NOTIFYDEV global,SD_WS_54_R
NR 1069
NTFY_ORDER 50-Regenerkennung
STATE Es regnet
TYPE DOIF
VERSION 24755 2021-07-15 16:40:59
READINGS:
2021-07-28 15:03:37 Device SD_WS_54_R
2021-07-28 15:03:38 cmd 1
2021-07-28 15:03:38 cmd_event SD_WS_54_R
2021-07-28 15:03:38 cmd_nr 1
2021-07-28 15:03:37 e_SD_WS_54_R_events R: 218.44,rawRainCounter: 860,rain_total: 218.44
2021-07-15 13:33:56 mode enabled
2021-07-28 15:03:38 state Es regnet
2021-07-28 15:03:38 wait_timer 28.07.2021 15:13:38 cmd_1 SD_WS_54_R
Regex:
accu:
collect:
cond:
SD_WS_54_R:
0:
&STATE ^SD_WS_54_R$
attr:
cmdState:
0:
Es regnet
1:
Es regnet nicht
repeatcmd:
600
wait:
0:
1
waitdel:
condition:
0 ::EventDoIf('SD_WS_54_R',$hash,'^rawRainCounter:.*$',1)
do:
0:
0 setreading SD_WS_54_R raining 1
1:
0 setreading SD_WS_54_R raining 0
helper:
DEVFILTER ^global$|^SD_WS_54_R$
NOTIFYDEV global|SD_WS_54_R
event rawRainCounter: 860
globalinit 1
last_timer 0
sleepdevice SD_WS_54_R
sleepsubtimer 0
sleeptimer 0
timerdev SD_WS_54_R
timerevent rawRainCounter: 860
triggerDev SD_WS_54_R
DOIF_eventa:
cmd_nr: 1
cmd: 1
cmd_event: SD_WS_54_R
Es regnet
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: SD_WS_54_R
state: Es regnet
timerevents:
R: 218.44
rawRainCounter: 860
rain_total: 218.44
timereventsState:
state: R: 218.44
rawRainCounter: 860
rain_total: 218.44
triggerEvents:
R: 218.44
rawRainCounter: 860
rain_total: 218.44
triggerEventsState:
state: R: 218.44
rawRainCounter: 860
rain_total: 218.44
internals:
perlblock:
readings:
trigger:
all SD_WS_54_R
uiState:
uiTable:
Attributes:
cmdState Es regnet|Es regnet nicht
do resetwait
repeatcmd 600
room System
wait 1
Warum nicht "einfach" ein notify wie das hier (RAWDEF) ;) :
defmod nRegenerkennung notify SD_WS_54_R:rawRainCounter:.* setreading SD_WS_54_R raining 1 ;;defmod atRain at +00:10:00 setreading SD_WS_54_R raining 0
RegEx des notify kannst du ja noch anpassen, sollte aber ja bei jedem Event/Änderung des rawRainCounter das Reading raining setzen und wenn eben kein Event/Änderung mehr kommt durch das at zurückgesetzt werden... Ansonsten wird (doch neuer Event) das at eben wieder auf 10min "modifiziert"... Wenn man möchte kann man auch noch einbauen, dass nur gesetzt wird, wenn nicht schon gesetzt etc.
Gruß, Joachim
Hi Joachim,
Danke sehr!
Mit notify probiere ich aus, die RegExp hatte ich schon für eine Regen-Email eingerichtet.
VG Helmut
P.S: Die DOIF Lösung interessiert mich dennoch.
Zitat von: isy am 28 Juli 2021, 17:18:11
Hi Joachim,
Danke sehr!
VG Helmut
Hallo Helmut,
gerne, viel Erfolg!
Zitat von: isy am 28 Juli 2021, 17:18:11
P.S: Die DOIF Lösung interessiert mich dennoch.
Da musst du dann abwarten...
...ich nutze DOIF nicht...
Gruß, Joachim
z.B.
([SD_WS_54_R:"^rawRainCounter:.*$"]) (setreading SD_WS_54_R raining 1) (setreading SD_WS_54_R raining 0)
Attribute:
cmdState Es regnet|Es regnet nicht
do resetwait
wait 0,600
Aha, ich denke, verstehe die Logik, Damian.
Danke ebenso!
Teste ich morgen
Zitat von: isy am 28 Juli 2021, 23:12:26
Aha, ich denke, verstehe die Logik, Damian.
Danke ebenso!
Teste ich morgen
Der Vorteil dieser Lösung ist, dass "setreading SD_WS_54_R raining 1" nur beim Einsetzen des Regens ausgeführt wird und nicht wiederholt wird, wenn es regnet.
Also das DOIF funktioniert.
@Joachim: Wenn es noch mal passt, ich hätte eine Frage zum Syntax.
defmod nRegenerkennung notify SD_WS_54_R:rawRainCounter:.* setreading SD_WS_54_R raining 1 ;;defmod atRain at +00:10:00 setreading SD_WS_54_R raining 0
Das 1. setreading wird genau so , also alles ab der "1", in das Reading eingetragen, quasi als Text.
Was mache ich falsch?
Gross Helmut
Wo/wie hast du es denn eingegeben?
Es ist als RAWDEF gepostet worden und muss daher auch als solches eingegeben werden.
Wenn du es per DEF eingibst, dann einen Strichpunkt weglassen...
Bzw. sehe ich gerade, dass ich das notify mit on/off bei mir getestet hatte.
Ich probiere das noch mal mit 1/0 aus (nicht, dass das was ausmacht) EDIT: nö, geht auch mit 1/0...
Gruß, Joachim
Das wird es sein, denn das Notify war ja schon da.
Ich habe den Rest nach rawRainCounter:.* einfach kopiert.
Also dann nur ein Semikolon.
Vielen Dank, probiere ich aus.
Viele Grüße, Helmut
Zitat von: Damian am 28 Juli 2021, 23:19:00
Der Vorteil dieser Lösung ist, dass "setreading SD_WS_54_R raining 1" nur beim Einsetzen des Regens ausgeführt wird und nicht wiederholt wird, wenn es regnet.
Hallo Damian,
das Reading im TFA Drop "Es regnet" bzw. "Es regnet nicht" wird sauber gesetzt.
Nur der Status des DOIF bleibt auf state "Es regnet". Das ist nicht schlimm, nur etwas unsauber.
Ich habe jetzt die Definition mit meinen Kenntnissen geändert, geht leider auch nicht.
- set Regenerkennung cmd_2 hinzugefügt
- DOELSE Zweig eingeführt, damit es den cmd_2 Status gibt.
Alles Murks, Kenntnisse reichen nicht aus.
Siehe List. Kann man da noch was verbessern?
Internals:
DEF ([SD_WS_54_R:"^rawRainCounter:.*$"]) (setreading SD_WS_54_R raining 1) (setreading SD_WS_54_R raining 0, set Regenerkennung cmd_2) DOELSE (setreading SD_WS_54_R raining 0)
FUUID 60f01bfc-f33f-27cb-8024-58b0a31505fef514
MODEL FHEM
NAME Regenerkennung
NOTIFYDEV SD_WS_54_R,global
NR 1072
NTFY_ORDER 50-Regenerkennung
STATE Es regnet
TYPE DOIF
VERSION 24755 2021-07-15 16:40:59
READINGS:
2021-08-02 12:17:08 Device SD_WS_54_R
2021-08-02 12:27:08 cmd 1.2
2021-08-02 12:27:08 cmd_event set_cmd_1
2021-08-02 12:27:08 cmd_nr 1
2021-08-02 12:27:08 cmd_seqnr 2
2021-08-02 12:17:08 e_SD_WS_54_R_events raining: 1
2021-08-02 12:16:39 mode enabled
2021-08-02 12:27:08 state Es regnet
2021-08-02 12:27:08 wait_timer no timer
Regex:
accu:
collect:
cond:
SD_WS_54_R:
0:
&STATE ^SD_WS_54_R$
attr:
cmdState:
0:
Es regnet
1:
Es regnet nicht
wait:
0:
0
600
waitdel:
condition:
0 ::EventDoIf('SD_WS_54_R',$hash,'^rawRainCounter:.*$',1)
do:
0:
0 setreading SD_WS_54_R raining 1
1 setreading SD_WS_54_R raining 0, set Regenerkennung cmd_2
1:
0 setreading SD_WS_54_R raining 0
helper:
DEVFILTER ^global$|^SD_WS_54_R$
NOTIFYDEV global|SD_WS_54_R
event raining: 1
globalinit 1
last_timer 0
sleepdevice set_cmd_1
sleepsubtimer -1
sleeptimer -1
timerdev SD_WS_54_R
timerevent raining: 1
triggerDev SD_WS_54_R
DOIF_eventa:
cmd_nr: 1
cmd_seqnr: 2
cmd_event: set_cmd_1
Es regnet
DOIF_eventas:
cmd_nr: 1
cmd_seqnr: 2
cmd_event: set_cmd_1
state: Es regnet
timerevents:
raining: 1
raining: 0
timereventsState:
raining: 1
raining: 0
triggerEvents:
raining: 1
raining: 0
triggerEventsState:
raining: 1
raining: 0
internals:
readings:
trigger:
all SD_WS_54_R
uiState:
uiTable:
Attributes:
cmdState Es regnet|Es regnet nicht
do resetwait
room System
wait 0,600
Zitat von: isy am 02 August 2021, 11:04:12
Das wird es sein, denn das Notify war ja schon da.
Ich habe den Rest nach rawRainCounter:.* einfach kopiert.
Also dann nur ein Semikolon.
Vielen Dank, probiere ich aus.
Viele Grüße, Helmut
Funktion per notify lauft!
Zitat von: isy am 02 August 2021, 12:41:45
Hallo Damian,
das Reading im TFA Drop "Es regnet" bzw. "Es regnet nicht" wird sauber gesetzt.
Nur der Status des DOIF bleibt auf state "Es regnet". Das ist nicht schlimm, nur etwas unsauber.
Ich habe jetzt die Definition mit meinen Kenntnissen geändert, geht leider auch nicht.
- set Regenerkennung cmd_2 hinzugefügt
- DOELSE Zweig eingeführt, damit es den cmd_2 Status gibt.
Alles Murks, Kenntnisse reichen nicht aus.
Siehe List. Kann man da noch was verbessern?
Mit Komma sollte mein ursprünglicher Vorschlag korrekt funktionieren:
cmdState Es regnet, Es regnet nicht
Funktioniert jetzt auch mit dem DOIF
Ich habe allerdings keine Ahnung, warum/wann man beim cmdState mal ein "|" oder ein eben "," einsetzen muss.
@ISY
könntest Du das DOIF bitte mal als raw definition posten?
Hallo Denis, here we are:
defmod RegenerkennungDOIF DOIF ([SD_WS_54_R:"^rawRainCounter:.*$"]) (sleep 0.1;;setreading SD_WS_54_R raining 1) (setreading SD_WS_54_R raining 0)
attr RegenerkennungDOIF alias Regenerkennung
attr RegenerkennungDOIF cmdState Es regnet,Es regnet nicht
attr RegenerkennungDOIF do resetwait
attr RegenerkennungDOIF group Regensensor
attr RegenerkennungDOIF icon weather_rain
attr RegenerkennungDOIF room Aussen,System,Wetter
attr RegenerkennungDOIF wait 0,300
Zitat von: isy am 23 September 2021, 09:10:29
Hallo Denis, here we are:
defmod RegenerkennungDOIF DOIF ([SD_WS_54_R:"^rawRainCounter:.*$"]) (sleep 0.1;;setreading SD_WS_54_R raining 1) (setreading SD_WS_54_R raining 0)
attr RegenerkennungDOIF alias Regenerkennung
attr RegenerkennungDOIF cmdState Es regnet,Es regnet nicht
attr RegenerkennungDOIF do resetwait
attr RegenerkennungDOIF group Regensensor
attr RegenerkennungDOIF icon weather_rain
attr RegenerkennungDOIF room Aussen,System,Wetter
attr RegenerkennungDOIF wait 0,300
Warum hast du das erste setreading verzögert?
Also bei mir bleibt alles im Status es regnet stehen ...
Edit: es wurde nur kurz auf Es regnet nicht geschaltet und dann gleich wieder auf Regen. Hier scheint aber gerade die Sonne.
Edit2: hab den timer mal runter gesetzt, jetzt gehts. Wahrscheinlich wurde der Timer durch Browser reload gestört.
Zitat von: Damian am 23 September 2021, 17:10:13
Warum hast du das erste setreading verzögert?
Gute Frage, habe ich vergessen. Ich denke, es lag daran, dass setreading SD_WS_54_R raining 1 nicht ausgelöst wurde.
Zitat von: isy am 24 September 2021, 12:40:45
Gute Frage, habe ich vergessen. Ich denke, es lag daran, dass setreading SD_WS_54_R raining 1 nicht ausgelöst wurde.
Vermutlich weil IN einer Eventbearbeitung eines Devices ein setreading DESSELBEN Devices nicht geht...
...also nur, wenn man es (wie hier) mit einem kurzen sleep (o.ä.) verzögert.
EDIT: allerdings könnte/sollte bei DOIF auch das wait gehen, also statt wait 0,300 eben wait 1,300 (wobei ich jetzt nicht weiß, welche Werte bei wait in DOIF gehen ;) Also ob auch kürzer [wie beim sleep] geht)
Denke das gilt auch für DOIF?
Gruß, Joachim
0.1 kann man auch in wait angeben.
Beim verzögerten Setzen eines Readings (setreading) wird das eigene Device wieder getriggert, ohne Verzögerung unterbindet DOIF einen selbstausgelösten Trigger, auf den man im Device reagiert.
Die Verzögerung von 0.1 ist hier wahrscheinlich kontraproduktiv.
Zitat von: MadMax-FHEM am 24 September 2021, 13:01:10
Vermutlich weil IN einer Eventbearbeitung eines Devices ein setreading DESSELBEN Devices nicht geht...
...also nur, wenn man es (wie hier) mit einem kurzen sleep (o.ä.) verzögert.
EDIT: allerdings könnte/sollte bei DOIF auch das wait gehen, also statt wait 0,300 eben wait 1,300 (wobei ich jetzt nicht weiß, welche Werte bei wait in DOIF gehen ;) Also ob auch kürzer [wie beim sleep] geht)
Denke das gilt auch für DOIF?
Gruß, Joachim
Genau, das war's!
Hallo,
Ich hab jetzt am reading raining des SD_WS_54_R zwei notifies dran gehängt, die mir eine Nachricht senden, wenn es regnet bzw. wenn es aufhört zu regnen.
Leider wechselt der Status immer periodisch wie im letzten
attr wait 0,180
(bzw. 0,300 ) gesetzt, unabhängig davon, ob es regnet oder nicht.
Wo kann ich schauen, was verkehrt läuft?
Habe die Lösung mit DOIF eingerichtet
defmod RegenerkennungDOIF DOIF ([SD_WS_54_R:"^rawRainCounter:.*$"]) (sleep 0.1;;setreading SD_WS_54_R raining 1) (setreading SD_WS_54_R raining 0)
attr RegenerkennungDOIF alias Regenerkennung
attr RegenerkennungDOIF cmdState Es regnet,Es regnet nicht
attr RegenerkennungDOIF do resetwait
attr RegenerkennungDOIF group Regensensor
attr RegenerkennungDOIF icon weather_rain
attr RegenerkennungDOIF room Aussen,System,Wetter
attr RegenerkennungDOIF wait 0,300
Ich bekomme jetzt immer einen Fehler:
sleep 0.1;;setreading SD_WS_54_R raining 1: Last parameter must be quiet
was kann das sein? Ich vermute die Semikolons nach dem sleep spielen eine Rolle...
Mach doch mal ein List von dem ganzen Befehl.
Internals:
DEF ([SD_WS_54_R:"^rawRainCounter:.*$"]) (sleep 0.1;setreading SD_WS_54_R raining 1) (setreading SD_WS_54_R raining 0)
FUUID 614c96c1-f33f-3305-ef9f-2320b4ded54209c2
MODEL FHEM
NAME RegenerkennungDOIF
NOTIFYDEV global,SD_WS_54_R
NR 615
NTFY_ORDER 50-RegenerkennungDOIF
STATE Es regnet
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
READINGS:
2022-01-19 11:55:28 Device SD_WS_54_R
2022-01-19 11:55:28 cmd 1.1
2022-01-19 11:55:28 cmd_event SD_WS_54_R
2022-01-19 11:55:28 cmd_nr 1
2022-01-19 11:55:28 cmd_seqnr 1
2022-01-19 11:55:28 e_SD_WS_54_R_events rawRainCounter: 672
2021-12-02 12:13:52 mode enabled
2022-01-19 11:55:28 state Es regnet
2022-01-19 11:55:28 wait_timer 19.01.2022 12:00:28 cmd_1_2 SD_WS_54_R
Regex:
accu:
collect:
cond:
SD_WS_54_R:
0:
&STATE ^SD_WS_54_R$
attr:
cmdState:
0:
Es regnet
Es regnet nicht
wait:
0:
0
300
waitdel:
condition:
0 ::EventDoIf('SD_WS_54_R',$hash,'^rawRainCounter:.*$',1)
do:
0:
0 sleep 0.1;setreading SD_WS_54_R raining 1
1 setreading SD_WS_54_R raining 0
1:
helper:
DEVFILTER ^global$|^SD_WS_54_R$
NOTIFYDEV global|SD_WS_54_R
event rawRainCounter: 672
globalinit 1
last_timer 0
sleepdevice SD_WS_54_R
sleepsubtimer 1
sleeptimer 0
timerdev SD_WS_54_R
timerevent rawRainCounter: 672
triggerDev SD_WS_54_R
DOIF_eventa:
cmd_nr: 1
cmd_seqnr: 1
cmd_event: SD_WS_54_R
Es regnet
DOIF_eventas:
cmd_nr: 1
cmd_seqnr: 1
cmd_event: SD_WS_54_R
state: Es regnet
timerevents:
rawRainCounter: 672
timereventsState:
rawRainCounter: 672
triggerEvents:
rawRainCounter: 672
triggerEventsState:
rawRainCounter: 672
internals:
perlblock:
readings:
trigger:
all SD_WS_54_R
uiState:
uiTable:
Attributes:
alias Regenerkennung
checkReadingEvent 1
cmdState Es regnet,Es regnet nicht
do resetwait
group Regensensor
icon weather_rain
room Garten,Haus,Wettervorhersage
wait 0,300
Warum wird ein sleep vorangestellt, wenn man beim wait statt 0 auch 0.1 einstellen kann?
Thema sleep 0.1;; steht weiter oben im Thread.
In der Oberfläche bzw. bei einem "list" wird bei mir nur 1 ";" angezeigt. Im RAW stehen 2 ";"
Die Einarbeitung der RAW Definition kennst du?
RAW Definition:
defmod RegenerkennungDOIF DOIF ([SD_WS_54_R:"^rawRainCounter:.*$"]) (sleep 0.1;;setreading SD_WS_54_R raining 1) (setreading SD_WS_54_R raining 0)
attr RegenerkennungDOIF alias Regenerkennung
attr RegenerkennungDOIF cmdState Es regnet,Es regnet nicht
attr RegenerkennungDOIF do resetwait
attr RegenerkennungDOIF group Regensensor
attr RegenerkennungDOIF icon weather_rain
attr RegenerkennungDOIF room Aussen,System,Wetter
attr RegenerkennungDOIF wait 0,300
Jetzt mal zum dritten Mal, das sleep ist hier komplett überflüssig:
defmod RegenerkennungDOIF DOIF ([SD_WS_54_R:"^rawRainCounter:.*$"]) (setreading SD_WS_54_R raining 1) (setreading SD_WS_54_R raining 0)
...
attr RegenerkennungDOIF wait 0.1,300
@Damian: Das hab ich schon mitbekommen und hatte das auch so gesetzt.
Es muss aber noch etwas anderes quer liegen. Bei mir pendelt das DOIF immer aller 30 Sekunden zwischen den beiden States.
Ich kann mir leider keinen Reim darauf machen.
Zitat von: denis.robel am 19 Januar 2022, 20:19:35
@Damian: Das hab ich schon mitbekommen und hatte das auch so gesetzt.
Es muss aber noch etwas anderes quer liegen. Bei mir pendelt das DOIF immer aller 30 Sekunden zwischen den beiden States.
Ich kann mir leider keinen Reim darauf machen.
Dann poste doch deine aktuelle Definition.
kein Problem:
Internals:
DEF ([SD_WS_54_R:"^rawRainCounter:.*$"]) (setreading SD_WS_54_R raining 1) (setreading SD_WS_54_R raining 0)
FUUID 614c96c1-f33f-3305-ef9f-2320b4ded54209c2
MODEL FHEM
NAME RegenerkennungDOIF
NOTIFYDEV SD_WS_54_R,global
NR 615
NTFY_ORDER 50-RegenerkennungDOIF
STATE Es regnet
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
READINGS:
2022-01-20 17:01:30 Device SD_WS_54_R
2022-01-20 17:01:30 cmd 1.1
2022-01-20 17:01:30 cmd_event SD_WS_54_R
2022-01-20 17:01:30 cmd_nr 1
2022-01-20 17:01:30 cmd_seqnr 1
2022-01-20 17:01:30 e_SD_WS_54_R_events rawRainCounter: 677
2022-01-19 20:13:13 mode enabled
2022-01-20 17:01:30 state Es regnet
2022-01-20 17:01:30 wait_timer 20.01.2022 17:06:30 cmd_1_2 SD_WS_54_R
Regex:
accu:
collect:
cond:
SD_WS_54_R:
0:
&STATE ^SD_WS_54_R$
attr:
cmdState:
0:
Es regnet
Es regnet nicht
wait:
0:
0.1
300
waitdel:
condition:
0 ::EventDoIf('SD_WS_54_R',$hash,'^rawRainCounter:.*$',1)
do:
0:
0 setreading SD_WS_54_R raining 1
1 setreading SD_WS_54_R raining 0
1:
helper:
DEVFILTER ^global$|^SD_WS_54_R$
NOTIFYDEV global|SD_WS_54_R
event rawRainCounter: 677
globalinit 1
last_timer 0
sleepdevice SD_WS_54_R
sleepsubtimer 1
sleeptimer 0
timerdev SD_WS_54_R
timerevent rawRainCounter: 677
triggerDev SD_WS_54_R
DOIF_eventa:
cmd_nr: 1
cmd_seqnr: 1
cmd_event: SD_WS_54_R
Es regnet
DOIF_eventas:
cmd_nr: 1
cmd_seqnr: 1
cmd_event: SD_WS_54_R
state: Es regnet
timerevents:
rawRainCounter: 677
timereventsState:
rawRainCounter: 677
triggerEvents:
rawRainCounter: 677
triggerEventsState:
rawRainCounter: 677
internals:
readings:
trigger:
all SD_WS_54_R
uiState:
uiTable:
Attributes:
alias Regenerkennung
checkReadingEvent 1
cmdState Es regnet,Es regnet nicht
do resetwait
group Regensensor
icon weather_rain
room Garten,Haus,Wettervorhersage
wait 0.1,300
Bei:
[SD_WS_54_R:"^rawRainCounter:.*$"])
Wird der cmd2 ausgeführt, sobald irgendetwas anderes von SD_WS_54_R kommt, das wird der Grund sein.
Bei:
["^SD_WS_54_R$:^rawRainCounter:.*$"])
mit do always sollte es dagegen funktionieren, hier kann kein cmd2-Fall vorkommen.
Hallo isy, hallo Denis,
ich habe auch einen Regensensor TFA 30.3233.01 eingesetzt. Mich würde mal interessieren, welche Variante jetzt bei euch läuft (hoffentlich fehlerfrei) ?
Die letzte Variante von Denis: ([SD_WS_54_R:"^rawRainCounter:.*$"]) oder die letzte Variante von Damian: ["^SD_WS_54_R$:^rawRainCounter:.*$"])
VG DEEB
Moin deeb, bei mir läuft
([SD_WS_54_R:"^rawRainCounter:.*$"])
Gruß Helmut
Hallo isy,
bei mir laufen beide Varianten nicht. Das DOIF steht ständig auf "Es regnet" auch bei völliger Trockenheit.
Nach einem Neustart des RASPI steht als State erst "???" und nach einigen Minuten dann wieder "Es regnet".
Bei meinen Sensor steht im Reading raining auch immer eine 1 .
Bei der Variante von Damian habe ich das Attribut "do resetwait" auch mal mit "do always" ersetzt, aber auch ohne Erfolg.
Habe ich vielleicht einen Syntaxfehler in meiner Definition?
Zitat von: deeb am 16 April 2022, 04:18:53
Hallo isy,
bei mir laufen beide Varianten nicht. Das DOIF steht ständig auf "Es regnet" auch bei völliger Trockenheit.
Nach einem Neustart des RASPI steht als State erst "???" und nach einigen Minuten dann wieder "Es regnet".
Bei meinen Sensor steht im Reading raining auch immer eine 1 .
Bei der Variante von Damian habe ich das Attribut "do resetwait" auch mal mit "do always" ersetzt, aber auch ohne Erfolg.
Habe ich vielleicht einen Syntaxfehler in meiner Definition?
Dann musst du dir schon noch die Events dazu im Eventmonitor anschauen. Offenbar wird deine Definition immer wieder neu getriggert, weil neue Events kommen.
Moin deeb,
die RegEx meines TFA Drop wurde automatisch durch den Event-Monitor erzeugt. Daher ist der Hinweis von Damian sehr wichtig.
Ich muss allerdings feststellen, dass ich mit meiner 5in1 Bresser Wetterstation damit nicht zurechtgekommen bin. Ich habe daher den Event für diesen Fall geändert:
([au_Bresser:"rain"])
. Ursachen dafür habe ich nicht gesucht.
Das Reading "rain" der Bresser Station entspricht (aus Anwendersicht) dem "RawRainCounter" des TFA Drop Sensors. Bei jedem Kippen des Wassersammlers in den jeweiligen Geräten wird das Reading erhöht und ein Event ausgelöst.
Hier die Raw Def des TFA Drop
defmod SD_WS_54_R SD_WS SD_WS_54_R
attr SD_WS_54_R alias Regensensor
attr SD_WS_54_R event-on-change-reading raining,batteryChanged,batteryState,rain_total,rawRainCounter,state
attr SD_WS_54_R group Klimasensoren
attr SD_WS_54_R icon weather_rain
attr SD_WS_54_R room Aussen,Wetter
attr SD_WS_54_R stateFormat statRain_total
Der Sensor ist mit dem "statistics" Modul verbunden. Deswegen das geänderte stateFormat.
VH Helmut
By-The-Way:
defmod Regenerkennung notify SD_WS_54_R:rawRainCounter:.* sleep 0.1;;setreading SD_WS_54_R raining 1 ;;defmod atRain at +00:10:00 setreading SD_WS_54_R raining 0
Mit "notify" klappt die Regenerkennung auch!
Das sleep ist drin, damit das setreading nicht gleichzeitig zum Event zu schreiben versucht.
Hallo Helmut, hallo isy,
danke für euere Hinweise. Ich habe jetzt mein Problem gelöst. Ursache war ein gesetztes Attribut "event-min-interval .*:300" welches für den Regensensor automat. generiert wurde (vermutlich für den PLOT).
Jetzt laufen beide Varianten.
VG DEEB
:) :) :)