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)}
Ich würde ein DOIF darauf machen, mit einem wait Attribut, damit sich der Zustand erst nach x Sekunden ändert.
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. :-[
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?
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.
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?
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
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.
Ja natürlich klar .... danke schön! Hinter diesem Baum hat sich die Idee versteckt. ;D
PS: der facepalm smiley wäre jetzt gut!