[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

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