Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg

Begonnen von Damian, 12 Januar 2019, 23:18:58

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: Neuhier am 15 Januar 2019, 13:31:52
Wenn ich das richtig lese, geht das nur in DOIF´s.
Kann ich das irgendwie umbiegen, daß es auch z.B. eingelesene Werte für ein Plot "stablisiert"?

Du kanns z. B. verschiedene Reading in einem DOIF glätten lassen und dort als eigene Readings ablegen, die du dann plotten kannst.

define smoothValues DOIF\
{set_Reading("reading1",[mydev1:readingbla1:s3],1)}\
{set_Reading("reading2",[mydev2:readingbla2:s3],1)}
...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Neuhier

War ich doch richtig, zur Nutzung muß ein DOIF erstellt werden.

Damian

#17
Zitat von: Neuhier am 15 Januar 2019, 15:36:36
War ich doch richtig, zur Nutzung muß ein DOIF erstellt werden.

ja, es ist Programmcode, der im DOIF-Modul drinsteckt. So etwas könnte jemand allgemein als set_Extensions für alle Devices programmieren, denn die Glättung als weiteres Reading wäre am besten dort aufgehoben, wo die Daten entstehen, nämlich beim Sensor.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mumpitzstuff

Gibts dafür nicht den event-aggregator?

Was wird zur Glättung verwendet? Average oder Median? Letzteres wäre unter Umständen robuster.

Neuhier

Habe es mal versucht:
define Flo1Value DOIF {set_Reading("Lux1",[Flower1:Lux:s3],1)}

Bekomme aber ( trotz Update vor 10min ) nur:
DOIF: unknown expression format: s3

Damian

Zitat von: Neuhier am 15 Januar 2019, 18:02:48
Habe es mal versucht:
define Flo1Value DOIF {set_Reading("Lux1",[Flower1:Lux:s3],1)}

Bekomme aber ( trotz Update vor 10min ) nur:
DOIF: unknown expression format: s3

Dann hast du nicht die neue DOIF-Version aus dem ersten Post bei dir aktiv ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Neuhier

´Ähm
Sogar hinterher nochmal Update ( s.o. ) gemacht und FHEM neu gestartet.

Damian

Version DOIF muss v0.1 liefern. Vermutlich überschreibt dein Update die Test-Version aus dem ersten Post durch die eingecheckte - das kann ich bereits an der Größe von DOIF sehen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat von: mumpitzstuff am 15 Januar 2019, 17:56:04
Gibts dafür nicht den event-aggregator?

Was wird zur Glättung verwendet? Average oder Median? Letzteres wäre unter Umständen robuster.

ja event-aggregator dafür gibt offensichtlich schon.  Entweder ist es für viele unbekannt oder die Syntax der Definition zu umständlich. Ich habe die Existenz offenbar schon verdrängt.

Es war einfach ein schneller Hack im DOIF-Modul von mir. Die Erweiterung lässt sich so recht einfach in bestehenden DOIF-Definitionen anpassen.

Falls es sich als praktikabel erweist, könnte man es ausbauen z. B.

[device:reading:avr<Anzahl der Werte>] für Durchschnitt

[device:reading:med<Anzahl der Werte>] Median

[device:reading:diff]  Differenz der letzten beiden Werte

...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Zitat von: Damian am 15 Januar 2019, 19:17:40[device:reading:diff]  Differenz der letzten beiden Werte
Würde mir gut gefallen!
Evtl. sogar :time (oder so) als Alter der letzten Meldung. Also wie :sec, nur das :sec in dem Fall wieder 0 wäre.

the ratman

oh ja, bitte erweitern!
die diff hätts mir ganz besonders angetan ...
→do↑p!dnʇs↓shit←

Ellert

Zitat von: Damian am 15 Januar 2019, 19:17:40
ja event-aggregator dafür gibt offensichtlich schon.  Entweder ist es für viele unbekannt oder die Syntax der Definition zu umständlich. Ich habe die Existenz offenbar schon verdrängt.

Es war einfach ein schneller Hack im DOIF-Modul von mir. Die Erweiterung lässt sich so recht einfach in bestehenden DOIF-Definitionen anpassen.

Falls es sich als praktikabel erweist, könnte man es ausbauen z. B.

[device:reading:avr<Anzahl der Werte>] für Durchschnitt

[device:reading:med<Anzahl der Werte>] Median

[device:reading:diff]  Differenz der letzten beiden Werte

...
Nützlich finde ich auch eine gleitende  lineare Regression, mit Zugriff auf die zugehörigen Parameter (Steigung, Mittelwerte, Aschsenabschnitte, Korellationskoeffizient und Standartabweichung) in der Ausgabeformatierung. Sowas gibt es nicht im Attribut event-aggregator, das muss sich jeder selbst bastelt. Es hätte den Vorteil, das die zeitliche Lage der Messwerte im Ergebnis berücksichtigt wird.

Damian

Ich muss allerdings einiges an der Programmierlogik noch ändern. Z. Zt. findet die Auswertung bzw. Speicherung des aktuellen Wertes in der Queue in der Perlroutine zu [...:s..]. Dadurch darf z. Zt. zu einem bestimmten Reading nur einmal die Angabe [...:s..] im DOIF gemacht werden, sonst wird der aktuelle Wert mehrfach in der Queue abgelegt. Mehrfache Angaben zum gleichen Reading müssen z. Zt. über DOIF_Reading gemacht werden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#28
Zitat von: Ellert am 16 Januar 2019, 16:12:38
Nützlich finde ich auch eine gleitende  lineare Regression, mit Zugriff auf die zugehörigen Parameter (Steigung, Mittelwerte, Aschsenabschnitte, Korellationskoeffizient und Standartabweichung) in der Ausgabeformatierung. Sowas gibt es nicht im Attribut event-aggregator, das muss sich jeder selbst bastelt. Es hätte den Vorteil, das die zeitliche Lage der Messwerte im Ergebnis berücksichtigt wird.

Kannst du ein konkretes Beispiel machen, wie du es dir vorstellst?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Christoph Morrison

Hallo Damian,

ohne diesen Thread vorher gelesen zu haben, hatte ich mir just heute DOIF um den Median erweitert, einen Patch findest hier.

Gruß
Christoph