Notify holt Reading eines Geräts, Reading soll ins Geräte-Filelog

Begonnen von TheTrumpeter, 17 Juli 2017, 15:57:45

Vorheriges Thema - Nächstes Thema

TheTrumpeter

Ich habe ein notify, das bei Änderung eines bestimmten Readings mittels get-Befehl ein anderes Reading desselben Geräts holt.
Das funktioniert wunderbar, nur wird das geholte Reading nie gelogged. Weder bei Änderung noch bei Zeitschwelle (event-min-interval).

Dasselbe Problem habe ich mit einem Notify, das ein selbstgeschriebenes Modul im 99_myUtils aufruft. Dieses Modul setzt verschiedene Parameter eines Geräts. Die Änderungen werden aber nicht ins Filelog geschrieben.
Rufe ich das Modul direkt auf, wird protokolliert.

Was mache ich falsch bzw. wie könnte es funktionieren?
(Aufruf des notify funktioniert, nur möchte ich alles, was mittels get oder set passiert ins entsprechende gerätespezifische FileLog protokollieren.)
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

CoolTux

Es werden immer Events in ein Gerätelog geschrieben. Natürlich muß Deine Log Definition entsprechend gestaltet sein.
Also Frage

1. generieren die von Dir monierten Readings Events?
2. ist Deine Gerätespezifische Logdefinition entsprechend?
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

TheTrumpeter

Hier die relevanten Auszüge der Konfiguration:

Das Gerät Mythz hat u.a. Readings mit Namen "sGlobal" und "sDewPointHC1". sGlobal wird im Gerät zyklisch abgefragt.
define Mythz THZ /dev/ttyAMA0@115200
attr Mythz event-min-interval s.*:600
attr Mythz event-on-change-reading .*
attr Mythz interval_sGlobal 300


Filelog:
define FileLog_Mythz FileLog ./log/Mythz-%Y-%m.log Mythz

Notify:
define Mythz.GetDewPoint notify Mythz:sGlobal:.* get Mythz sDewPointHC1

Ich sehe, dass sich der Zeitstempel des Readings sDewPointHC1 in der Detailansicht von Mythz ändert bzw. auch die Werte aktualisiert werden.
Im Eventmonitor ist das Event sichtbar, aber der Eintrag im Filelog fehlt:

Auszug von gerade eben:
ZitatEvents (Filter: Mythz:sGlobal:.*|Mythz:sDewPointHC1:.*)   FHEM log   

2017-07-17 20:05:05 THZ Mythz sGlobal: outsideTemp: ...
2017-07-17 20:10:05 THZ Mythz sGlobal: outsideTemp: ...
2017-07-17 20:10:05 THZ Mythz sDewPointHC1: 12.3 °C
2017-07-17 20:15:05 THZ Mythz sGlobal: outsideTemp: ...
2017-07-17 20:15:05 THZ Mythz sDewPointHC1: 12.4 °C

Filelog:
Zitat2017-07-17_20:00:05 Mythz sGlobal: outsideTemp: ...
2017-07-17_20:05:05 Mythz sGlobal: outsideTemp: ...
2017-07-17_20:10:05 Mythz sGlobal: outsideTemp: ...
2017-07-17_20:15:05 Mythz sGlobal: outsideTemp: ...
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

TheTrumpeter

FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

TheTrumpeter

Scheint irgendwie mit den Namen der Defines zusammenzuhängen...

Ich habe folgendes ursprüngliche Notify inaktiv gesetzt:
define Mythz.GetDewPoint notify Mythz:sGlobal:.* get Mythz sDewPointHC1
Folgendes Notify habe ich neu definiert:
define DummyDewPoint notify Mythz:sGlobal:.* get Mythz sDewPointHC1

Die Einträge im Filelog sind nun vorhanden.
Woran liegt das?
Ist der "Punkt" in meinem ursprünglichen Namen Schuld oder, dass der Name ein Teil der Filelog-Regex ist?
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

TheTrumpeter

Ich muss mich nochmal melden...

Das Problem existiert an anderer Stelle immer noch...

Nachdem die Readings, die ich in einem meiner Module auslese, immer noch nicht im Filelog landen, wenn das Modul aus einem Notify aus aufgerufen wird und ein zusätzliches Auslesen im gleichen Notify nach dem Modul auch nicht funktioniert, habe ich ein weiteres Notify angelegt, das vom modulaufrufenden Notify getriggert wird.

Rufe ich das neue Notify händisch auf, funktioniert alles wie erwartet. Wird es aus dem anderen Notify aus getriggert, wird nichts protokolliert.

Hier der Code vom Notify mit dem Modulaufruf und Trigger des 2. Notify:
define Kuehlparameter notify (Mythz:sDewPointHC1:.*|Mythz:Compressor:.*|Mythz:Cooling:.*) \
IF (([Mythz:Cooling:d] == 1) && ([Mythz:Compressor:d] == 1)) \
(\
{setCoolingParameters}, \
trigger Mythz.getCoolingParameters\
)


Und hier das neue Notify, das die Parameter ausliest:
define Mythz.getCoolingParameters notify Mythz.getCoolingParameters \
{fhem "trigger Mythz p99CoolingHC1SetTemp: " . ReadingsVal ('Mythz', 'p99CoolingHC1SetTemp', 0)};;;; \
{fhem "trigger Mythz p99CoolingHC1HystersisFlowTemp: " . ReadingsVal ('Mythz', 'p99CoolingHC1HystersisFlowTemp', 0)}


Gebe ich händisch "trigger Mythz.getCoolingParameters" ein, landen die beiden Parameter sofort im Filelog.
Der automatische Aufruf selbst funkioniert aber, weil sich der Zeitstempel im STATE ändert.

Ich blicke einfach nicht mehr durch... was mache ich falsch?
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

amenomade

#6
Zitatdefine Mythz.getCoolingParameters notify Mythz.getCoolingParameters
Darf ein notify sich selbst triggern? Ist das nicht gefährlich (Endlosschleife)?

EDIT: ja, anscheinend darf es
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Guck mal mit
Zitatattr global verbose 5
, ob Du komische Meldungen in der Log hast, wie z.B.
ZitatStarting notify loop for
Ich hab irgendwo gelesen, dass verschachtelte Notifies unterbunden sind.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

frank

ich hatte mal ein ähnliches problem, https://forum.fhem.de/index.php/topic,26826.0.html

fazit: das ist so gewollt.

du kannst das problem aber mit userreadings lösen. das, was dein notify macht, musst du durch das userreading machen lassen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

TheTrumpeter

Zitat von: frank am 06 August 2017, 10:43:52
ich hatte mal ein ähnliches problem, https://forum.fhem.de/index.php/topic,26826.0.html

fazit: das ist so gewollt.

du kannst das problem aber mit userreadings lösen. das, was dein notify macht, musst du durch das userreading machen lassen.
Ganz habe ich das noch nicht verstanden...
Ich habe ein Helper-Modul (99_myLWZUtils), in dem ein Modul teilweise "set"-Befehle an ein Gerät absetzt. Die Parameter werden im Gerät gesetzt, wenn ich das Modul direkt aufrufe. Zusätzlich erscheinen die Parameter im zugehörigen FileLog.
Rufe ich dasselbe Modul aus einem Notify aus auf, funktioniert das Setzen der Parameter immer noch, die zugehörigen Readings des Geräts werden ebenfalls aktualisiert (aktueller Wert plus Zeitstempel), aber die Änderungen landen nicht im Filelog.

In dem Link von Dir geht es ja darum, Readings "willkürlich" zu ändern. Bei mir passiert die Änderung aber durch einen Set-Befehl an ein Device ohnehin schon.
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

frank

ZitatGanz habe ich das noch nicht verstanden...
ich auch nicht, da es nicht wirklich konsistent ist.

in meinem fall hat es ja mit dem notify im prinzip (anzeige) funktioniert, aber eben nicht in allen fällen mit filelog.
filelog und userreadings sind ja quasi auch notify's. daher war/bin ich der meinung, dass sie dann "eigentlich" auch identisch funktionieren müssten/sollten. wenn es trotzdem teilweise funktioniert, ist das eher der fehler. wie du auch selber sagst, manuell kannst du den trigger erzeugen, aber das notify kann keinen brauchbaren trigger für filelog erzeugen.

wenn ein device ein notify triggert, kann/darf das notify keinen erneuten trigger(event) im selben device erzeugen.
damit soll eine endlosschleife unterbunden werden.

für diese fälle einfach userreadings nutzen. ist ja im prinzip das selbe.
in meinem fall wollte ich mit einem generischen notify mehrere devices parallel bearbeiten, um mir mehrere identische userreadings zu ersparen.

edit:
wenn du meinst, dein fall liegt doch anders, musst du es im anderen forumbereich mit einem neuen thread rudi vortragen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

TheTrumpeter

Letztendlich möchte ich einfach mein Problem lösen. Nur habe ich noch nicht verstanden, wie ich das mit Userreadings machen soll.

Gegeben:
Ich möchte Parameter der Wärmepumpe bei bestimmten Ereignissen ändern, nämlich abhängig vom Taupunkt immer dann, wenn die Kühlung aktiv ist und der Verdichter läuft.
Dafür habe ich das notify angelegt, das auf obige Events reagiert und mein Helper-Modul aufruft.
Im Helper-Modul werden dann 2 Parameter für die Wärmepumpe abhängig von diversen anderen Parametern und Umgebungsbedingungen berechnet und ggf. verändert in die Wärmepumpe geschrieben.

Jetzt möchte ich einfach nur, dass die Parameteränderung auch im Filelog sichtbar ist.
Ich habe jetzt versucht innerhalb des Helper-Moduls die geänderten Parameter nochmal mittels "setreading" zu schreiben. Das Schreiben funktioniert prinzipiell, nur kommt's trotzdem nicht ins Filelog. Rufe ich innerhalb des Notifys nach dem Helper-Modul nochmal ein "get" oder "setreading" bzw. "trigger" auf, kommt es auch nicht ins Filelog.

Übrigens sind hier alle betroffenen Readings Teil desselben Devices, also sowohl die das notify triggernden Readings als auch die im Helper-Modul veränderten Readings.

Andernorts, wo unterschiedliche Devices im Spiel sind, funktioniert's.
Ich habe mehrere Notify, die von unterschiedlichen Readings aus einem CustomReadings getriggert werden und dort unterschiedliche Module aufrufen, die Readings in einem Dummy setzen/ändern. Das wird alles brav protokolliert.
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

amenomade

Geht es nur um die Log, oder willst Du auch Events davon?

Wenn es nur um die Log geht, mach einfach "Log3 1,<device>,"was du willst" in deinem Helpermodul
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

TheTrumpeter

Zitat von: amenomade am 06 August 2017, 19:27:52
Wenn es nur um die Log geht, mach einfach "Log3 1,<device>,"was du willst" in deinem Helpermodul
Das habe ich aktuell als Workaround ohnehin drin, aber dann landet es eben im System-Logfile und nicht im dem Device zugehörigen Logfile.

Zu Deinem ursprünglichen Beitrag bzgl. Logs mit "verbose 5":
Kommt noch, nur voraussichtlich erst morgen Abend, weil heute mangels sommerlicher Temperaturen die Kühlung nicht freigegeben wurde. Möchte nicht irgendwas verfälschen, wenn ich die Readings händisch setze/überschreibe.
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

amenomade

Na dann hast Du kein Wahl. userReading ist wahrscheinlich die einzige mögliche Lösung.

Wg. verbose 5: den Beitrag hab ich gelöscht, da die Ursache vermutlich schon bekannt ist, und es nicht viel helfen wird, dein Problem zu lösen, wenn wir feststellen: "ja, das ist die Ursache, kann man aber nicht ändern" ;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus