FileLog ignoriert event aus notify

Begonnen von kaba, 11 Mai 2020, 12:37:58

Vorheriges Thema - Nächstes Thema

kaba

Hallo,
ich habe ein seltsames Problem an dem ich nicht recht weiterkomme - es gibt ein paar ähnliche Situationen die im Forum diskutiert werden, aber deren Lösungsansätze scheinen bei mir nicht zu funktionieren. Würde mich über Tipps sehr freuen.

Folgendes Problem:
Ich habe ein notify (siehe unten), das auf Messwerte eines Windmessers reagiert und einen Mittelwert erzeugt. Dieser wird auf einem Reading via readingsSingleUpdate() gespeichtert. Das entsprechende Update generiert ein Event (im Event Log sichtbar), aber keinen Eintrag im FileLog zu dem device. Das FileLog greift ansonsten alle Events zu dem Device.

Frage: wie kann ich es hinbekommen, dass mein selbst gesetztes reading (gusts_avg) ins FileLog läuft? 


Hier die Definition des Notify:

sprinknet_weather:gusts:.*
{
  my $gusts_1 = ReadingsVal('sprinknet_weather', 'gusts_1', '0');
  my $gusts_2 = ReadingsVal('sprinknet_weather', 'gusts_2', '0');
  my $gusts_3 = ReadingsVal('sprinknet_weather', 'gusts_3', '0');
  my $gusts = ReadingsVal('sprinknet_weather', 'gusts', '0');
  my $gusts_avg = ($gusts_1 + $gusts_2 + $gusts_3 + $gusts) / 4;

  readingsBeginUpdate($main::defs{sprinknet_weather});
  readingsBulkUpdate($main::defs{sprinknet_weather}, 'gusts_1', $gusts_2);
  readingsBulkUpdate($main::defs{sprinknet_weather}, 'gusts_2', $gusts_3);
  readingsBulkUpdate($main::defs{sprinknet_weather}, 'gusts_3', $gusts);
  readingsEndUpdate($main::defs{sprinknet_weather}, 0);

  readingsSingleUpdate($main::defs{sprinknet_weather}, 'gusts_avg', $gusts_avg,1);
}


und hier ein Beispiel aus dem EventLog:
2020-05-11 12:32:35 dummy sprinknet_weather gusts: 3.51
2020-05-11 12:32:35 dummy sprinknet_weather gusts_avg: 2.88


Auch ein explizites Auflisten der Readings bei event-on-update-reading brachte keine Abhilfe.

Vielen Dank schonmal und liebe Grüße aus dem Taunus,
Karsten

betateilchen

Zitat von: kaba am 11 Mai 2020, 12:37:58
Frage: wie kann ich es hinbekommen, dass mein selbst gesetztes reading (gusts_avg) ins FileLog läuft? 

Das funktioniert grundsätzlich nicht ohne weiteres aus einem gerade ausgeführten notify heraus. Hintergrund ist, dass man damit Endlosschleifen vermeiden möchte.

Du könntest probieren, ob Du mit der Verwendung von userreadings weiterkommst, anstatt mit readingsBulk.*() zu arbeiten. Diese Funktionen sind eher für die FHEM-interne Verwendung von/in Modulen vorgesehen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

ZitatDas funktioniert grundsätzlich nicht ohne weiteres aus einem gerade ausgeführten notify heraus.
Um genauer zu sagen: wenn ein Modul als Reaktion auf Events fuer Geraet X weitere Events fuer dasselbe Geraet X generiert dann werden diese nicht verteilt.

Alternativen:
- userReadings (wie Beta-User das vorgeschlagen hat)
- Events mit FHEM sleep entkoppelt zu generieren
- Spezialmodule wie statistics/dewpoint etc verwenden, die das Problem (inherenterweise) kennen

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig


kaba

Vielen Dank für die extrem schnelle und klare Antwort!

Werde mein Glück mit userreading und der im Wiki beschriebenen moving average Funktion versuchen - die hatte ich vorher noch nicht gefunden.