(FHEM) 10 MQTT DEVICE.pm

Aus TippvomTibb
Zur Navigation springen Zur Suche springen

10_MQTT_DEVICE

[Zurueck Uebersicht]

Ein MQTT_DEVICE fungiert als fhem-device, das mqtt-topics zugeordnet ist. 

Steckbrief

Define

define <name> MQTT_DEVICE <IODev>

Wenn man es so mach wie im der commandref beschrieben erhaelt man eine Fehlermeldung.

client device hash no IODev provided 

Das Attribut IODev hat sich damit wohl erledigt.

Set

set <name> <command> z.B. on oder off; erst nach der Anlage durch Attribut in der Detail-Ansicht vorhanden.
set <name> <reading> <value> erst nach der Anlage durch Attribut in der Detail-Ansicht vorhanden.
set extensions erst nach der Anlage durch Attribut in der Detail-Ansicht vorhanden.

Get

  

Readings

  

Attributes

attr <name> publishSet [[<reading>:]<commands_or_options>] <topic>
attr <name> publishSet_<reading> [<values>]* <topic>
attr <name> autoSubscribeReadings <topic>
attr <name> subscribeReading_<reading> [{Perl-expression}] [qos:?] [retain:?] <topic>
attr <name> retain <flags> ...
attr <name> qos <flags> ...
attr <name> useSetExtensions <flags>

Erlaeuterungen

Aus dem Forumsbetrag:

MQTT_DEVICE wird verwendet, wenn das physikalische Device (Sensor oder Aktor) über mqtt kommuniziert. (Kein dummy mehr nötig!)
MQTT_BRIDGE ist für den Fall, dass ein fhem-device existiert und dieses über mqtt sicht- bzw. steuerbar gemacht werden soll.

Es wird die im IODev-attribute angegebne MQTT-verbindung verwendet. Messages von mqtt updaten die readings dieses devices direkt, es wird kein weiterer dummy benötigt. MQTT_DEVICE verwendet man zur Einbindung von über mqtt erreichbaren sensoren und aktoren.

In den Topic-namen der vorgenannten Attribute werden aktuell noch keine Wildcards unterstützt.

Um das Erstellen der Readings zu vereinfachen gibt es das Attribute autoSubscribeReadings.

'attr <name> autoSubscribeReadings wohnzimmer/+' sorgt dafür, dass für alle empfangenen Messages automatisch das jeweils passende 'subscribeReading_xxx'-Attribut erstellt und das zugehörige Reading auch gleich geupdated wird.

Beispiele

#1

define licht_kinderzimmer MQTT_DEVICE <IODev>
attr licht_kinderzimmer publishSet on off fhem/kinderzimmer/licht
attr licht_kinderzimmer subscribeReading_state fhem/kinderzimmer/licht/set

Mit 'set licht_kinderzimmer on' schickt man jetzt eine message 'on' an das topic fhem/kinderzimmer/licht. Umgekehrt kann das reading state über messages an fhem/kinderzimmer/licht/set gesetzt werden.

#2

define heizung_kinderzimmer MQTT_DEVICE  <IODev>
attr heizung_kinderzimmer publishSet_desired-temp fhem/kinderzimmer/temperatur
attr heizung_kinderzimmer subscribeReading_messured-temp fhem/kinderzimmer/temperatur/set
attr heizung_kinderzimmer stateFormat messured-temp

#3

attr heizung_kinderzimmer autoSubscribeReadings fhem/kinderzimmer/+/set

sorgt dafür, dass für alle empfangenen Messages automatisch das jeweils passende 'subscribeReading_xxx'-Attribut erstellt und das zugehörige Reading auch gleich geupdated wird. Das letzte '+' im Topic wird als Name des Readings benutzt. Also wenn eine Message '17.5' an 'fhem/kinderzimmer/messured-temp/set' empfangen wird, wird 'attr heizung_kinderzimmer subscribeReading_messured-temp fhem/kinderzimmer/messsured-temp' gesetzt und gleichzeitig das Reading 'messured-temp' erzeugt und auf den Wert '17.5' gesetzt. Wenn alle gewünschten Readings auf diese Weise angelegt sind, kann man das Attribut 'autoSubscribeReadings' wieder entfernen.

#4

attr mqttest publishSet on off switch:on,off level:slider,0,1,100 /topic/123

Hierdurch entstehen im DeviceOverview ein on und eine off Taster und eine Lampe zum signalisieren des Zustandes (reading switch). Beim Betaetigen des on oder off Tasters wird eine Nachricht on bzw. off an den Topic '/topic/123' gepublished. Achtung das "Root-Slash" gehoert da nicht hin! Vom Original habe ich es hier so falsch uebernommen. Der slider muss in diesem Fall mit set ausgeloest werden und uebermittelt den jeweils eingestellten Wert an den Broker und an das Reading level.