FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: fr00sch am 07 August 2019, 09:33:48

Titel: Regensensor
Beitrag von: fr00sch am 07 August 2019, 09:33:48
Hallo,

ich habe einen Regensensor W174 via signalduino angebunden.

Das Reading "israining" wechselt immer zwischen no und yes (blaue Linie im Bild).
Ich habe über ein userReading das schon in 0 und 1 umgewandelt: "israining_Num"
Ich möchte jetzt über den event-aggregator oder ein anderes Hilfsmittel in diesem Device es erreichen, dass eine Art Glättung entsteht und kein so "Zahnmuster" entsteht.
Ich habe meinen Versuch unten dargestellt, es funktioniert nur mäßig gut. (dunkelbraune Linie im Bild)

Ich will damit den Beginn des Regenschauers an ein notify weiterleiten, das Ende ist nicht so wichtig.

Hat jemand Ideen, wie man da ein funktionierendes Konzept draus macht, ohne jetzt dafür z.B. einen watchdog zu erstellen, sondern mit "onboard"-Funktionen.

Grüße und Danke schonmal

Internals:
   CHANGED   
   CODE       CUL_TCM97001_178
   DEF        CUL_TCM97001_178
   FUUID      5d3c0e8d-f33f-daea-4121-4276fce8b97c9575
   LASTInputDev signalduino
   MSGCNT     4464
   NAME       W174_178
   NR         373
   STATE      R: 28
   TYPE       CUL_TCM97001
   lastH      0
   lastT      1565162782.83746
   signalduino_DMSG sB26C0E001000
   signalduino_MSGCNT 4465
   signalduino_Protocol_ID 0.3
   signalduino_RAWMSG MS;P1=480;P4=-4034;P5=-2001;P6=-9045;D=416141514141515141515141415141415151515151514141415151515151515151515151514;CP=1;SP=6;R=3;O;m2;
   signalduino_RSSI -72.5
   signalduino_TIME 2019-08-07 09:26:22
   Helper:
     DBLOG:
       israining:
         logdb:
           TIME       1565162634.97754
           VALUE      no
       israining_Num:
         logdb:
           TIME       1565162634.97754
           VALUE      0
       rain:
         logdb:
           TIME       1565162597.90374
           VALUE      28
       rain2:
         logdb:
           TIME       1565162560.88954
           VALUE      28
       rainDiff:
         logdb:
           TIME       1565162597.90374
           VALUE      0.25
   OLDREADINGS:
     2019-08-07 06:36:11   rain            27.75
   READINGS:
     2019-07-27 10:43:30   battery         ok
     2019-07-27 10:43:30   batteryState    ok
     2019-08-07 09:26:22   israining       no
     2019-08-07 09:26:22   israining_Num   0
     2019-08-07 09:26:22   rain            28
     2019-08-07 09:26:22   rain2           28
     2019-08-07 09:26:22   rainDiff        0.25
     2019-08-07 09:26:22   state           R: 28
Attributes:
   DbLogExclude battery,batteryState,state
   alias      Regensensor auf dem Dach
   event-aggregator israining_Num::none:median:300,rain2::linear:mean:300
   event-min-interval .*:300
   event-on-change-reading .*
   icon       weather_rain_gauge
   model      W174
   oldreadings rain
   room       80_Wetter
   userReadings rainDiff {ReadingsNum("W174_178","rain",0)-OldReadingsNum("W174_178","rain",0)},
israining_Num { if(ReadingsVal("W174_178","israining","") eq "yes") {return 1} elsif (ReadingsVal("W174_178","israining","") eq "no") {return 0} else {return -1}},
rain2 {ReadingsNum("W174_178","rain",0)}
Titel: Antw:Regensensor
Beitrag von: amenomade am 07 August 2019, 12:31:42
Ich würde ein DOIF darauf machen, mit einem wait Attribut, damit sich der Zustand erst nach x Sekunden ändert.
Titel: Antw:Regensensor
Beitrag von: fr00sch am 12 August 2019, 10:13:00
Hm... ja das habe ich mir als Option noch offen gelassen, ich dachte es gibt eventuell eine schöne Lösung über die events+userReadings.  :-[
Titel: Antw:Regensensor
Beitrag von: rabehd am 12 August 2019, 10:46:11
ZitatIch will damit den Beginn des Regenschauers an ein notify weiterleiten,
Gehe in den Eventmonitor (am Besten mit Filter auf Deinen Regensensor),
lass es regnen,
markiere die Zeile des Regenevents (on oder 1, wie Du willst, ich würde on nehmen),
Lass Dir daraus ein notify  oder DOIF anlegen,
Fülle das mit dem gewünschten Inhalt.

Wozu Glättung, wozu userreading?
Titel: Antw:Regensensor
Beitrag von: fr00sch am 12 August 2019, 11:35:42
Nicht zwingend notwendig, ich dachte nur, es sei eventuell möglich das direkt im Device zu machen ohne notify oder DOIF, so wie bei DOIF, kein dummy notwendig ist.  ;)
Dann werde ich es so bauen, danke.
Titel: Antw:Regensensor
Beitrag von: rabehd am 12 August 2019, 12:54:50
Ehrlich gesagt verstehe ich Deine Anforderung gar nicht. Weder im ersten noch im letzten Beitrag.

Was möchtest Du für eine Aktion bei, was für  einem Event auslösen?
Das ist doch die Frage. Dann kann man über "Glättung", notify... reden.

Problemstellung -> Lösungsidee -> Umsetzung

Zitates sei eventuell möglich das direkt im Device zu machen
Was versteckt sich hinter den "das"? Ansonsten müßte ich die Frage stellen: Einsteigerdoku gelesen?
Titel: Antw:Regensensor
Beitrag von: fr00sch am 13 August 2019, 22:59:59
Mein Anforderung ist unnötige Funktionen einzusparen, wenn es möglich ist.
Wie erwähnt habe ich früher mit dummys + DOIF gearbeitet, bis ich herausgefunden habe, dass sich das auch durch ein einzelnes DOIF regeln lässt. Oder noch ein offensichtliches Beispiel ist mit readings zu arbeiten statt mit jeder Menge Dummys.
Ich hatte bis vor ein paar Wochen die Funktion OldReading noch nicht entdeckt, weswegen ich mir die Funktion händisch nachgebaut hatte.

So lernt man dazu und ich hatte gedacht es gibt eventuell für mein oben beschriebenes Problem noch eine andere Lösung als mit DOIF oder notify.
Manchmal sieht man ja den Wald vor lauter Bäumen nicht, wenn man alleine vor der commandref und dem wiki sitzt. :D
Titel: Antw:Regensensor
Beitrag von: Damian am 13 August 2019, 23:48:30
Wenn du ohnehin schon mit DOIF arbeitest, so kannst du dort die Glättung einbauen, dazu gibt es verschiedene Funktionen: Durchschnitt, Median, Differenz, anteiliger Anstieg (siehe Commandref zu DOIF)

Bsp.:

define Raining DOIF ([$SELF:isRaining] > 0) (set bla es regnet)
attr Raining DOIF_Readings isRaining:[W174_178:israining_Num:avg3]


Das Reading isRaining im DOIF wird über die letzten drei Werte gemittelt.
Titel: Antw:Regensensor
Beitrag von: fr00sch am 14 August 2019, 07:48:27
 Ja natürlich klar .... danke schön! Hinter diesem Baum hat sich die Idee versteckt.  ;D

PS: der facepalm smiley wäre jetzt gut!