FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: McFish am 02 April 2024, 21:26:39

Titel: MQTT subscribe => Aufruf von perl funktion
Beitrag von: McFish am 02 April 2024, 21:26:39
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
Titel: Aw: MQTT subscribe => Aufruf von perl funktion
Beitrag von: betateilchen am 02 April 2024, 21:32:59
Zu wenige Informationen, um Dir wirklich helfen zu können.
Titel: Aw: MQTT subscribe => Aufruf von perl funktion
Beitrag von: rudolfkoenig am 02 April 2024, 22:05:05
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.
Titel: Aw: MQTT subscribe => Aufruf von perl funktion
Beitrag von: McFish am 03 April 2024, 18:15:23
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.

Titel: Aw: MQTT subscribe => Aufruf von perl funktion
Beitrag von: JoWiemann am 03 April 2024, 18:28:06
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
Titel: Aw: MQTT subscribe => Aufruf von perl funktion
Beitrag von: TomLee am 03 April 2024, 18:32:01
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.
Titel: Aw: MQTT subscribe => Aufruf von perl funktion
Beitrag von: McFish am 03 April 2024, 22:09:12
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.