Autor Thema: MQTT_BRIDGE: Wie GET Kommando umsetzen?  (Gelesen 277 mal)

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3317
MQTT_BRIDGE: Wie GET Kommando umsetzen?
« am: 20 September 2017, 20:05:43 »
Hi,
ich möchte vin meinen Clients zu FHEM via MQTT eine Message senden um einen Wert aktiv von FHEM anzufordern,
zb: home/EG/WZ/get/MPD/ActivePlayer = 0

Dann soll die MQTT_BRIDGE beim verbundenen Device (hier MPD) ein "get MPD ActivePlayer" absetzen, die Rückgabe dieses Kommandos soll dann wieder als MQTT Message gesendet werden:

home/EG/WZ/get/MPD/ActivePlayer = MeinMPD1

Sozusagen ein aktives anfordern von Daten die aber selbst keine Readings sind. Wenn es Readings wären hätte man sie ja einfach bei einer änderung publishen können...

Ist das heute schon möglich? Ev. über umwege? Oder ist es ratsam die MQTT_BRIDGE dementsprechend zu erweitern?
FHEM auf Cubitruck mit Homematic, MAX, PCA301, Panstamp-Sensoren, RPi mit 2x 1wire, RPi mit Text2Speech.
Maintainer der Module: DbLog, Text2Speech, SprinkleControl, Sprinkle, TrashCal, MediaList

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3527
    • tech_LogBuch
Antw:MQTT_BRIDGE: Wie GET Kommando umsetzen?
« Antwort #1 am: 23 September 2017, 11:36:54 »
So was ähnliches habe ich in die MQTT_DEVICE/BRIDGE Module eingebaut und der Modul-Betreuer hat das mittlerweile übernommen und eingecheckt.

Die Subscribe-Attribute können jetzt optional einen Perl-Ausdruck erhalten, dort kannst Du weitere Aktionen anstossen:

BRIDGE:
attr <name> subscribeSet_<reading> [{Perl-expression}] [qos:?] [retain:?] <topic>

DEVICE:
attr <name> subscribeReading_<reading> [{Perl-expression}] [qos:?] [retain:?] <topic>

Ich Zitiere mal mich selbst:  ;D

MQTT_DEVICE: subscribeReadings:
              Perl-Ausdruck, der beim Message-Empfang ausgewertet wird. Unterstützung für QOS- und RETAIN-Flags (optional)
              attr <device> subscribeReading_<reading> [{Perl-Ausdruck}] [qos:?] [retain:?] <topic>
              An das auszuwertende Ausdruck werden folgende Variablen mitübergeben: $hash, $name, $topic, $message
              Returnwert entscheidet, ob Reading gesetzt (true (z.B. 1) oder undef), oder verworfen wird (false (z.B. 0)).
              Beispiel:
              attr DEVICE subscribeReading_cmd {fhem("attr DEVICE verbose 1")} /topic/cmd
             
 - MQTT_BRIDGE: subscribeSet / subscribeSet_XXX:
              Zusätzlich zum Topic kann ein Perl-Ausdruck mitgegeben werden, der beim Message-Empfang ausgewertet wird. Unterstützung für QOS- und RETAIN-Flags (optional)
              attr <device> subscribeSet[_reading] [{Perl-Ausdruck}] [qos:?] [retain:?] <topic>
              An das auszuwertende Ausdruck werden folgende Variablen mitübergeben: $hash, $name, $topic, $message, $devname (linked device)
              Returnwert entscheidet, ob Reading gesetzt (true), oder verworfen wird (false).
              Beispiel:
              attr DEVICE subscribeSet_cmd {if ($message eq "config") fhem("set $devname getconfig");; 0} /topic/cmd

Ich hoffe, das hilft Dir weiter.
Cubietruck, RPI3, HM, EnOcean, 1wire, Firmata, MySensors, ESP8266, ESPEasy, MQTT, NodeRED, Alexa, Telegram

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3317
Antw:MQTT_BRIDGE: Wie GET Kommando umsetzen?
« Antwort #2 am: 25 September 2017, 13:40:43 »
Hi,
danke für die Info...
Was ist denn der Unterschied zwischen subscribeReading_.* und subscribeSet_.*?
Leider steht in der Commandref noch keine Doku zum subscribeReading_.*
FHEM auf Cubitruck mit Homematic, MAX, PCA301, Panstamp-Sensoren, RPi mit 2x 1wire, RPi mit Text2Speech.
Maintainer der Module: DbLog, Text2Speech, SprinkleControl, Sprinkle, TrashCal, MediaList

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3527
    • tech_LogBuch
Antw:MQTT_BRIDGE: Wie GET Kommando umsetzen?
« Antwort #3 am: 25 September 2017, 14:16:17 »
Doch, steht es. Bei MQTT_DEVICE. https://fhem.de/commandref.html#MQTT_DEVICE
Das eine Attribut gehört zu Bridge, das andere zu dem Device. In der Wirkungsweise eigentlich gleich.
Warum das so ist, weiß ich auch nicht. DIe Module sind nicht von mir, ich habe nur einige Erweiterungen implementiert.

Cubietruck, RPI3, HM, EnOcean, 1wire, Firmata, MySensors, ESP8266, ESPEasy, MQTT, NodeRED, Alexa, Telegram

 

decade-submarginal