FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Romoker am 07 Juni 2020, 20:36:48

Titel: [gelöst] Unerwartetes Verhalten von event-aggregator
Beitrag von: Romoker am 07 Juni 2020, 20:36:48
Es gibt diverse Threads hier im Forum zur event-aggregator-Funktionalität, aber keiner löst mein Problem.

Ich möchte, dass FHEM mir eine Fläche über einen bestimmten Zeitraum periodisch berechnet. Nach Periodenablauf soll der Wert in ein Log geschrieben werden.
Dazu folgender einfacher Versuchsaufbau:
Ein Dummy mit event-aggregator-Attribut:
define testintegral dummy
attr testintegral event-aggregator integral1:300:const:integral:300

Ein at, dass alle 10 Sekunden den Wert 10 in das Reading integral1 feuert:
define a_testintegral at +*{100}00:00:10 setreading testintegral integral1 10
Ein FileLog, das Änderungen des Readings integral1 dokumentiert:
define testintegrallog FileLog ./log/testintegral-%Y.log testintegral:integral1:.*

Meine Erwartung ist:
Ergebnis nach at Start:
Die Versuchsvariante ohne Intervall-Definition mit
attr testintegral event-aggregator integral1::const:integral:300
führt dazu, dass das Reading schon im 1. Intervall alle 10s mit dem Aggregationswert aktualisiert wird. Das widerspricht der Beschreibung in der commandref: With holdTime defined the interval can be kept undefined so that the readings update rate is unchanged or it can be set to a value less then holdTime for downsampling as described above with a full history of the readings in memory.
Nach dem 1. Intervall bleibt wie im vorherigen Versuch die Aggregation um den Wert 3000 stecken.

Das alles sieht nach einem Fehler aus.

Hier eine Dumperausgabe der Timerwerte nach dem 1. Intervall mit
{ Dumper($defs{"testintegral"}{READINGS}{"integral1"}{".ts"}) }

$VAR1 = bless( {
                 '_M' => '100.000041325887',
                 '_S' => '0.00870338185376656',
                 '_t' => '1591543162.28557',
                 '_t0' => '1591542862.28545',
                 '_v' => '10',
                 'autoreset' => 300,
                 'count' => 31,
                 'holdTime' => 300,
                 'integral' => '3000.00123977661',
                 'lost' => 0,
                 'max' => 10,
                 'mean' => '10',
                 'median' => undef,
                 'method' => 'const',
                 'min' => 10,
                 'n' => 30,
                 'sd' => '0.00173238669931274',
                 't' => '1591543162.28557',
                 't0' => '1591542862.28545',
                 'tSeries' => [
                                '1591542862.28545',
                                '1591542872.28802',
                                '1591542882.2857',
                                '1591542892.28819',
                                '1591542902.28559',
                                '1591542912.28593',
                                '1591542922.28524',
                                '1591542932.28613',
                                '1591542942.28705',
                                '1591542952.28606',
                                '1591542962.28552',
                                '1591542972.28593',
                                '1591542982.28569',
                                '1591542992.28823',
                                '1591543002.28692',
                                '1591543012.28593',
                                '1591543022.28552',
                                '1591543032.28608',
                                '1591543042.28532',
                                '1591543052.28828',
                                '1591543062.2865',
                                '1591543072.28588',
                                '1591543082.28549',
                                '1591543092.28781',
                                '1591543102.28537',
                                '1591543112.28628',
                                '1591543122.28676',
                                '1591543132.28724',
                                '1591543142.2878',
                                '1591543152.28727',
                                '1591543162.28557'
                              ],
                 'v' => '10',
                 'v0' => '10',
                 'vSeries' => [
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10',
                                '10'
                              ]
               }, 'TimeSeries' );


Mein FHEM ist aktuell. Hat jemand eine Idee?

Viele Grüße
Titel: Antw:Unerwartetes Verhalten von event-aggregator
Beitrag von: Romoker am 09 Juni 2020, 12:22:06
Ich konnte meine Anforderung jetzt mit Weglassen des Parameters "holdTime" lösen. Mit ,,event-aggregator integral1:300:const:integral" verhält sich der Aggregator in meinem Testbeispiel so wie ich es erwarte. Auf die falsche Fährte geführt hat mich das Beispiel in der commandref:
attr mySunMeter event-aggregator SUN_INTENSITY_24H::const:integral:86400

Die Leistung der täglichen Sonnenstrahlung zu bestimmen, ließ sich damit nicht realisieren. Aber vielleicht war das Beispiel auch für einen anderen Anwendungsfall gedacht, der sich mir nicht erschlossen hat.
Mit folgender Definition bekomme ich alle 24 h den aggregierten Strahlungswert und damit die erbrachte Solarenergie:
attr mySunMeter event-aggregator SUN_INTENSITY_24H:86400:const:integral

Die interval-Parameter-Dokumentation in der commandref beschreibt das auch korrekt. Wie gesagt hat mich dann der Parameter "holdTime" verwirrt. Erst der Hinweis in der Source von timeSeries.pm "method _housekeeping does not reset time series if hold time is specified" hat mich darauf gebracht, dass die Anwendung des Parameters ,,holdTime" für meinen Anwendungsfall falsch ist. Die Erkenntnis hat leider etwas gedauert.

Viele Grüße