MQTT subscribe => Aufruf von perl funktion

Begonnen von McFish, 02 April 2024, 21:26:39

Vorheriges Thema - Nächstes Thema

McFish

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
--
FHEM auf Banana Pi

betateilchen

Zu wenige Informationen, um Dir wirklich helfen zu können.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

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.

McFish

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.

--
FHEM auf Banana Pi

JoWiemann

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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

TomLee

#5
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.

McFish

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.
--
FHEM auf Banana Pi