Moin,
mein FHEM empfängt erfolgreich von unterschiedlichen Geräten MQTT Nachrichten und kann diese auch gut anzeigen.
Nun würde ich aber gerne jede Message nochmal einer Perl Funktion übergeben.
Hat jemand ein Code snippet wie ich das anstellen muß?
TIA, Andreas
Zu wenige Informationen, um Dir wirklich helfen zu können.
Ich rate auch: in MQTT2_CLIENT / MQTT2_SERVER rawEvents auf .* setzen, und mit einem notify diese Events verarbeiten.
Ich vermute, dass dazu sinnvollere Alternativen gibt.
Ich wüßte nicht welche weiteren Informationen ich liefern könnte. Wenn ein MQTT Gerät etwas sendet, solle eine von mir erstelle Perlfunktion mit den MQTT Daten aufgerufen werden.
Etwa so:
define MQTTServer MQTT2_SERVER 1883 global
setuuid MQTTServer 63cda9c8-f33f-88bf-290a-489dad72ac87ec49
attr MQTTServer room MQTT
attr MQTTServer notify .* { MyPerl(data)}
Für Beispiele wäre ich dankbar. Mit perl komme ich wieder zurecht, die FHEM Syntax bleibt mir leider etwas sperrig.
Zitat von: McFish am 03 April 2024, 18:15:23Für Beispiele wäre ich dankbar. Mit perl komme ich wieder zurecht, die FHEM Syntax bleibt mir leider etwas sperrig.
Hallo,
Rudi hat Dir doch schon alle Hinweise gegeben. Fhem arbeitet u.a. Event basiert. Wird ein Reading aktualisiert, dann kannst Du über ein notify Device darauf reagieren. Hier hilft Dir das Fhem Wiki mit einer guten Beschreibung und Beispielen zu notify gut weiter.
Grüße Jörg
Hallo,
$EVENT in einem MQTT2_DEVICE einfach deiner Funktion übergeben ?
attr MQTT2_DEVICENAME readingList erster/topic/bli:.* { MyPerl1($EVENT) }\
zweiter/topic/bla:.* { MyPerl2($EVENT) }\
dritter/topic/blub:.* { MyPerl3($EVENT) }
Thomas
edit:
Hab es mal ausprobiert, wegen:
ZitatreadingList <regexp> [readingName|perl-Expression] ...
If the regexp matches topic:message or cid:topic:message either set readingName to the published message, or evaluate the perl expression, which has to return a hash consisting of readingName=>readingValue entries. You can define multiple such tuples, separated by newline, the newline does not have to be entered in the FHEMWEB frontend. cid is the client-id of the sending device.
Es
scheint kein Problem zu sein wenn man nix zurückgibt.
Zitat von: TomLee am 03 April 2024, 18:32:01Hallo,
$EVENT in einem MQTT2_DEVICE einfach deiner Funktion übergeben ?
attr MQTT2_DEVICENAME readingList erster/topic/bli:.* { MyPerl1($EVENT) }\
zweiter/topic/bla:.* { MyPerl2($EVENT) }\
dritter/topic/blub:.* { MyPerl3($EVENT) }
Thomas
edit:
Hab es mal ausprobiert, wegen:
ZitatreadingList <regexp> [readingName|perl-Expression] ...
If the regexp matches topic:message or cid:topic:message either set readingName to the published message, or evaluate the perl expression, which has to return a hash consisting of readingName=>readingValue entries. You can define multiple such tuples, separated by newline, the newline does not have to be entered in the FHEMWEB frontend. cid is the client-id of the sending device.
Es scheint kein Problem zu sein wenn man nix zurückgibt.
Es funktioniert, vielen Dank. Zurückgeben kann ja auch die Perl-Funktion.