gleitender Mittelwert

Begonnen von Joachim, 08 Januar 2016, 00:03:37

Vorheriges Thema - Nächstes Thema

Joachim

Moin @ all,

Ich wollte mal fragen, ob Interesse an gleitenden Mittelwerten besteht.
Dabei meine ich
- den gleitenden Arithmetischen Mittelwert
- den gleitenden Median
da ich für mich beide benötige, habe ich zum testen cloneDummy erweitert.
Ich bin allerdings der Meinung, das die Berechnung dort nicht hingehört.
Sinnvoller wäre es, das in die fhem.pl zu integrieren, z.B. beim event-aggregator, der es als rudimentären Ansatz ja schon hat.
Hier mal ein Bild indem der Mittelwert über 9 Werte gebildet wird.
(http://forum.fhem.de/index.php?action=dlattach;topic=46978.0;attach=43784;image)
Eventuell gibt es ja noch weitere Anregungen von Euch.
Als Anhang der cloneDummy um mit eigenen Werten zu experimentieren. (bitte nicht in Produktivumgebungen testen!)

gruß Joachim

FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

rudolfkoenig

Ich bin der Meinung, dass sowas in einem separaten Modul gehoert, wie statistics oder average.

Joachim

@rudolf,
Danke ersteinmal für Deine Antwort.

Von der Reihenfolge her würde die Berechnung meiner Meinung nach
a) in die Module gehören, dagegen spricht aber die unnötige Codevervielfachung.
b1) in die fhem.pl, wo prinzipiell mit dem event-aggregator die Grundlagen mit mean geschaffen sind.
b2) in die fhem.pl,wo mit userreadings und dem modifer ebenfalls die Grundlagen vorhanden sind.
c) in einem seperaten Modul, egal ob "cloneDummy","statistics","average", hier kollidiert man allerdings mit event-on-change aus der fhem.pl

ich habe alle 3 Varianten bei mir ausprobiert, und mein Favorit wäre die fhem.pl.
mal sehen was die anderen Entwickler dazu sagen.
Wenn ich mit meiner Idee alleine bleibe, und der Bedarf nicht vorhanden ist, dann wird es der cloneDummy, da bei mir sowiso fast alle Readings über ihn laufen.
Egal, welcher Weg genommen wird, ich bin bereit, einen Patch dafür zu schreiben.

gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

rudolfkoenig

Ich versuche fhem.pl minimal zu halten, damit es kein Engpass in der Entwicklung ist, lieber baue ich fuer Erweiterungen Schnittstellen, siehe Authentifizierung/Authorisierung. Ein gleitender Mittelwert ist mAn prinzipiell gleich wie ein Durchschnitt, man kann ihn also gut in externe Module verfrachten.

Joachim

ZitatIch versuche fhem.pl minimal zu halten
Das verstehe ich sehr gut.
Ich brauche dann allerdings mal einen Schubser in die richtige Richtung.
für den gleitenden Mittelwert, egal ob Median oder Arithmetischer Mittelwert benötigt man jedes Reading und jeden Trigger vom Device, egal ob event-on-change gesetzt ist oder nicht.
Wo bekomme ich den Trigger her, wenn event-on-change gesetzt ist, und der Wert sich nicht verändert hat?

Beispiel:

2016-01-01_00:00:26 Hz_00_FW_VL temperature: 24.9375
2016-01-01_00:00:33 Hz_00_FW_VL temperature: 24.875
2016-01-01_00:00:40 Hz_00_FW_VL temperature: 24.875 -----> wird durch event-on-change gefiltert
2016-01-01_00:00:47 Hz_00_FW_VL temperature: 24.875 -----> wird durch event-on-change gefiltert
2016-01-01_00:00:54 Hz_00_FW_VL temperature: 24.875 -----> wird durch event-on-change gefiltert
2016-01-01_00:01:01 Hz_00_FW_VL temperature: 24.8125
2016-01-01_00:01:08 Hz_00_FW_VL temperature: 24.8125 -----> wird durch event-on-change gefiltert
2016-01-01_00:01:15 Hz_00_FW_VL temperature: 24.8125 -----> wird durch event-on-change gefiltert

FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

rudolfkoenig

#5
1. Gar nicht. Wer Mittelwert haben will, soll keine event-on-change setzen
2. Der Mittlewert wird mit einem Timer berechnet, das funktioniert auch beim Ausbleiben von Nachrichten.

Eigentlich(TM) braucht man ein event-on-change, was nur fuer manche Empfaenger gilt (wie FileLog/notify/etc), aber nicht fuer alle.


Nachtrag: Ich meine es ist nicht richtig Mittelwert mit einer Methode zu rechnen, was man spaeter nicht mehr nachvollziehen kann.
D.h. wenn jemand einen beliebigen Filter setzt, dann akzeptiert er implizit, dass man ein Mittelwert der gefilterten Werte bekommt.

herrmannj

Ich war da nie ein Freund von. Wegen <siehe hier>

mMn sollten nicht die events am sender beschnitten werden sondern der Empfänger sollte sich darum kümmern. Das dürften mMn in ersten Linie LOG und evtl notify sein.

Ich plädiere dafür den log device (db, file) das beizubringen (log nur einen Wert pro 5min, nur wenn sich was ändert etc). Vlt noch dem notify...

vg
joerg

Dr. Boris Neubert

Hallo Joachim,

Zitat von: Joachim am 08 Januar 2016, 00:03:37
Ich wollte mal fragen, ob Interesse an gleitenden Mittelwerten besteht.

das gehört ins Modul TimeSeries.pm. Ein anderer Benutzer hat das bereits für sich implementiert. Ich finde nur gerade die Kommunikation dazu nicht, weiß nicht mehr, ob das im Forum oder per PM war. Der Benutzer wollte das mir zum Einchecken zur Verfügung stellen, ist aber nicht passiert.

Bitte suche selbst mal nach entsprechenden Stichworten im Forum.

Viele Grüße
Boris

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Dr. Boris Neubert

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Joachim

@ rudi,
ich glaube, wir reden ananeinder vorbei, nur wie drücke ich aus, was ich will?
Mir geht es darum,das Flattern eines Sensors zu glätten. Mir bekannt sind dafür 2 Methoden, die man in der Grafik im ersten Post sehen, und vergleichen kann.
Beides sind Mittelwerte, allerdings nicht um den Wert zu verfälschen, sondern um die Meßwerte zu beruhigen, damit sie sinnvoll weiterverarbeitet werden können. Mehrere flatternde Meßwerte miteinander kombiniert ergeben unschöne Sprünge (z.B. bei der Feuchteberechnung oder beim D-Anteil eines PID-Reglers).

@ joerg,
ZitatIch war da nie ein Freund von. Wegen <siehe hier>
Dein Link ist nicht zu sehen, und auch hier, es geht nicht darum events des Devices zu beschneiden, sondern
a) Fehlmessungen zu filtern
b) Systematische Fehler an der Auflösungsgrenze des Sensors zu beseitigen

@ Boris,
Danke für das finden des Beitrages, den muß ich jetzt ersteinmal durchackern und verstehen.
Ich bin durchaus der Meinung, dass mein Wunsch im event-aggregator richtig aufgehoben ist.

gruß Joachim

FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Dr. Boris Neubert

Zitat von: Joachim am 08 Januar 2016, 18:47:38
Ich bin durchaus der Meinung, dass mein Wunsch im event-aggregator richtig aufgehoben ist.

Natürlich. Und event-aggregator verwendet TimeSeries, um das zu bewerkstelligen, was es tut. fhem.pl braucht nicht angefasst zu werden. Das entspricht Rudis Leitlinie.

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

jensb

Hallo,

das erinnert mich daran, dass ich die Doku nachpflegen sollte. Hier die Kurzfassung:

Zitat
readingFnAttribute - event-aggregator

function   description

integral    the arithmetic sum (if not time weighted) or integral area (if time weighted) of all values

Eine Patch für die Doku werde ich kurzfristig nachliefern.

Ich kann die Motivation für die verschiedenen Standpunkte gut nachvollziehen. Deshalb hatte ich mir zusätzlich noch ein Analysis-Modul auf Basis von TimeSeries geschrieben, mit dem man Integrale bzw. Differenzen von Readings über variable Zeiträume berechnen kann. Dieses Modul kann auch für das gleiche Reading unterschiedliche Berechnungen durchführen, was aber meist nur dann sinnvoll ist, wenn man für diese Readings keinen event-aggregator verwendet. Es ist noch etwas krude, funktioniert aber zuverlässig und bietet außerdem Persistenz für die Messwerte im zu berechnenden Zeitraum.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb