Mittelwert / Werte glättung von einem Gerät

Begonnen von Tueftler1983, 11 Juni 2018, 21:47:28

Vorheriges Thema - Nächstes Thema

Tueftler1983

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

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Tueftler1983

Habe jetzt ein Userreading angelegt auf das ich event-aggregator anwenden, wie bekomme ich dieses jetzt noch auf 1 nachkomma stelle?

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Tueftler1983

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


Tueftler1983

das Userreading sollte doch dann so aussehen oder??

PH_corr {sprintf("%.1f", ReadingsVal("$name", "PH", "0"))}

Tueftler1983

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

amenomade

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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Tueftler1983

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

Tueftler1983

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

JWRu

ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

mumpitzstuff

Leg doch den event aggregator direkt auf PH, dann brauchst du kein separates Userreading.

Tueftler1983

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

Prof. Dr. Peter Henning

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