Skip to content

MQTT Server

Mathias edited this page Aug 15, 2023 · 5 revisions

Beschreibung des MQTT-Severs

Der CCU-Jack enthält einen vollwertigen und leistungsfähigen MQTT-Server (V3.1.1). Dieser kann von beliebigen Fremdapplikationen zum Datenaustausch mit der CCU oder untereinander genutzt werden. Zudem werden die Wertänderungen aller Gerätedatenpunkte der CCU und ausgewählter Systemvariablen automatisch an den MQTT-Server gesendet und stehen daraufhin allen MQTT-Clients zur Verfügung. Die Netzwerk-Ports können mit den Optionen MQTT.Port und MQTT.PortTLS eingestellt werden. Ein Zugriff über Web-Sockets ist über den Pfad /ws-mqtt des HTTP(S)-Servers möglich.

Um das MQTT-Protokoll hat sich ein großes Ökosystem gebildet. Eine Übersicht ist in dieser Link-Sammlung zu finden.

Die Topic-Struktur ist an mqtt-smarthome angelehnt und wie folgt aufgebaut:

Topic Beschreibung
device/status/Seriennr./Kanalnr./Parametername Unter diesem Topic werden die Wertänderungen aller Gerätedatenpunkte bekanntgegeben.
device/set/Seriennr./Kanalnr./Parametername Über dieses Topic können Gerätedatenpunkte gesetzt werden.
virtdev/status/Seriennr./Kanalnr./Parametername Unter diesem Topic werden die Wertänderungen aller Datenpunkte der virtuellen CCU-Jack-Geräte bekanntgegeben.
virtdev/set/Seriennr./Kanalnr./Parametername Über dieses Topic können Datenpunkte der virtuellen CCU-Jack-Geräte gesetzt werden.
sysvar/status/ISE-ID Unter diesem Topic werden die Wertänderungen von Systemvariablen bekanntgegeben, wenn die Systemvariablenbeschreibung in der CCU das Schlüsselwort MQTT enthält, oder vorher an das Topic sysvar/get/ISE-ID gesendet wurde.
sysvar/set/ISE-ID Über dieses Topic können Systemvariablen gesetzt werden.
sysvar/get/ISE-ID Über dieses Topic kann das Lesen einer Systemvariablen angestoßen werden. Der aktuelle Wert wird dann unter dem Topic sysvar/status/ISE-ID bekanntgegeben.
program/set/ISE-ID Über dieses Topic können Programme auf der CCU gestartet werden. Es muss der boolesche Wert true gesendet werden.
program/status/ISE-ID Unter diesem Topic wird der letzte Ausführungszeitpunkt eines Programms bekanntgegeben, wenn vorher an das Topic program/get/ISE-ID gesendet wurde.
program/get/ISE-ID Über dieses Topic kann das Lesen des letzten Ausführungszeitpunktes eines Programs angestoßen werden. Der aktuelle Wert wird dann unter dem Topic program/status/ISE-ID bekanntgegeben.

Die Topics entsprechen bis auf den Dienstbestandteil (status, set oder get) den VEAP-Adressen. Die VEAP-Adresse wird oben im Navigator angezeigt. Bei den Datenpunkteigenschaften werden die Topics unter mqttStatusTopic, mqttSetTopic und mqttGetTopic angezeigt. Das Set-Topic wird nur bei beschreibbaren Datenpunkten angezeigt.

Systemvariablen, die in der Beschreibung (EinstellungenSystemvariablen) das Schlüsselwort MQTT (Groß-/Kleinschreibung egal) enthalten, werden zyklisch alle 3 Sekunden gelesen und, falls sich der Wert oder Zeitstempel geändert hat, wird dieser über MQTT versendet. Die Beschreibung der Systemvariablen wird beim Start und dann alle 30 Minuten gelesen. 300 Millisekunden nach dem Setzen einer Systemvariablen über MQTT wird der aktuelle Wert automatisch nochmals gelesen und per MQTT versendet.

Konfiguration einer Systemvariable für automatische MQTT-Übertragung:

MQTT-Systemvariable

Das Nachrichtenformat ist JSON und entspricht dem Format des VEAP-Protokolls. Beispiel: {"v":123.456,"ts":1483228800000,"s":0}

Für das Setzen von Datenpunkten wird nur die Eigenschaft v benötigt. Beispiele: {"v":123.456} für Variablentyp Zahl, {"v":2} für Typ Werteliste, {"v":true} für Typ Logikwert/Alarm oder {"v":"ABC"} für Typ Zeichenkette. Falls ein JSON-Objekt mit anderen Eigenschaften oder direkt ein JSON-Wert verwendet wird, so wird dies für den Wert des Datenpunktes verwendet, z.B. 123.456, true oder "abc". Falls die Nachricht kein gültiges JSON enthält, so wird die gesamte Nachricht als Zeichnkette verwendet, z.B. abc.

Die Retain-Eigenschaft wird bei allen Datenpunkten gesetzt, außer der Parametername ist INSTALL_TEST oder beginnt mit PRESS_.

Hinweis: Homematic IP Sender (z.B. Taster) senden erst Benachrichtigungen an die CCU und damit an den CCU-Jack, wenn sie in einem CCU-Programm verwendet werden. Gegebenenfalls müssen sie also in einem funktionslosen CCU-Programm als Auslöser angegeben werden. (Stichwort: reportValueUsage)

Die Abbildung der CCU-Datentypen auf JSON ist im in einem gesonderten Abschnitt beschrieben.