Skip to end of metadata
Go to start of metadata
Autor
Logo

icon_64.png

Status

RELEASE

Version0.8.3
Min. LB Version

LB 1.4.0

Download

Release: https://github.com/christianTF/LoxBerry-Plugin-MQTT-Gateway/archive/0.8.3.zip

Pre-Release: -

ZweckInstalliert den MQTT-Broker Mosquitto und stellt ein MQTT-Gateway für den Miniserver bereit.
LanguagesEN
Diskussionhttps://www.loxforum.com/forum/projektforen/loxberry/plugins/176025-loxberry-mqtt
 Version History...

Version 0.1.1

  • DEVELOPER PREVIEW - Nur einsetzen mit MQTT und Linux-Kenntnissen - Fehler ausschließlich per Issue bei GitHub
  • Stellt ein MQTT→Loxone Gateway bereit

Version 0.1.2

  • DEVELOPER PREVIEW - Nur einsetzen mit MQTT und Linux-Kenntnissen - Fehler ausschließlich per Issue bei GitHub
  • Implementiert ein UDP-Interface für Loxone→MQTT

Version 0.1.3

  • DEVELOPER PREVIEW - Nur einsetzen mit MQTT und Linux-Kenntnissen - Fehler ausschließlich per Issue bei GitHub
  • Eigene UI-Sektion für MQTT Broker
  • Authentifizierung für MQTT Broker
  • Lokaler Mosquitto abschaltbar
  • Retry für den Mosquitto Service, wenn er beim Systemstart nicht automatisch gestartet wurde
  • MQTT Gateway wird direkt nach der Installation gestartet
  • Parameter-Update-Routine zum Hinzufügen von neuen Default-Parametern während der Installation

Version 0.1.4

  • DEVELOPER PREVIEW - Nur einsetzen mit MQTT und Linux-Kenntnissen - Fehler ausschließlich per Issue bei GitHub
  • UI: Expand JSON Option hinzugefügt
  • Gateway: JSON wird bei HTTP expandiert (nur erster Level) und beim HTTP-Namen angehängt - EXPERIMENTELL
  • Gateway: Alle übermittelten Topics werden im Speicher behalten (max. 24 Stunden)
  • UI: Funktion zum Abfragen der gespeicherten Gateway-Topics (wird aber noch nicht dargestellt)

Version 0.1.5

  • DEVELOPER PREVIEW - Nur einsetzen mit MQTT und Linux-Kenntnissen - Fehler ausschließlich per Issue bei GitHub
  • UI: Größerer Umbau des UI (Settings, Subscriptions, Conversions, Incoming Overview, Logfiles) als Navbar
  • UI: Subscriptions jetzt als eigene Seite (leichter anzupassen, man muss nicht immer auf- und abscrollen für Apply)
  • UI: Conversions: Angabe von Strings, die zu Werten konvertiert werden sollen (Loxone kann mit Strings nichts anfangen)
  • UI: Incoming Overview: Anzeige der an den Miniserver übermittelten Werte
  • UI: Logs: Inline-Anzeige der Logfile-Übersicht
  • Gateway: Benutzerdefinierte Conversion (eingehende Nachrichten können in Werte konvertiert werden)
  • Gateway: Logfile: Parsing der Conversion wird geloggt, inklusive "komischer" Werte und Duplikate
  • Gateway: Logfile wird beim Beenden des Gateways sauber abgeschlossen

Version 0.2.0 PRE-RELEASE

  • Erster Pre-Release
  • Allgemein: Neues Logo (MQTT-Logo statt Mosquitto-Logo)
  • Gateway: Besseres Fehlerhandling beim Restart des Gateways
  • UI: Filter bei den übermittelten Nachrichten (erleichtert die Suche)
  • Donation: Erster Versuch, per Spende einen eigenen Test-Miniserver zusammen zu bekommen

Version 0.3 PRE-RELEASE

  • Lokale Mosquitto-Authentifizierung als Standard (Benutzer: loxberry, Passwort: wird generiert)
  • Broker-Anmeldedaten werden nur dann geladen, wenn der SecurePIN angegeben wird
  • Ermöglicht direkt, die lokalen Mosquitto-Anmeldedaten zu ändern oder zu deaktivieren
  • Änderung der Anmeldedaten eines nicht lokalen Brokers ändert nur die Anmeldung des Gateways
  • Änderung der Konfiguration übernimmt diese sofort für das MQTT Gateway und/oder Mosquitto

Version 0.3.1 PRE-RELEASE

  • Fix: Bei anonymer Verwendung von Mosquitto startet der Mosquitto-Dienst nach Reboot nicht mehr
  • Aktivierung von Plugin AutoUpdate (ab dieser Version können Versions-Notifications oder automatisches Update aktiviert werden)

Version 0.4.1 PRE-RELEASE

  • Fix: Nach Konfigurationsänderungen und "Apply" wurden diese nicht übernommen
  • Neu: Per UDP eingehende Nachrichten werden vollständig weitergegeben (so können beispielsweise auch json Nachrichten gesendet werden)
  • Neu: Das Gateway published seinen Connection-Status selbst unter dem Topic <hostname>/mqttgateway/status
  • Neu: Das Gateway published im Minutentakt den aktuellen Epoch-Timestamp.
  • Neu: Das Gateway subscribed sich selbst automatisch - so kann der Timestamp als Prüfung verwendet werden, ob das Gateway noch funktioniert
  • Neu: Unterstützt Last Will and Testament (d.h. Broker setzt den Status auf Disconnected, wenn das Gateway stirbt)
  • Neu: UDP-Nachrichten können mit publish oder retain gesendet werden
  • Neu: UDP-Nachricht "reconnect" forciert das Neu-Verbinden und Übertragen an den Miniserver
  • Neu: Default-UDP-In-Port am Gateway: 11884 (bisher 11883)

Version 0.5.0 PRE-RELEASE

  • Fix: Evt. falsche Auswertung der Checkboxen im UI (#5)
  • Erweitert: JSON Expansion: Vollständig generische Expandierung ohne Einschränkung auf die Hierarchie
  • Erweitert: JSON Expansion für HTTP und UDP

Version 0.5.1 PRE-RELEASE

  • Fix: JSON expansion not working

Version 0.6.0 PRE-RELEASE

  • FIX: Anonymous connection was still possible with password auth (after installation, please save once to fix)
  • Enhanced: Incoming Overview: Now is a live visualisation of the topic messages (updated once a second, without browser refresh)
  • Enhanced: Incoming Overview: Enable advanced infos to show the original topics, and to delete messages on the broker
  • Info for delete event: The data in the overview may not disappear, as the last transmission with "last sent to Miniserver" is still valid

Version 0.7.1 RELEASE

  • FIX: Json expansion for UDP only worked when HTTP was enabled
  • Added: Overview now shows ready-to-use command recognition for UDP inputs
  • Added: Subscription topics are now validated on-the-fly (errors are displayed on the left)

Version 0.8.0 PRE-RELEASE

  • FIX: Password was re-created on every update
  • New: mosquitto.log on the Logfiles tab
  • New: TLS-PSK for encrypted connections, listening on port 8883
  • New: In the Incoming Overview, with Advanced Table Info enabled, you can disable caching for selected data, and enable Reset-After-Send
    • Disable Cache: Every incoming value from MQTT will be sent again, also if it has not changed.
    • Reset-After-Send: This is especially useful to generate impulses/triggers, if your device e.g. on a keypress does not send "pressed" and "released" events, but only one "pressed" impulse. Reset-After-Send will send a 0 after each incoming event.
    • UI: Enabling and disabling the checkbox responses with some seconds delay - the checkbox toggles back and after some seconds, shows the currently set value.
  • Requires LoxBerry V1.4.0+

Version 0.8.1 RELEASE

  • Incoming values are trimmed (removed leading and terminating blanks) to work with the Text-To-Value Conversion.

Version 0.8.2 PRE-RELEASE

  • Updated Perl Net::MQTT::Simple lib to 1.23
  • Corrects a connection issue of the lib to Mosquitto with version higher V1.5.8

Version 0.8.3 RELEASE

  • Performance improvements for the Incoming Overview
    • Close HTTP collapsible if UDP is opened, and vice-versa
    • Only render opened collapsible
    • Optimized updating HTML table
    • Update interval of the Overview is calculated dependent to the number of elements
    • "Advanced Table View" checkboxes now are viewed in classic design instead of jQuery Mobile style

Inhalt



Download

Der direkte Download des Releases befindet sich in der Tabelle oben.

Repository: https://github.com/christianTF/LoxBerry-Plugin-MQTT-Gateway

Kommunikationsdiagramm

(Anklicken zum Vergrößern)

Sieh dir links im Navigationsbaum weiterführende Artikel zu MQTT an, um die Funktionsweise besser zu verstehen.

Begriffserklärung

Ein "Broker" ist ein Dienst, der als Vermittler von Nachrichten dient. Der Broker speichert auch den aktuellen Zustand aller angeschlossenen Geräte. Das Plugin installiert automatisch am LoxBerry den Mosquitto MQTT Broker als Vermittler. Über die Konfiguration kann auch ein Broker auf einem anderen Server angegeben werden. Das Plugin unterstützt Authentifizierung, jedoch keine Verschlüsselung zum Broker.

Ein "Server" ist in der Begrifflichkeit von MQTT jedes Gerät, das Daten einliefert. Beispielsweise sind die Shelly's MQTT-Server, die Daten an den Broker übermitteln.

Ein "Client" ist jede Software, die sich mit dem Broker verbindet und dort Stati abfragt, Befehle sendet bzw. auf Statusänderungen lauscht. Dieses Plugin ist so ein Client, der zum Broker verbindet und sich Statusaktualisierungen abonniert (subscribed). Ist vom Client ein MQTT-Topic abonniert, werden Daten dieses Topics vom Broker an diesen Client zur Verarbeitung weitergeleitet.

Funktion des Plugins

Das Plugin installiert zuerst automatisch den Mosquitto MQTT Broker (Hostname "localhost"). Erfahrene Benutzer können auch eine Verbindung zu einem anderen Broker einrichten. Das Plugin unterstützt kein TLS zum MQTT-Broker.

Das Plugin fungiert dann als Client an diesem MQTT-Broker, und leitet MQTT-Nachrichten an den Miniserver weiter, sowie empfängt Nachrichten vom Miniserver und leitet diese an den MQTT-Broker. Über das Webinterface können Topics abonniert werden. Die abonnierten Topics werden wahlweise per UDP, oder per HTTP Webservice an den eingestellten Miniserver übermittelt. 

Das Senden von Nachrichten vom Miniserver an MQTT geht am besten per UDP.

Schnell-Konfiguration am Beispiel eines Shelly 2


MQTT an Loxone Miniserver

Einstellungen

EinstellungStandardBeschreibung
MiniserverErster MiniserverDie abonnierten Daten werden an diesen Miniserver gesendet.
Miniserver-UDP-Port11883Ist UDP aktiviert, werden Nachrichten an diesen UDP-Port des Miniservers übermittelt.
Per REST Webservice übermitteln

Ressourcenschonender als UDP!

Die Nachricht wird direkt per HTTP-REST Webservice an den Miniserver übertragen. Dafür müssen selbst entsprechende Virtuelle Eingänge mit exakt dem hier dokumentierten Namen verwendet werden. Das Plugin verwendet die Nachricht als Bezeichnung für den Eingang, wobei / in _ konvertiert werden:

shellies/shelly-12345/relay/1 wird zu shellies_shelly-12345_relay_1

Schau ins Logfile, dort werden die Bezeichnungen angezeigt.

Per UDP übermitteln

Nachrichtenformat (für die Befehlserkennung):

MQTT: shellies/shelly-12345/relay/1=off (oder =0)

Befehlserkennung: MQTT: shellies/shelly-12345/relay/1=\v

Booleans konvertierenEinIn MQTT werden häufig Strings bei der Nachricht verwendet, beispielsweise "off" oder "on". Das Plugin konvertiert als Booleans identifizierte Strings in die Werte 0 oder 1. Strings, die erkannt werden, siehe LoxBerry::System::is_enabled bzw. LoxBerry::System::is_disabled
JSON expandieren

Werden JSON-Daten übertragen, wird die JSON-Struktur expandiert und an den http-Namen angehängt.

Topic/abcde={"action":"on","linkquality":39} wird zu
Topic_abcde_action = on (oder 1)
Topic_abcde_linkquality = 39

Auch Objekte und Arrays in beliebiger Hierarchie werden aufgelöst. Am besten in der Incoming Overview anschauen, wie die Daten nach der Expandierung aussehen.

TAB Subscriptions

Abonnierte Topics


Die Angabe erfolgt mit einer Zeile pro Topic. Die Topics müssen vom MQTT-Device dokumentiert sein. Eine # definiert dabei einen "Joker" (wie man sonst den * verwendet), z.B. shellies/# abonniert alle Meldungen innerhalb des Topics shellies/.

Siehe unten die Kurzübersicht bekannter MQTT-Geräte und Topics.

TAB Conversions

Eigene Wert-Zu-Text Konvertierung


Da der Miniserver keine Texte weiterverarbeiten kann, können eingehende Nachrichten von einem String zu einem Wert konvertiert werden.

Beispiel:

button-up=1
button-down=2

Sendet ein Device Topic_abcde_status=button-down, wird dies als Topic_abcde_status=2 an den Miniserver übertragen.

Beispielsweise in einem Status-Baustein kann der Wert weiter verarbeitet werden.

TAB Incoming Overview

Anzeige der übermittelten Daten


Hier werden die per HTTP und UDP übermittelten Daten angezeigt.

Die Aktualisierung erfolgt automatisch im Sekundentakt, ohne dass ein Browser-Refresh notwendig ist.

In diesem Fenster können mit Copy&Paste virtuelle Eingänge/Texteingänge, oder für UDP die entsprechenden Befehlserkennungen kopiert werden.

Den Button zum Speichern ganz unten nicht vergessen. Die neue Konfiguration wird beim Speichern automatisch übernommen. 


Siehe auch: MQTT - Schritt für Schritt: MQTT -> Loxone

Miniserver an MQTT

EinstellungStandardBeschreibung
Gateway UDP IN-Port11884

Eingangsport am LoxBerry für UDP-Nachrichten, die an MQTT-Geräte weitergeleitet werden.

Folgende Befehle werden unterstützt:

  • <topic> <value> → löst eine Publish-Nachricht aus
  • publish <topic> <value>löst eine Publish-Nachricht aus
  • retain <topic> <value>löst eine Retain-Nachricht aus (wird am Broker gespeichert)
  • reconnect → Löst eine Neuverbindung und ein forciertes Übermitteln der Daten an den Miniserver aus

Beispiel 1: shellies/shellyswitch-32BA7F/relay/1/command on
Beispiel 2: retain wohnzimmer/temperature 12.5
Beispiel 3: reconnect

Wenn der Miniserver neu startet, empfiehlt es sich, mittels der Loxone-Zeit "Startimpuls" ein reconnect per UDP-Nachricht an das Gateway zu übermitteln. Beispiel im "Siehe auch"-Link.

Siehe auch: MQTT - Schritt für Schritt: Loxone -> MQTT

MQTT Broker-Einstellungen

EinstellungStandardBeschreibung
Lokalen Mosquitto-Broker verwendenJa

Ist dies aktiviert, prüft das Plugin beim Reboot, ob Mosquitto läuft, und startet diesen gegebenenfalls.

Aktiv: Lokale Mosquitto-Inszanz wird vom Plugin verwaltet (inkl. Änderung von Benutzername und Passwort)
Inaktiv: Du kümmserst dich selbst um den Broker

MQTT Broker Adresselocalhost

Hier kann der Hostname angegeben werden, mit dem das Gateway verbinden soll.

Wird beim Hostnamen kein Port angegeben, wird der Standardport 1883 verwendet.

Eine Portangabe erfolgt per hostname:port

MQTT Broker Benutzernameloxberry

Der automatisch installierte Mosquitto-Broker wird mit dem Benutzer loxberry und einem generierten Passwort installiert. Diese Informationen kannst du bei der Einrichtung von Devices von hier kopieren. Wenn du Benutzername und Kennwort nachträglich änderst, musst du das auch bei allen bereits konfigurierten Geräten machen!

Leerer Benutzer und leeres Kennwort deaktivieren die Authentifizierung am lokalen Broker.

Bei externen Brokern wird hier deren Benutzername und Kennwort eingegeben.

MQTT Broker Passwort<generiert>

Incoming Overview

In der "Incoming Overview" werden alle eingehenden Daten der letzten 24 Stunden angezeigt. Diese wurden - sofern das Caching die Daten nicht unterdrückt hat - so an den Miniserver weitergeleitet.

Die Übersicht wird automatisch aktualisiert. Wenn du Text markierst, wird die Aktualisierung unterdrückt, damit du Bezeichnungen mit der Zwischenablage kopieren kannst.

Show advanced table information

Damit werden zusätzliche Schaltflächen und Optionen angezeigt.

  • Topic: Zeigt bei HTTP die originale Topic-Bezeichnung an, auch bei JSON-extrahierten Daten.
  • Disable Cache: Dieser Wert übergeht das Caching von LoxBerry, und sendet den Wert immer, auch wenn er gleich bleibt.
  • Reset after send: Nachdem der Wert gesendet wurde, wird automatisch eine 0 nachgesendet. Das eignet sich für Geräte (z.B. Taster), die lediglich einen Wert (Impuls) senden und dann auf diesem Wert "stehen bleiben". Ein weiterer Impuls würde verursachen, dass wieder der gleiche Wert gesendet würde, und der Miniserver erkennt keine Änderung.  
  • Lösch-Symbol: Damit wird der Wert am Broker gelöscht. Bitte beachte, dass in der Übersicht die Zeile erhalten bleibt, weil der Broker durch das Löschen keine Information an die Subscriber aussendet. Die Tabelle wird aktualisiert, wenn du in den "Settings" den Button "Save and Apply" drückst (dieser Knopf löst eine Neuverbindung zum Broker aus). 

Bekannte MQTT-Geräte und Subscription-Topics

Liebe Plugin-Benutzer! Bitte pflegt diese Tabelle mit euren eingesetzten Geräten, MQTT-Infos und Links! 

Die Liste ist jetzt in diesem Unter-Artikel: MQTT-Gateway - Bekannte MQTT-Geräte und Subscription-Topics

Weitere Hinweise 

  • Die Deinstallation des MQTT-Gateway Plugins deinstalliert den Mosquitto-Broker nicht. Die Authentifizierungseinstellungen bleiben ebenfalls erhalten. MQTT kann somit - auch ohne Gateway - weiter verwendet werden. Uninstall von Mosquitto mit apt-get purge mosquitto mosquitto-clients

Roadmap

  • Fehlerkorrekturen
  • Gateway: Eigenes Topic zur Steuerung des MS
  • Healthstatus aller Verbindungen
  • Notifications bei Verbindungsfehlern

Fragen stellen und Fehler melden

MQTT Gateway - Troubleshooting Guide

GitHub: https://github.com/christianTF/LoxBerry-Plugin-MQTT-Gateway/issues

Forum: https://www.loxforum.com/forum/projektforen/loxberry/plugins/176025-loxberry-mqtt

Fehlerbeschreibungen

Für jeglichen Kontakt bzw. Probleme immer mitliefern:

  • das Logfile
  • die MQTT-Spezifikation des angebundenen Devices (z.B. direkter Link zur MQTT-Dokumentation des Geräts) 
  • Screenshots bzw. Beschreibung der durchgeführten Einstellungen usw.


Known Issues


Siehe auch

5 Comments

  1. I need to integrate XIAOMI (Aqara) devices into LOXONE ZigBee.

    I have already done the integration of these products through ESP8266 (WittyCloud) over UDP, but using DGNWG02LM. Now I want to get rid of DGNWG02LM.

    As a gateway, it is planned to use the MQTT Gateway plugin for Loxberry.

    There is CC2531, which I successfully uploaded zigbee2mqtt firmware. To test CC2531 on Raspberry Pi 3B , I installed Rasbian Buster Lite and connected WSDCGQ11LM and WXKG02LM. Everything works great.
    When I installed the MQTT Gateway plugin on Loxberry, I ran into a problem. My Aqara devices are not detected.
     
    Help solve this problem. The information in the documentation and on the forum was not enough for me.

    1. Could you post all information you have to a thread in loxforum / LoxBerry Plugins area. Include all output, settings, docu (or docu links).

  2. Hallo, ich habe alles soweit sogut installiert, Habe auch eine Tasmota Steckdose, welche Einwandfrei per UDP funktioniert im Einsatz.  Nun hab ich mir folgendes Thermostat geholt und geflashed. https://github.com/klausahrenberg/ThermostatBecaWifi 

    Ich schaffe es die Werte in die Loxone einzulesen und auch via Loxone am MQTT Broker zurückzuschreiben. (Temperatur). jedoch habe ich folgendes Problem. Wenn ich die Temperatur am Thermostat ändere, funktioniert das ohne Probleme in der Loxone. Wenn ich jedoch die Temperatur in der Loxone ändere damit es aufs Thermostat übertragen wird, gelangt es nur zum Broker und nicht auf das Thermostat. D.h. nach spätestens 5 Minuten ist wieder der Wert vom Thermostat eingestellt. Hat jemand eine Idee oder Lösung? 

    mit freundlichen Grüßen

    1. Habe es lösen können.

      1. Interessantes Gerät!