[Gelöst] DOIF: Reading setzen bei Regen und zurücksetzen nach 10min ohne Regen

Begonnen von isy, 28 Juli 2021, 15:24:53

Vorheriges Thema - Nächstes Thema

isy

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
Ein Weg wird erst zu einem Weg, wenn man ihn geht

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

isy

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.
Ein Weg wird erst zu einem Weg, wenn man ihn geht

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Damian

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


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

isy

Aha, ich denke, verstehe die Logik, Damian.
Danke ebenso!

Teste ich morgen
Ein Weg wird erst zu einem Weg, wenn man ihn geht

Damian

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

isy

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
Ein Weg wird erst zu einem Weg, wenn man ihn geht

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

isy

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

Ein Weg wird erst zu einem Weg, wenn man ihn geht

isy

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

Ein Weg wird erst zu einem Weg, wenn man ihn geht

isy

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!
Ein Weg wird erst zu einem Weg, wenn man ihn geht

Damian

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

isy

Funktioniert jetzt auch mit dem DOIF
Ich habe allerdings keine Ahnung, warum/wann man beim cmdState mal ein "|" oder ein eben "," einsetzen muss.
Ein Weg wird erst zu einem Weg, wenn man ihn geht

denis.robel

VG

Denis

isy

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


Ein Weg wird erst zu einem Weg, wenn man ihn geht

Damian

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

denis.robel

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

Denis

isy

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.
Ein Weg wird erst zu einem Weg, wenn man ihn geht

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Damian

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

isy

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!
Ein Weg wird erst zu einem Weg, wenn man ihn geht

denis.robel

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

Denis

isy

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
Ein Weg wird erst zu einem Weg, wenn man ihn geht

denis.robel

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

Denis

isy

Ein Weg wird erst zu einem Weg, wenn man ihn geht

denis.robel


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
VG

Denis

Damian

Warum wird ein sleep vorangestellt, wenn man beim wait statt 0 auch 0.1 einstellen kann?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

isy

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


Ein Weg wird erst zu einem Weg, wenn man ihn geht

Damian

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

denis.robel

@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.
VG

Denis

Damian

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

denis.robel

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
VG

Denis

Damian

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

deeb

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

isy

Moin deeb, bei mir läuft
([SD_WS_54_R:"^rawRainCounter:.*$"])

Gruß Helmut
Ein Weg wird erst zu einem Weg, wenn man ihn geht

deeb

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?

Damian

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

isy

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
Ein Weg wird erst zu einem Weg, wenn man ihn geht

isy

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.
Ein Weg wird erst zu einem Weg, wenn man ihn geht

deeb

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 

isy

Ein Weg wird erst zu einem Weg, wenn man ihn geht