FHEM Forum

FHEM => Automatisierung => Thema gestartet von: it-place am 04 November 2022, 17:33:39

Titel: [gelöst] Gleitende Mittelwerte berechnen klappt, loggen jedoch nicht
Beitrag von: it-place am 04 November 2022, 17:33:39
Hallo,

ich stehe gerade etwas auf dem Schlauch bei der Ermittlung eines Mittelwerts. Ich habe ein Logfile StromTag-2022.log, welches den Tagesverbrauch in kWh enthält, z.B.

2022-11-01_00:00:00 StromTag energy_daily: 7.10000000000036
2022-11-02_00:00:00 StromTag energy_daily: 12.8999999999996
2022-11-03_00:00:00 StromTag energy_daily: 9.60000000000036
2022-11-04_00:00:00 StromTag energy_daily: 7.5

Anhand des Wiki-Artikels https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen (https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen) habe ich aus dem Abschnitt Gleitender Mittelwert aus Log-Dateien die dortige Funktion in eine eigene Datei 99_MyUtils eingebaut und kann in Fhem jetzt z.B. manuell dem Befehl myAverage ausführen:

{myAverage("2419200", "FileLog_StromTag", "4:::")}

Dem Artikel weiter folgend, habe ich noch die Kombination von notify/trigger definiert, die offenbar auch ausgeführt wird, wenn täglich der neue Wert StromTag:energy_daily.* ins Logfile geschrieben wird.

# Mittelwert ueber 28 Tage berechnen
define StromTag_notify notify StromTag:energy_daily.* {\
  fhem('trigger StromTag energy_average: '.myAverage("2419200", "FileLog_StromTag", "4:::"));;\
}


Allerdings fehlt mir die Idee, wie ich den Mittelwert in energy_average: jetzt zu fassen kriege und in ein Logfile schreiben kann. Habe schon verschiedenes ausprobiert und komme nun nicht weiter...

Hat jemand einen Tipp für mich? ???

Danke und viele Grüße - Olli
Titel: Antw:Gleitende Mittelwerte berechnen klappt, loggen jedoch nicht
Beitrag von: frober am 04 November 2022, 18:05:50
Einfach mit setreading in dein Device schreiben und mit loggen.

https://wiki.fhem.de/wiki/Set_magic (https://wiki.fhem.de/wiki/Set_magic)
Titel: Antw:Gleitende Mittelwerte berechnen klappt, loggen jedoch nicht
Beitrag von: it-place am 04 November 2022, 20:53:15
Hallo und vielen Dank für die schnelle Rückmeldung!

Laut Doku müsste ich etwas in dieser Art formulieren: setreading <Gerätename> <Readingname> [<Gerätename>:<Readingname>:d]
Also in etwas:
setreading StromTag_notify energy_average [StromTag:energy_average:0]

Gehört das dann mit in die vorher definierte Zeile hier (an Stelle der Fragezeichen)?
define StromTag_notify notify StromTag:energy_daily.* {\
  fhem('trigger StromTag energy_average: '.myAverage("2419200", "FileLog_StromTag", "4:::"));;\
  ???
}


Titel: Antw:Gleitende Mittelwerte berechnen klappt, loggen jedoch nicht
Beitrag von: frober am 04 November 2022, 21:29:12
Das passt so nicht...

Mit Trigger wird der Wert nicht geloggt.

Probiere es Mal so:
define StromTag_notify notify StromTag:energy_daily.* {\
  my $avg = myAverage("2419200", "FileLog_StromTag", "4:::");;\
  fhem("setreading StromTag energy_average $avg");;
}


Ungetestet...

Set magic ist die Schreibweise für Fhem, du bist aber in Perl.
War mein Fehler, hatte nicht darauf geachtet.
Titel: Antw:Gleitende Mittelwerte berechnen klappt, loggen jedoch nicht
Beitrag von: rudolfkoenig am 04 November 2022, 21:51:07
Das wird nicht funktionieren: Events fuer ein Geraet A werden nicht weitergeleitet, wenn diese in einem notify fuer das gleiche Geraet A erzeugt werden.
Das wird gemacht, um keine Endlosschleife zu produzieren.

Workarounds:
- die Events per userReadings erzeugen
- das Erzeugen mit einem FHEM-sleep entkoppeln, in etwa so: fhem("sleep 0.1; trigger/setreading ...")
Titel: Antw:Gleitende Mittelwerte berechnen klappt, loggen jedoch nicht
Beitrag von: frober am 04 November 2022, 22:02:13
Danke Rudi, für die Aufklärung.
Das war mir nicht bekannt.

@it-place jetzt hast du zwei Möglichkeiten.
Mit dem userReadings kannst du das notify einsparen.
Deine Entscheidung.

Titel: Antw:Gleitende Mittelwerte berechnen klappt, loggen jedoch nicht
Beitrag von: it-place am 05 November 2022, 09:48:10
Hallo zusammen,
danke für Eure wertvollen Tipps und Hinweise. Ich habe es dann so gelöst, dass ich täglich um 00:01 via at-Befehl den Mittelwert über 28 Tage berechne:

define StromAvg at *00:01:00 {\
  my $avg = myAverage("2419200", "FileLog_StromTag", "4:::");;\
  fhem("setreading StromAvg energy_average $avg");;\
}


Das lässt sich dann wie gewohnt in mein Logfile schreiben... :D