MQTT_BRIDGE: Wie GET Kommando umsetzen?

Begonnen von Tobias, 20 September 2017, 20:05:43

Vorheriges Thema - Nächstes Thema

Tobias

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?
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

hexenmeister

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
Zitat von: hexenmeister am 20 Juli 2017, 22:08:09

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.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Tobias

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_.*
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

hexenmeister

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.

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy