(FHEM) 10 MQTT DEVICE.pm: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „ Ein MQTT_DEVICE fungiert als fhem-device, das mqtt-topics zugeordnet ist. '''Define''' define <name> MQTT_DEVICE '''Set''' set <name> <command> NICHT in der…“) |
(→#9) |
||
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | Ein MQTT_DEVICE fungiert als fhem-device, das mqtt-topics zugeordnet ist. | + | ==10_MQTT_DEVICE== |
+ | [[(FHEM) MQTT#Module im Detail| [Zurueck Uebersicht] ]] | ||
+ | |||
+ | Ein MQTT_DEVICE fungiert als fhem-device, das mqtt-topics zugeordnet ist. | ||
+ | |||
+ | =Steckbrief= | ||
'''Define''' | '''Define''' | ||
− | define <name> MQTT_DEVICE | + | 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''' | ||
− | set <name> <command> | + | set <name> <command> z.B. on oder off; erst nach der Anlage durch Attribut in der Detail-Ansicht vorhanden. |
− | set <name> <reading> <value> | + | set <name> <reading> <value> erst nach der Anlage durch Attribut in der Detail-Ansicht vorhanden. |
− | set extensions | + | set extensions erst nach der Anlage durch Attribut in der Detail-Ansicht vorhanden. |
'''Get''' | '''Get''' | ||
| | ||
Zeile 17: | Zeile 28: | ||
attr <name> retain <flags> ... | attr <name> retain <flags> ... | ||
attr <name> qos <flags> ... | attr <name> qos <flags> ... | ||
− | attr <name> useSetExtensions <flags> | + | attr <name> useSetExtensions [0|1] |
+ | |||
+ | =Erlaeuterungen= | ||
+ | Aus dem [https://forum.fhem.de/index.php?topic=27532.0 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== | ||
+ | <pre> | ||
+ | define licht_kinderzimmer MQTT_DEVICE <IODev> | ||
+ | attr licht_kinderzimmer publishSet on off fhem/kinderzimmer/licht | ||
+ | attr licht_kinderzimmer subscribeReading_state fhem/kinderzimmer/licht/set | ||
+ | </pre> | ||
+ | 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== | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | ==#3== | ||
+ | <pre> | ||
+ | attr heizung_kinderzimmer autoSubscribeReadings fhem/kinderzimmer/+/set | ||
+ | </pre> | ||
+ | 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== | ||
+ | <pre> | ||
+ | attr mqttest publishSet on off switch:on,off level:slider,0,1,100 /topic/123 | ||
+ | </pre> | ||
+ | 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. | ||
+ | |||
+ | ==#5== | ||
+ | <pre> | ||
+ | attr MQTT_DEVICE_Test publishSet_trigger 1 home/basement/0_terrace/awning/trigger | ||
+ | </pre> | ||
+ | |||
+ | Hier wird trigger (Ergaenzung von publishSet_) als Auswahl und Reading uebernommen. Die Auswahl kann man einschraenken indem man durch Leerzeichen getrennt die Optionen anhaengt. Die Bedeutung des * ist mir nicht klar. Ich haette hier erwartet, dass man damit den Defaultwert der Combobox (Select) beeinflussen kann. Am Ende steht noch der Topic wohin geschickt werden soll. | ||
+ | |||
+ | ==#6== | ||
+ | <pre> | ||
+ | attr MQTT_DEVICE_Test autoSubscribeReadings home/basement/0_terrace/awning | ||
+ | </pre> | ||
+ | Hier wird deutlich, dass ich mir abgewoehnen muss in einen Topic mehrere Wertepaare zu publishen. Ich habe zum Beipiel das gemacht: | ||
+ | |||
+ | home/basement/0_terrace/awning/ ALIVE 2022-08-10T17:41:04+0800 | ||
+ | home/basement/0_terrace/awning/ RSSI -80 | ||
+ | |||
+ | Das raecht sich jetzt. Abgesehen davon, dass hier keine Leerzeichen in Topic verarbeitet werden koennen, funktioniert so die richtige Zuordnung der Readings nicht. Also in Zukunft nur noch ein Wert pro Topic (Brian;-) und der letzte Eintrag des Topics ist der Name des Wertes. Allerdings hat das autoSubscribeReading auch Probleme mit | ||
+ | home/basement/0_terrace/awning/state 0 0 0 | ||
+ | |||
+ | Und selbst nach der Anpassung im Pub-Client funktioniert autosubscribe nicht so richtig. | ||
+ | |||
+ | ==#7== | ||
+ | attr mqttest retain 0 | ||
+ | defines retain 0 for all readings/topics (due to downward compatibility) | ||
+ | attr mqttest retain *:0 1 test:1 | ||
+ | defines retain 0 for all readings/topics except the reading 'test'. Retain for 'test' is 1 | ||
+ | |||
+ | Das mit der 1 im zweiten Beispiel ist irgendwie Murks. Laut Beschreibung soll das ein Ausschluss im Sinne von "auszer" bewirken. Im zweiten Beispiel also * (alle) auf retain 0 1 (auszer) test auf 1 | ||
+ | |||
+ | ==#8== | ||
+ | attr <name> qos <flags> ... | ||
+ | |||
+ | Hier gilt die gleiche (merkwuerdige) Schreibweise wie bei retain. | ||
+ | Specifies the QOS flag for all or specific readings. Possible values are 0, 1 or 2. Constants may be also used: at-most-once = 0, at-least-once = 1, exactly-once = 2 | ||
+ | |||
+ | |||
+ | ==#9== | ||
+ | |||
+ | attr MQTT_DEVICE_Test setExtensions 1 | ||
+ | |||
+ | Schalten die Extensions im set Kommando ein, die da waeren: | ||
+ | *on-for-timer <seconds> | ||
+ | *off-for-timer <seconds> | ||
+ | *on-till <timedet> bei der Angabe timedet HH:MM:SS ist SS optinal also eigentlich HH:MM:[SS] und wird per default auf 00 gestezt. | ||
+ | *on-till-overnight <timedet> | ||
+ | *off-till-overnight <timedet> | ||
+ | *blink <number> <blink-period> die Periode bezieht sich auf die Ein- und Auschaltzeit (blink requires count as integer and duration as float )Kommazahlen werden mit Punkt eingegeben. | ||
+ | *intervals <from1>-<till1> <from2>-<till2>... | ||
+ | *toggle wechselt in den gegeteiligen Zustand aus 'off' wird 'on' und aus 'on' wird 'off'. Ein Dimmwert wird als 'on' interpretriert und fuehrt zum 'off' | ||
+ | |||
+ | set switch on-for-timer 12.5 | ||
+ | set switch on-till {sunset()} | ||
+ | set switch blink 3 1 | ||
+ | set switch intervals 08:00-12:00 13:00-18:00 |
Aktuelle Version vom 10. August 2022, 12:56 Uhr
Inhaltsverzeichnis
10_MQTT_DEVICE
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 [0|1]
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.
#5
attr MQTT_DEVICE_Test publishSet_trigger 1 home/basement/0_terrace/awning/trigger
Hier wird trigger (Ergaenzung von publishSet_) als Auswahl und Reading uebernommen. Die Auswahl kann man einschraenken indem man durch Leerzeichen getrennt die Optionen anhaengt. Die Bedeutung des * ist mir nicht klar. Ich haette hier erwartet, dass man damit den Defaultwert der Combobox (Select) beeinflussen kann. Am Ende steht noch der Topic wohin geschickt werden soll.
#6
attr MQTT_DEVICE_Test autoSubscribeReadings home/basement/0_terrace/awning
Hier wird deutlich, dass ich mir abgewoehnen muss in einen Topic mehrere Wertepaare zu publishen. Ich habe zum Beipiel das gemacht:
home/basement/0_terrace/awning/ ALIVE 2022-08-10T17:41:04+0800 home/basement/0_terrace/awning/ RSSI -80
Das raecht sich jetzt. Abgesehen davon, dass hier keine Leerzeichen in Topic verarbeitet werden koennen, funktioniert so die richtige Zuordnung der Readings nicht. Also in Zukunft nur noch ein Wert pro Topic (Brian;-) und der letzte Eintrag des Topics ist der Name des Wertes. Allerdings hat das autoSubscribeReading auch Probleme mit
home/basement/0_terrace/awning/state 0 0 0
Und selbst nach der Anpassung im Pub-Client funktioniert autosubscribe nicht so richtig.
#7
attr mqttest retain 0 defines retain 0 for all readings/topics (due to downward compatibility) attr mqttest retain *:0 1 test:1 defines retain 0 for all readings/topics except the reading 'test'. Retain for 'test' is 1
Das mit der 1 im zweiten Beispiel ist irgendwie Murks. Laut Beschreibung soll das ein Ausschluss im Sinne von "auszer" bewirken. Im zweiten Beispiel also * (alle) auf retain 0 1 (auszer) test auf 1
#8
attr <name> qos <flags> ...
Hier gilt die gleiche (merkwuerdige) Schreibweise wie bei retain. Specifies the QOS flag for all or specific readings. Possible values are 0, 1 or 2. Constants may be also used: at-most-once = 0, at-least-once = 1, exactly-once = 2
#9
attr MQTT_DEVICE_Test setExtensions 1
Schalten die Extensions im set Kommando ein, die da waeren:
- on-for-timer <seconds>
- off-for-timer <seconds>
- on-till <timedet> bei der Angabe timedet HH:MM:SS ist SS optinal also eigentlich HH:MM:[SS] und wird per default auf 00 gestezt.
- on-till-overnight <timedet>
- off-till-overnight <timedet>
- blink <number> <blink-period> die Periode bezieht sich auf die Ein- und Auschaltzeit (blink requires count as integer and duration as float )Kommazahlen werden mit Punkt eingegeben.
- intervals <from1>-<till1> <from2>-<till2>...
- toggle wechselt in den gegeteiligen Zustand aus 'off' wird 'on' und aus 'on' wird 'off'. Ein Dimmwert wird als 'on' interpretriert und fuehrt zum 'off'
set switch on-for-timer 12.5 set switch on-till {sunset()} set switch blink 3 1 set switch intervals 08:00-12:00 13:00-18:00