FHEM Forum

FHEM => Automatisierung => Thema gestartet von: mumpitzstuff am 06 Mai 2017, 22:52:30

Titel: Modulerweiterung: 98_average.pm
Beitrag von: mumpitzstuff am 06 Mai 2017, 22:52:30
Ich war mal so frei und habe das in FHEM vorhandene Modul 98_average.pm um einige Punkte erweitert:


Kann jemand das Modul ausprobieren und dazu ein Statement abgeben?

Können die Änderungen in das Modul offiziell übernommen werden, damit auch andere davon profitieren können (natürlich erst wenn bei anderen keine Probleme auftreten)?
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: mumpitzstuff am 11 Mai 2017, 22:31:41
Hat wirklich niemand Interesse an der Erweiterung? Vielleicht findet sich ja trotzdem jemand, der sie mal kurz testen kann und seine Mainung dazu kundtun könnte...

Wenn muss ich anschreiben, um die Änderungen ins offizielle Modul zu übernehmen? Bei mir läuft das Ding seit mehreren Tagen und ich konnte keine Probleme feststellen.
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: CoolTux am 11 Mai 2017, 22:44:16
Am besten den Modulauthor.
https://svn.fhem.de/trac/browser/trunk/fhem/MAINTAINER.txt
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: rudolfkoenig am 12 Mai 2017, 08:07:20
PM ist nicht notwendig, ich lese hier schon fleissig mit.

Ich wuerde aber gerne "Featuritis" vermeiden, und Code nur dann einbauen, falls es von mehr als einem Person benoetigt wird. Du hast ja selbst nach Feedback gefragt, bisher ohne Rueckmeldung.
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: Maui am 14 November 2018, 19:56:17
Ich nutze es jetzt länger und finde die Erweiterungen super. Allerdings fehlt mir noch ein Last_x. Also am ehesten ein .*Last_avg_day.
Ich würde gerne direkt im jeweiligen Device sehen können wie der Durchschnitt gestern war. Also zb. Bei einem Temp Sensor, wie die Durchschnittstemperatur war. Aktuell nehme ich für jedes device ein einzelnes at, wo ich kurz vor Tagesende ein Reading setze.
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: mumpitzstuff am 14 November 2018, 20:16:27
Dein Vorgehen ist so auch genau richtig. Die Berechnungen des Moduls werden aktuell lediglich durch Änderungen der Readings ausgelöst und nicht durch zeitliche Gegebenheiten.  Du könntest die Dinge auch in einem at für mehrere Geräte erledigen, dann wird es vielleicht übersichtlicher.  Aufnehmen würde ich es jedenfalls nicht, der Aufwand wäre nicht gerechtfertigt.
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: Maui am 14 November 2018, 21:43:45
Hast du dann vielleicht eine Idee, wie ich in einem at (oder ähnlichem) zb per regex alle auf einmal auslesen und mit setreading in den einzelnen devices jeweils setzen kann? Vielleicht gehts auch mit DOIF? Hmm
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: mumpitzstuff am 15 November 2018, 02:02:50
Hilft dir devspec2array weiter? Im Forum gibts dazu diverse Beispiel. Die Funktion liefert ein Array von gefilterten Devices zurück und mit z.B. foreach kannst du in diesen Devices dann den entsprechenden Wert in ein separates Reading kopieren.
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: Damian am 15 November 2018, 08:23:44
Zitat von: Maui am 14 November 2018, 21:43:45
Hast du dann vielleicht eine Idee, wie ich in einem at (oder ähnlichem) zb per regex alle auf einmal auslesen und mit setreading in den einzelnen devices jeweils setzen kann? Vielleicht gehts auch mit DOIF? Hmm

Im DOIF kann man die Aggregationsfunktion dazu nutzen: https://fhem.de/commandref_DE.html#DOIF_aggregation
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: Maui am 15 November 2018, 11:26:01
Hatte ich auch schon im Kopf, Damian. Passt auch besser, da ich DOIF mag und aktuell grad eh Stückweise ats,notifys,etc auf DOIF umstelle. Bin aber auch noch doof, was DOIF angeht.

Soweit bin ich schonmal. Ich weiß, dass der letzte Teil mit dem setreading falsch ist, aber ich glaub du verstehst, wo ich hin will. Ich will den Wert aus dem jeweiligen Reading ziehen und am Tagesende in ein neues Reading schreiben.
([23:59]) ( {foreach (AggrDoIf('@','^Switch_ts','BME280_Temperature_avg_day')) {fhem("setreading $_ AvgLastDay [$_:BME280_Temperature_avg_day]") }})

[/s]PS: Chapeau für DOIF, geile Arbeit   :)

EDIT:
So passt es. Geile Sache
([23:59]) ( {foreach (AggrDoIf('@','^Switch_ts','BME280_Temperature_avg_day')) {fhem("setreading $_ AvgLastDay ".(ReadingsVal($_,"BME280_Temperature_avg_day",0))) } })

EDIT2: Zur Vollständigkeit noch das DOIF für den Monat.
([23:59] and (strftime ("%d",localtime time+86400) == 01)) ( {foreach (AggrDoIf('@','^Switch_ts','BME280_Temperature_avg_month')) {fhem("setreading $_ AvgLastMonth ".(ReadingsVal($_,"BME280_Temperature_avg_month",0))) } })
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: Jamo am 02 Dezember 2018, 19:29:17
Hallo Mumpitzstuff,
super modul, genau das was ich gesucht hatte, funktioniert einwandfrei soweit.
Allerdings, wenn ich "Device specific help" help aufrufe, kommt folgende Fehlermeldung:

Module: 98_average.pm Maintainer: rudolfkoenig Forum: Automatisierung No help found for module: average

Wenn ich das alte/original Modul zurückkopiere und ein reload mache, bekomme ich die Hilfe angezeigt.
Ich habe mal ins Modul reingeschaut, ich kann aber nicht finden woran es liegt, sieht ähnlich aus wie beim originalen......

Danke u beste Grüsse!
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: Maui am 02 Dezember 2018, 21:21:25
Bei mir läuft die help. Neustart?
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: Jamo am 03 Dezember 2018, 14:27:37
Alles schon gemacht, Neustart, re-load, hin und herkopiert, Linux-rechte nachgeschaut, etc. Ich bekomme die Hilfe leider nicht in FHEM angezeigt (kann ich allerdings in vi / VIM / view unter linux lesen, ist nur nicht so toll).
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: mumpitzstuff am 03 Dezember 2018, 15:41:06
Ewig nicht mehr reingeschaut. Muss ich mir ansehen.

PS: Habe noch ein & Zeichen in der Hilfe gefunden, das noch nicht escaped war. Vielleicht war dass das Problem? Habe die Änderung eingecheckt. 
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: Jamo am 03 Dezember 2018, 16:22:00
Danke Danke! Aber ich dachte das Modul ist [noch] nicht teil des offiziellen SYN, wo hast Du das eingecheckt? Im ersten Post ist soweit ich sehe, immer noch das alte, oder?
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: mumpitzstuff am 04 Dezember 2018, 10:18:18
ohh stimmt.

Ich hoffe das ist inhaltlich die selbe Version, das habe ich gar nicht noch mal explizit geprüft...

https://github.com/mumpitzstuff/fhem-average (https://github.com/mumpitzstuff/fhem-average)
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: R1F800 am 23 Januar 2019, 20:48:53
Nabend.
Ich habe ein Problem mit dem AVERAGE.

Ich habe einen DS18B20 an einem ESP und der liefert mir fleißig Temperaturwerte über Tag, die ich gerne mitteln will und dann in dem LOG persistieren möchte.

Ich bekomme es aber einfach nicht gebacken auf die Temperaturevents zu reagieren, dass ich mittelwerte erhalte:

defmod AVGTempAussen average Gartenhaus_Aussentemp:Temperature.*


Habt ihr eine Idee?
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: rudolfkoenig am 23 Januar 2019, 21:42:33
ZitatHabt ihr eine Idee?
Noch nicht, dafuer braeuchte ich die Events.
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: R1F800 am 24 Januar 2019, 07:21:23
hoffe der Auszug zum ESP hilft weiter:
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: Romoker am 24 Januar 2019, 12:09:35
Dein Devicename stimmt nicht.
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: rudolfkoenig am 24 Januar 2019, 13:58:08
Ich habe average zu dem "Event Monitor => Create/modify device" hinzugefuegt.
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: R1F800 am 24 Januar 2019, 17:02:07
Zitat von: Romoker am 24 Januar 2019, 12:09:35
Dein Devicename stimmt nicht.
Ja und was wäre der korrekte?
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: R1F800 am 24 Januar 2019, 17:04:12
Zitat von: rudolfkoenig am 24 Januar 2019, 13:58:08
Ich habe average zu dem "Event Monitor => Create/modify device" hinzugefuegt.

Was meinst Du genau damit?
Dass Du den Quellcode des Moduls angepasst hast?
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: rudolfkoenig am 24 Januar 2019, 17:08:44
Nach dem update (morgen ab acht) kann man auch eine average Instanz aus dem Event-Monitor definieren.
Bisher ging das nur fuer notify, DOIF, FileLog, sequence und watchdog.
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: Romoker am 24 Januar 2019, 21:29:52
ZitatJa und was wäre der korrekte?

Der Devicename ist im Internal NAME definiert, hier "ESPEasy_Gartenhaus_Aussentemp". Du hast stattdessen das Internal IDENT = "Gartenhaus_Aussentemp" angegeben.
Probier mal
defmod AVGTempAussen average ESPEasy_Gartenhaus_Aussentemp:Temperature.*

Viele Grüße
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: R1F800 am 25 Januar 2019, 10:03:20
@ romoker
Habe nun den Internal Name genommen.

Jetzt sehe ich zumindest dass der AVERAGE mit der Temperatur verknüft ist.
Dennoch werden wohl die events nicht erkannt.

Wenn ich im Eventlog nachsehe kann ich diese auch nicht sehen ...  ???

So, im ESPEASY device sehe ich nun nach der Änderung meiner Definition des AVERAGE Werte. Läuft also, Besten Dank!
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: R1F800 am 27 Januar 2019, 10:03:02
Moin,
Ich habe nochmal eine Nachfrage:
Wie wird der average/day zurückgesetzt? Macht die Funktion dies selbstständig?
Wie triggere ich das Persistieren des Tagesdurchschnittswertes? Das average event wird doch mit jedem neuen Event upgedated.
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: rudolfkoenig am 27 Januar 2019, 10:43:57
ZitatWie wird der average/day zurückgesetzt?
Ich verstehe die Frage nicht.
Average generiert  einmal am Tag und am Monat ein Event, sonst werden Hilfsvariablen in Readings des ueberwachten Geraetes gespeichert, die wiederum automatisch im statefile gespeichert werden, bei save oder vor shutdown.
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: R1F800 am 27 Januar 2019, 13:23:14
Mmh. ich denke ich habe einen Denkfehler; die readings (s. Anhang) werden doch kontinuierlich aktualisiert > Timestamp

Was für ein Event ist denn dann der Auslöser für genau die Werte AVG/MIN/MAX  per day?
Ich will ja auf das EVENT reagieren und die Daten in ein LOG schreiben.
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: rudolfkoenig am 27 Januar 2019, 13:27:39
Der Name des generierten Events haengt vom ueberwachten Event ab.
Ist meiner Ansicht nach im commandref genau beschrieben: https://fhem.de/commandref_modular.html#average
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: R1F800 am 27 Januar 2019, 14:47:06
Stimmt, da steht folgendes:

    <eventname>_avg_day: $avg_day
    <eventname>_avg_month: $avg_month
    <eventname>_cum_day: $cum_day (only if cumtype is set to raw)
    <eventname>_cum_month: $cum_month (only if cumtype is set to raw)
    <eventname>_min_day: $min_day
    <eventname>_min_month: $min_month
    <eventname>_max_day: $max_day
    <eventname>_max_month: $max_month


Somit frage ch mich halt nach dem Ausdruck <eventname>
Ist auf dieses Event dann ein zusäztliches notify notwendig? > Ich versteh es einfach nicht.
Ich hätte jetzt unter dem AVG device z.B die Variablen / Envents zu finden erwartet  ...
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: R1F800 am 03 Februar 2019, 09:46:30
Zitat von: rudolfkoenig am 27 Januar 2019, 13:27:39
Der Name des generierten Events haengt vom ueberwachten Event ab.
Ist meiner Ansicht nach im commandref genau beschrieben: https://fhem.de/commandref_modular.html#average

Genau das war ja meine Ausgangsfrage.

Für mich matcht das zur Zeit nicht:

    <eventname>_avg_day: $avg_day
    <eventname>_min_day: $min_day
    <eventname>_max_day: $max_day

Hier steht bei mir Temperature_avg_day ;  und wenn man sich den TMSTP anschaut wird das Event dann gefeuert, wenn ein neuer Wert ermittelt wird und nicht erst um 23:59:59

In der Commandref steht:
    <device> <eventname>_avg_day: <computed_average>
    <device> <eventname>_min_day: <minimum day value>
    <device> <eventname>_max_day: <maximum day value>

Du sprichst von Hilfsvariablen in Form von Readings ... simit wäre Dein Hinweis auf die passenden events das eigentliche Reading .. aber das wird ja je nach Variablenupdate gepollt.
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: rudolfkoenig am 03 Februar 2019, 14:17:19
Zitatund wenn man sich den TMSTP anschaut wird das Event dann gefeuert, wenn ein neuer Wert ermittelt wird und nicht erst um 23:59:59
Ich gehe davon aus, dass Dir der Unterschied zwischen Reading und Event nicht present ist: Normalerweise wird beim Setzen eines Readings (das was man in der Detailansicht mit Zeitstempel sieht) ein Event (das, was man im Event-Monitor sieht, und was an notify/FileLog/etc weitergeleitet wird) erzeugt, aber das ist nicht zwingend der Fall. average.pm erzeugt nur beim Tages oder Monatswechsel Events, um das System nicht ueberfluessig zu belasten
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: Damian am 03 Februar 2019, 16:23:34
Falls jemand nur Werte glätten oder Ausreißer eliminieren will, kann es neuerdings im DOIF-Modul recht einfach realisieren: https://forum.fhem.de/index.php/topic,95759.75.html
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: R1F800 am 03 Februar 2019, 18:34:43
Zitat, aber das ist nicht zwingend der Fall. average.pm erzeugt nur beim Tages oder Monatswechsel Events, um das System nicht ueberfluessig zu belasten

Das ist genau der entscheidende Hinweis. Jetzt wird für mich ein Schuh draus.
Ich bin mal gespannt wie morgen das Log aussieht...
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: R1F800 am 05 Februar 2019, 08:30:34
Moin.
Leider hat das Ganze keinen Erfolg gebracht. Aber es liegt wahrscheinlich an meiner LOG Definition:

defmod TempAvgMinMaxOut FileLog ./log/TempAvgMinMaxOut.log AVGTempAussen:Temperature_avg_day.*

ist die REGEXP so korrekt ?
Titel: Antw:Modulerweiterung: 98_average.pm
Beitrag von: rudolfkoenig am 05 Februar 2019, 11:18:50
Vermutlich nicht, die Events werden im Namen des Geraetes, der von average ueberwacht wird, erstellt, da, wo die _avg_ Readings sind.