FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: TomLee am 08 März 2025, 14:36:49

Titel: Perl in readingList
Beitrag von: TomLee am 08 März 2025, 14:36:49
Hi,

beschäftigt mich jetzt schon 2 Tage.

An den Topic sende ich zum Test eine primitive Payload:

defmod mymqtt_217550102687274 MQTT2_DEVICE mymqtt_217550102687274
attr mymqtt_217550102687274 readingList tzi:.* {fhem("setreading du_t3 pressure on;;setreading du_t2 pressure off");;return {bla => 'on'}}

Was da zurückgegeben wird ist unrelevant, mir gehts nur um die aufeinanderfolgenden FHEM-Befehle.

Warum landet damit on;setreading du_t2 pressure off in dem Reading pressure von du_t3?
Doppelte Semikolon helfen nicht.

Gruß Thomas

Titel: Aw: Perl in readingList
Beitrag von: betateilchen am 08 März 2025, 15:49:26
Vermutlich ist das Attribut readingList einfach nicht dafür vorgesehen, dass man es als "notify" missbraucht, um irgendwo ausserhalb des betreffenden devices in FHEM etwas zu bewirken. Deshalb könnte ich mir vorstellen, dass keine vollständige Evaluierung sämtlicher möglicher (fhem-spezifischer) perl-Konstrukte eingebaut ist.

Wenn Du das wirklich so tun willst, kannst Du halt fhem() zweimal aufrufen.

attr mymqtt_217550102687274 readingList schokolade:.* {fhem("setreading du_t3 pressure on");;fhem("setreading du_t2 pressure off")}
Ich glaube auch nicht, dass "perl in readingList" tatsächlich das Problem ist, sondern die spezielle, von FHEM bereitgestellte Funktion fhem() selbst.
Titel: Aw: Perl in readingList
Beitrag von: TomLee am 08 März 2025, 16:09:53
ja, danke, weiß dass das geht. Für das was ich mir ausgedacht hatte bräuchte man aber alles in einer fhem-Funktion.
Der erste FHEM-Befehl soll eigentlich ein sleep sein (damit hat das nachvollziehen bei mir erst angefangen), da bekommt man immer die  Meldung das der letzte Parameter quiet fehlt.
tzi:.* {fhem("sleep 5 quiet;setreading $NAME bla off");return {bla => 'on'}}
Titel: Aw: Perl in readingList
Beitrag von: rudolfkoenig am 08 März 2025, 20:39:02
ZitatWarum landet damit on;setreading du_t2 pressure off in dem Reading pressure von du_t3?
Weil an dieser Stelle AnalyzePerlCommand und nicht AnalyzeCommandChain aufgerufen wird.
AnalyzePerlCommand aendert ;; nicht zu ;, damit denkt das in fhem() aufgerufene AnalyzeCommandChain, dass es ein Befehl ist, also ein setreading mit vielen Argumenten.
Da diese Stelle ein hash mit Name/Value Paaren zurueckliefern soll, betrachte ich das nicht als Bug, Readings sollte man per notify/DOIF etc setzen.
Wenn es unbedingt sein soll, dann lagert man alles in eine Funktion aus.

Zitatda bekommt man immer die  Meldung das der letzte Parameter quiet fehlt.
Grund ist das Gleiche wie oben: sleep wird mit mehr Parametern aufgerufen, als man es annimmt.
Titel: Aw: Perl in readingList
Beitrag von: TomLee am 08 März 2025, 21:30:12
ZitatWeil an dieser Stelle AnalyzePerlCommand und nicht AnalyzeCommandChain aufgerufen wird.
AnalyzePerlCommand aendert ;; nicht zu ;, damit denkt das in fhem() aufgerufene AnalyzeCommandChain, dass es ein Befehl ist, also ein setreading mit vielen Argumenten.

Danke. Dachte ich mir (und betateilchen oben ja oben schon bemerkt hat) dass es in die Richtung geht. Hatte ich die Tage schon so rausgelesen gehabt. Werd in Zukunft mal darauf achten und einlesen wie das mit der Verarbeitung genau funzt. Thx auch für den Hinweis mit dem auslagern.