Ein MQTT Client für IP-Symcon, der auf zwei Arten genutzt werden kann. Der Client kann entweder per Datenfluss mit einem eigenen Modul verbunden werden oder er kann ein vorgegebenes Script aufrufen.
- mindestens IPS Version 5.0
- MQTTClient
Über den IP-Symcon Module Store.
Wenn der Modul Typ auf "Script" steht, dann muss dem Modul ein Handle Script zugeordnet werden, welches die eingehenden Nachrichten verarbeitet.
Beispiel:
if($_IPS['SENDER']=='MQTT_CONNECT') {
MQTT_Subscribe(12345 /*[MQTTClient]*/, '#', 0); //InstanzID muss angepasst werden.
}
if($_IPS['SENDER']=='MQTT_GET_PAYLOAD') {
IPS_LogMessage('MQTT Topic', print_r($_IPS['Topic'],true));
IPS_LogMessage('MQTT Payload', print_r($_IPS['Payload'],true));
}
Mit diesem Handle Script würde beim Connect alles abonniert werden, was der MQTT Broker versendet. Es werden alle Nachrichten in das Log von IP-Symcon geschrieben.
Bezeichnung | GUID |
---|---|
GUID vom MQTTClient (Splitter) | {EE0D345A-CF31-428A-A613-33CE98E752DD} |
TX | {97475B04-67C3-A74D-C970-E9409B0EFA1D} |
RX | {DBDA9DF7-5D04-F49D-370A-2B9153D00D9B} |
Wenn der Modul Typ Forward aktiviert ist, kann über die Konfigurationsoption "Nach Verbindungsaufbau automatisch # abonnieren" automatisch das Topic # abonniert werden. Dies stellt im wesentlichen die Rückwärtskompatibilität zu älteren Modulen her.
Um von einem Child Modul eine Subscription auszulösen kann vom Child Modul folgendender Befehl an den Parent (MQTTClient) gesendet werden:
$cmd = json_encode([
'Function' => 'Subscribe',
'Topic' => 'topic/to/subsribe'
]);
$json = json_encode([
'DataID' => '{97475B04-67C3-A74D-C970-E9409B0EFA1D}',
'Buffer' => utf8_encode($cmd)
]);
parent::SendDataToParent($json);
um zu publishen kann folgender Code verweendet werden:
$cmd = json_encode([
'Function' => 'Publish',
'Topic' => 'topic/to/publish',
'Payload' => 'Payload',
'Retain' => 0
]);
$json = json_encode([
'DataID' => '{97475B04-67C3-A74D-C970-E9409B0EFA1D}',
'Buffer' => utf8_encode($cmd)
]);
parent::SendDataToParent($json);
Fehlt die Angabe der "Function" so wird wie in alten Versionen ein Publish gesendet.
Durch aktivieren der TLS Option wird nach dem Verbindungsaufbau ein TLS Handshake durchgeführt. Dies basiert auf der PTLS Library (Copyright (c) 2016 Ryohei Nagatsuka) welches dem HomeConnectSymcon Modul entnommen ist.
Ist das Ping Intervall > 0 wird alle X Sekunden ein MQTT PINGREQ gesendet
Das zugrunde liegende phpMQTT Modul beherrscht nur die MQTT Version 3.1 - dies wurde um die Version 3.1.1 erweitert. Über die Konfiguration kann man auswählen welche Version genutzt werden soll (beim Handshake).
Die Erweiterung auf 3.1.1 wurde nicht intensiv getestet, funktioniert aber für die Basisfunktionen Subscribe und Publish augenscheinlich zuverlässig (die Protokollunterschiede scheinen auch marginal zu sein).
MQTTC_Publish(string $Topic, string $payload, $qos, $retain)
$topic = 'Licht1';
$payload = 'ON';
MQTTC_Publish(12345 /*[MQTTClient]*/, $topic, $payload, 0, 0); //InstanzID muss angepasst werden.
Mit diesem Beispiel wird a ndas Topic Licht1 das Paylaod ON gesendet.
MQTTC_Subscribe(string $Topic, $qos)
$topic = '#';
$qos = 0;
MQTT_Subscribe(12345 /*[MQTTClient]*/, '#', 0); //InstanzID muss angepasst werden.
Mit diesem Beispiel würde alles abonniert werden, was der MQTT Broker versendet.
Dieses Modul ist für die nicht kommzerielle Nutzung kostenlos, Schenkungen als Unterstützung für den Autor werden hier akzeptiert:
Dieses Modul ist ursprünglich von thomasf68 (https://github.com/thomasf68/IPS_MQTT) entwickelt worden. Ich habe dieses Modul verändert, damit es mit der aktuellen IP-Symcon Version läuft. Überflüssigen Code, der nicht verwendet wurde, habe ich entfernt.