Hallo ich messe den PH Wert im Pool mit einem PH Meter dieses gibt mir den wert Analog 4-20 ma bzw 0-10V aus, diesen messe ich mit einer AVR Net IO und greife die Werte mit Fhem ab.
So mein Problem ist das der wert Start schwankt zwischen 0.2 und 0.4 PH+-
diesen wert der alle 30 Sek abgerufen wird würde ich gerne glätten, es soll also immer aus den letzten 5 oder 10 messungen der Mittelwert berechnet werden.
1. Für einen sauberen Plot
2. Für eine genauere Warnung beim über bzw unterschreiten
Wie mache ich das am besten??
Guck mal event-aggregator https://fhem.de/commandref_DE.html#readingFnAttributes
Habe jetzt ein Userreading angelegt auf das ich event-aggregator anwenden, wie bekomme ich dieses jetzt noch auf 1 nachkomma stelle?
Mit sprintf?
ja aber wie kombiniere ich das beides jetzt zusammen?
das ist das neu erstellte Userreading: PH_corr {ReadingsVal("$name", "PH", "0");;}
und das das event-aggregator PH_corr::none:median:300
das Userreading sollte doch dann so aussehen oder??
PH_corr {sprintf("%.1f", ReadingsVal("$name", "PH", "0"))}
Ahh okay so muss das aussehen: PH_corr {sprintf "%.1f", ReadingsVal("$name", "PH",0)}
jetzt muss ich nur gucken über einen längeren zeitraum ob das mit der Glättung so Okay ist oder ich einen anderen Weg gehen muss
Wenn Due aggreg(sprintf(reading)) machst, dann kann es auch zu mehrere Stellen nach Koma führen. Was Du brauchst ist eher sprintf(aggreg(reading))
Dafür entweder direkt die Aggregation auf PH setzen, und dann den userreading mit sprintf darauf (wenn die schwankende Werte von PH dich nicht interessieren), oder 2 userReadings. Aber sprintf muss die letzte Kalkulation sein.
okay mache es jetzt so mit 2 userReadings
PH_mittel {ReadingsVal("$name", "PH","0")}, PH_mittel_glatt {sprintf "%.1f", ReadingsVal("$name", "PH_mittel",0)}
und das das event-aggregator PH_mittel::none:median:300
jetzt mal abwarten
scheint noch nicht das richtige zu sein habe immernoch enorme schwankungen,
ich meine das quasi immer die die letzten x Werte zusammen gerechnet werden und dann durch x geteilt wird.
7,3 +7,34 + 7,5+ 7,2 +7,31 +7,3 + 7,25 = 51,2:7= 7,31428 = 7,3
so in etwa
ich benutze das:
https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen (https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen)
Leg doch den event aggregator direkt auf PH, dann brauchst du kein separates Userreading.
Den originalen Wert möchte ich als Kontrolle gerne halten deshalb das userreading.
Auch an dich JWRu das werde ich mir auch angucken... Klinkt auch vielversprechend.
Teste es jetzt so erstmal 24 bis 48 Stunden
Die Routine movingAverage habe ich vor 3 Jahren zu genau diesem Zweck gebaut. Das Ding ist so einfach, dass es seitdem unverändert läuft.
LG
pah