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
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.
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'}}
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.
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.