Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg

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

Vorheriges Thema - Nächstes Thema

sash.sc

Doif ist schon cool......

Und mächtig.....

Vereinfacht vieles......

Und polarisiert..... [emoji6]

Gesendet von meinem E6653 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Damian

Zitat von: sash.sc am 17 Januar 2019, 18:46:03
Doif ist schon cool......

Und mächtig.....

Vereinfacht vieles......

Und polarisiert..... [emoji6]

Gesendet von meinem E6653 mit Tapatalk

Die Diskussion wollen wir lieber nicht wieder anfangen ;)

Ich hoffe, ich komme dazu am Wochenende die neue Funktionalität sauber im DOIF abzubilden. Es soll Folgendes möglich sein:

-beliebig viele Angaben in einem DOIF zu einem Reading (bisher eine)
-beliebig viele Werte (bisher 9)

Folgende Funktionen:

Durchschnitt: [device:reading:avr<Anzahl>] (kein s mehr)
Median [device:reading:med<Anzahl>] sollte bevorzugt für typische Ausreißer genutzt werden


Den Rest überlegen wir uns noch genau.

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

Ellert

Zitat von: Damian am 17 Januar 2019, 17:14:54
Ich befürchte, dass der allgemeingültige Ansatz zwar sehr viele Möglichkeiten bietet, aber von 99 % der User als zu komplex gesehen wird. Ich schätze, dass bereits der event-aggregator die meisten in seinen Möglichkeiten überfordert. Zudem wäre die bisherige Semantik bzgl. des Rückgabewertes von [device:reading] verletzt - es wäre kein einfacher Wert (Skalar) mehr, den man in den üblichen Bedingungen auswerten kann.

Was brauchen die meisten?

Ich denke, sie wollen Ausreißer eliminieren und das mit einfacher Syntax wie z. B. [device:reading:med] (med wie Median)

Damit würde ich zunächst anfangen.
Wenn es einen Mechanismus gibt, der die Daten eines Readings sammelt, wäre es halt schön, wenn man auf die Daten zugreifen könnte. Die Aggregationsfunktion liefert z.B. eine Auflistung von Dateinamen zurück, das könnte auch eine Liste von Arrayreferenzen sein.
Aber ich gebe Dir recht, viele würden das wohl nicht nutzen.

Damian

#48
Zitat von: Ellert am 17 Januar 2019, 19:08:14
Wenn es einen Mechanismus gibt, der die Daten eines Readings sammelt, wäre es halt schön, wenn man auf die Daten zugreifen könnte. Die Aggregationsfunktion liefert z.B. eine Auflistung von Dateinamen zurück, das könnte auch eine Liste von Arrayreferenzen sein.
Aber ich gebe Dir recht, viele würden das wohl nicht nutzen.

Dafür kann man sich recht einfach eine Routine (hier sammeln) programmieren, die man so aufrufen kann:

DOIF {sammeln ($_myarray,[device:reading])}

Auf die gesammelten Werte kannst du dann über die globale Variable hier $_myarray überall innerhalb des DOIF zwecks Auswertung zugreifen.

Edit: Natürlich kann man als X-Wert auch den Zeitstempel des Readings mit übergeben

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

Brockmann

Zitat von: Damian am 17 Januar 2019, 18:54:13
Durchschnitt: [device:reading:avr<Anzahl>] (kein s mehr)
Spricht was dagegen, die übliche Abkürzung avg für den Durchschnitt zu verwenden?

Damian

Zitat von: Brockmann am 26 Januar 2019, 14:00:36
Spricht was dagegen, die übliche Abkürzung avg für den Durchschnitt zu verwenden?
nein, bin bisher eh noch nicht dazu gekommen das neue Feature sauber einzubauen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Neue Version mit Kurzbeschreibung im ersten Post.

Es war aufwändiger als ich dachte. Ich konnte es aber so umsetzen, wie ich es wollte - man kann jetzt in einem DOIF beliebig viele Angaben zum gleichen Reading machen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Neuhier

Ich blicke da nicht durch.
Eintrag ist: attr HumAK DOIF_Readings humidity:[AK:humidity:avg5]

AK ist ein Sensor, der die Feuchtigkeit liefert.

Es kommt: error in DOIF_Readings avg5, unknown expression format


Damian

Zitat von: Neuhier am 27 Januar 2019, 19:13:24
Ich blicke da nicht durch.
Eintrag ist: attr HumAK DOIF_Readings humidity:[AK:humidity:avg5]

AK ist ein Sensor, der die Feuchtigkeit liefert.

Es kommt: error in DOIF_Readings avg5, unknown expression format

Hatten wir das Problem nicht schon mal?

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

Neuhier

Ja, glaube auch.
Bin aber da nicht weitergekommen, selbst mit Update von FHEM nicht....
Habe so angefangen:
define HumAK DOIF ##
dann oben die geopsteten attr, mehr nicht.
Entspricht IMHO dem Beispiel im ersten Beitrag.

Ausgelesen wird AK.humidity korrekt, wird im Plot angezeigt.
Stelle ich mich nur doof an?

Damian

Zitat von: Neuhier am 27 Januar 2019, 19:28:14
Ja, glaube auch.
Bin aber da nicht weitergekommen, selbst mit Update von FHEM nicht....
Habe so angefangen:
define HumAK DOIF ##
dann oben die geopsteten attr, mehr nicht.
Entspricht IMHO dem Beispiel im ersten Beitrag.

Ausgelesen wird AK.humidity korrekt, wird im Plot angezeigt.
Stelle ich mich nur doof an?

Du braucht die aktuelle Version aus dem ersten Post z. Zt. v0.4
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Neuhier

File            Rev   Last Change

# $Id: 98_DOIF.pm v0.4 Damian $
98_DOIFtools.pm 18333 2019-01-19 09:13:38Z Ellert

doif.js                    15546 2017-12-03 09:57:42Z Ellert
fhemweb.js                 18399 2019-01-24 13:18:20Z rudolfkoenig
fhemweb_readingsGroup.js   15189 2017-10-03 17:53:27Z justme1968

Damian

Zitat von: Neuhier am 27 Januar 2019, 20:16:04
File            Rev   Last Change

# $Id: 98_DOIF.pm v0.4 Damian $
98_DOIFtools.pm 18333 2019-01-19 09:13:38Z Ellert

doif.js                    15546 2017-12-03 09:57:42Z Ellert
fhemweb.js                 18399 2019-01-24 13:18:20Z rudolfkoenig
fhemweb_readingsGroup.js   15189 2017-10-03 17:53:27Z justme1968

System durchgestartet?

Bei mir funktioniert alles, wie beschrieben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Weil es so viel Spaß macht, habe ich noch den prozentualen Anstieg eingebaut :)

Bsp.:

DOIF ([Bad:humidity:inc]>0.1)(set echo Fenster öffnen)

Wenn die Feuchtigkeit um über 10 % zwischen zwei gemessenen Werten ansteigt, dann Ansage.

Wenn mehr Werte dazwischen liegen sollen, dann kann man ebenfalls wie bei diff eine Zahl dranhängen.

Version v0.5 im ersten Post.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Neuhier

Der Fehler, bei mir ,ist der Doppelpunkt hinter dem Device.
Setze ich dort nur einen Punkt, kommt keine Fehlermeldung mehr.