Skip to content

MQTT Bridge

mdzio edited this page Mar 19, 2022 · 6 revisions

MQTT-Brücke (-Bridge) zu anderen Servern

Der CCU-Jack kann eine Verbindung zu anderen MQTT-Servern bzw. anderen CCUs mit installiertem CCU-Jack aufbauen. Dies ermöglicht vielfältige Anwendungsmöglichkeiten:

  • Senden aller Wertänderungen von allen oder bestimmten CCU-Datenpunkte an einen externen MQTT-Server
  • Empfang von Steuersignalen von einem externen MQTT-Server
  • Direkte Kopplung von zwei oder mehr CCUs
  • Kopplung von zwei oder mehr CCUs über einen zentralen MQTT-Server

Durch die virtuellen MQTT-Geräte des CCU-Jacks können beliebige MQTT-Nachrichten erzeugt werden und auch auf beliebige MQTT-Nachrichten reagiert werden. Die virtuellen Geräte können direkt in CCU-Programmen angesteuert und auch abgefragt werden.

Es kann nur eine Brücke zu einem anderen Server aufgebaut werden. Eine Vernetzung von mehreren MQTT-Severn kann über eine Baumstruktur oder einem zentralen Server erfolgen. Eine verschlüsselte Verbindung mit TLS zu einem anderen MQTT-Server ist noch nicht möglich.

Konfiguration

Für die MQTT-Brücke müssen die Verbindung zu dem zweiten MQTT-Server, die eingehenden und die ausgehenden Topics konfiguriert werden. Zurzeit erfolgt die Konfiguration in der Datei ccu-jack.cfg (siehe dazu auch Add-On Installationsdetails und CCU-Dateitransfer und Konsolenzugriff). Die Konfigurationsdatei darf nur geändert werden, wenn der CCU-Jack gestoppt ist.

Konfigurationsoption Bedeutung
MQTT.Bridge.Enable Ein- oder Ausschalten der MQTT-Brücke (true oder false)
MQTT.Bridge.Address IP-Adresse oder Host-Name des entfernten MQTT-Servers
MQTT.Bridge.Port Port des entfernten MQTT-Servers
MQTT.Bridge.Username Benutzername für den entfernten MQTT-Severs
MQTT.Bridge.Password Passwort für den entfernten MQTT-Severs
MQTT.Bridge.ClientID Identifizierung des lokalen MQTT-Clients
MQTT.Bridge.CleanSession Sitzungsdaten löschen (s.a. MQTT-Spezifikation)
MQTT.Bridge.Incoming Eingehende Topics (siehe unten)
MQTT.Bridge.Outgoing Ausgehende Topics (siehe unten)

Dies ist ein Konfigurationsbeispiel. Es sind nur Optionen aufgelistet, die für die Konfiguration der MQTT-Brücke relevant sind:

{
  "MQTT": {
    "Bridge": {
      "Enable": true,
      "Address": "192.168.0.100",
      "Port": 1883,
      "Username": "Benutzername",
      "Password": "Passwort",
      "ClientID": "Haupt-CCU",
      "CleanSession": true,
      "Incoming": [],
      "Outgoing": []
    }
  }
}

Konfiguration der eingehenden und ausgehenden Topics

Mit den Konfigurationseigenschaften MQTT.Bridge.Incoming und MQTT.Bridge.Outgoing wird festgelegt, welche lokalen Topics an den entfernten Server versendet und welche Topics vom entfernten MQTT-Server empfangen werden sollen. Jeder Eintrag in MQTT.Bridge.Incoming bzw. Outgoing muss folgende Eigenschaften besitzen:

Eigenschaft Bedeutung
Pattern MQTT-Suchmuster (optional mit den Platzhaltern # und +)
LocalPrefix Lokales Präfix für die Topics
RemotePrefix Präfix für die Topics vom entfernten MQTT-Server
QoS Quality-of-Service (0, 1, oder 2; s.a. MQTT-Spezifikation)

Eingehende Topics werden wie folgt behandelt:

Auf dem entfernten MQTT-Server wird das Topic aus den Eigenschaften RemotePrefix und Pattern zusammengesetzt und abonniert. Bei der Übertragung wird das RemotePrefix durch das LocalPrefix ersetzt. Auf dem lokalen MQTT-Server wird nun die MQTT-Nachricht mit dem geänderten Topic publiziert.

Ausgehende Topics werden wie folgt behandelt:

Auf dem lokalen MQTT-Server wird das Topic aus den Eigenschaften LocalPrefix und Pattern zusammengesetzt und abonniert. Bei der Übertragung wird das LocalPrefix durch das RemotePrefix ersetzt. Auf dem entfernten MQTT-Server wird nun die MQTT-Nachricht mit dem geänderten Topic publiziert.

Die eingehenden und ausgehenden Topics dürfen sich nicht überlappen, da ansonsten eine MQTT-Nachricht unendlich zwischen den Servern hin und her geschickt wird.

Beispiel

Im folgenden Konfigurationsbeispiel werden alle Topics einer zweiten CCU abonniert und erscheinen mit dem Präfix remote-ccu/recv/ auf dem lokalen MQTT-Server. Werden auf dem lokalen Server MQTT-Nachrichten mit dem Topic-Präfix remote-ccu/send/ publiziert, so erscheinen sie auf dem entfernten Server ohne dieses Präfix.

{
  "MQTT": {
    "Bridge": {
      "Incoming": [
        {
          "Pattern": "#",
          "LocalPrefix": "remote-ccu/recv/",
          "RemotePrefix": "",
          "QoS": 0
        }
      ],
      "Outgoing": [
        {
          "Pattern": "#",
          "LocalPrefix": "remote-ccu/send/",
          "RemotePrefix": "",
          "QoS": 0
        }
      ]
    }
  }
}

Clone this wiki locally