Hallo an alle, die sich mit ModbusAttr auskennen,
das minütliche Auslesen der Daten eines Deye-Wechselrichters mit ModbusAttr habe ich hinbekommen und es wird ausgewertet mit:
defmod DeyeMacro notify Mod_Deye:PV4_Leistung_W:.* {appendDeye()}
Bei leerer Batterie ohne Sonne deaktiviere ich den Wechselrichter normalerweise, um Energie zu sparen.
Dann gibt es natürlich bei den minütlichen Polls des ModbusAttr timeouts.
Nun würde ich gerne bei Auftreten der Timeouts eine alternative Funktion ausführen, mit der ich z.B. den Betriebszustand "Deaktiviert" detektieren kann.
Zunächst hatte ich dafür folgendes vorgesehen:
defmod DeyeTimeout notify <pattern> {appendDeyeTimeout()}
Allerdings konnte ich nirgends finden, welcher Event bei einem Timout von ModbusAttr ausgeführt wird.
Einen Event muss es ja geben, der auch zum Eintrag des Timeouts ins Log dient.
Was müsste man hier also bei <pattern> einsetzen?
Alternativ hatte ich folgendes mit watchdog vorgesehen:
define DeyeDog watchdog <regexp1> 00:01:05 Mod_Deye:PV4_Leistung_W:.* {appendDeyeTimeout()}
Allerdings konnte ich auch nirgends finden, welcher Event beim Pollen von ModbusAttr generiert wird.
Was müsste man hier also bei <regexp1> einsetzen?
Über konkrete Lösungsvorschläge zum Aufruf der Funktion appendDeyeTimeOut(), auch elegantere als die obigen beiden Ideen, würde ich mich freuen.
Gruß
Marlon
Stefan Strobel gab mir inzwischen den Hinweis auf LAST_ERROR.
So geht es jetzt prinzipiell:
defmod DeyeTimeout notify Modbus_Deye:LAST_ERROR:.* {appendDeyeTimeout()}
attr DeyeTimeout disabledAfterTrigger 30
Gibt es eine Möglichkeit und ggf. welche, um Modbus_Deye:LAST_ERROR:.* so zu erweitern, dass nur bestimmte Readings, z.B. der erste von 8 Blöcken ab h500 das notify triggern?
Dann könnte man auf das unschöne disabledAfterTrigger verzichten.