Skip to content

Schnittcher/MQTTClient

 
 

Repository files navigation

Version Version License Check Style

MQTTClient

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.

Inhaltverzeichnis

  1. Voraussetzungen
  2. Enthaltene Module
  3. Installation
  4. Konfiguration in IP-Symcon
  5. Funktionen
  6. Spenden
  7. Lizenz

1. Voraussetzungen

  • mindestens IPS Version 5.0

2. Enthaltene Module

  • MQTTClient

3. Installation

Über den IP-Symcon Module Store.

4. Konfiguration in IP-Symcon

4.1 Modul Typ: Script

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.

4.2 Modul Typ: Forward

GUIDs

Bezeichnung GUID
GUID vom MQTTClient (Splitter) {EE0D345A-CF31-428A-A613-33CE98E752DD}
TX {97475B04-67C3-A74D-C970-E9409B0EFA1D}
RX {DBDA9DF7-5D04-F49D-370A-2B9153D00D9B}

Auto Subscribe

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.

Subscribe durch Modul

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.

4.3 TLS

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.

4.4 Ping Intervall

Ist das Ping Intervall > 0 wird alle X Sekunden ein MQTT PINGREQ gesendet

4.5 MQTT Version

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).

5 Funktionen

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.

6. Spenden

Dieses Modul ist für die nicht kommzerielle Nutzung kostenlos, Schenkungen als Unterstützung für den Autor werden hier akzeptiert:

7. Lizenz

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.

CC BY-NC-SA 4.0

About

MQTT Modul für IP-Symcon 5.0

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 99.8%
  • Shell 0.2%