Modulerweiterung: 98_average.pm

Begonnen von mumpitzstuff, 06 Mai 2017, 22:52:30

Vorheriges Thema - Nächstes Thema

mumpitzstuff

Ich war mal so frei und habe das in FHEM vorhandene Modul 98_average.pm um einige Punkte erweitert:


  • average und min/max Werte auf Stundenbasis
  • frei wählbares Intervall im Bereich von 1s - 1 Monat
  • das frei wählbare Intervall toggelt ein Reading (0/1) jeweils nach Ablauf des Intervalls
  • wenn das custom Intervall Attribut gelöscht wird oder das Intervall auf 0 steht, dann wird die Berechnung der average und min/max Werte ausgeschaltet
  • Attribut nohour schaltet die stündlichen average und min/max Werte aus
  • Attribut noday schaltet die täglichen average und min/max Werte aus
  • Attribut nomonth schaltet die monatlichen average und min/max Werte aus
  • Attribut hideraw versteckt die für die Berechnung notwendigen Zwischenwerte (Readings erhalten einen . im Namen)
  • Cleanup code erweitert, so dass überflüssige Readings beim Umschalten der Attribute automatisch gelöscht werden

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

mumpitzstuff

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.

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

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.

Maui

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.

mumpitzstuff

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.

Maui

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

mumpitzstuff

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.

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Maui

#9
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))) } })

Jamo

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!
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

Maui

Bei mir läuft die help. Neustart?

Jamo

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).
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

mumpitzstuff

#13
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. 

Jamo

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?
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence