Metainformationen zur Seite
MQTT-Gateway - Generischer POST / GET / JSON Empfänger
Als "Generischer Empfänger" ist gemeint, dass ein beliebiges (nicht MQTT-kompatibles) Gerät einen beliebigen HTTP-Request an die hier genannten URL's absetzen kann. Der generische Empfänger (engl. receiver) parst die Eingangsdaten und sendet diese via MQTT Gateway an den MQTT Broker und folglich an den Miniserver.
Der Verwendungszweck ist folgender:
- Ein beliebiges Gerät / Software kann bei einem Event eine frei definierbare URL ausführen und sendet mit dem Request seine Daten mit. Bezeichnet wird das beispielsweise als "HTTP-Event" oder "Callback".
- Der generische Empfänger des Plugins empfängt diese Daten, wandelt sie um und übermittelt sie an den MQTT-Broker.
- Mit der Subscription im MQTT Gateway können die Daten an den Miniserver weitergesendet werden.
Unterstützt werden automatisch: (keine Konfiguration erforderlich!)
- Als Querystring übermittelte Daten (GET-Request)
- Als Formular übermittelte Daten (POST-Request)
- als JSON übermittelte Daten
Einrichtung
Am Gerät bzw. der Software
Es gibt zwei Empfänger-URLs des Plugins:
http://loxberry/system/tools/mqtt/receive.php
- Eingehende Daten werden mit dem RETAIN-Flag weitergegeben.http://loxberry/system/tools/mqtt/receive_pub.php
- Eingehende Daten als PUBLISH weitergegeben (kein retain).
In der Konfiguration des Geräts bzw. der Software muss eine der URLs eingetragen werden. Es ist keine Authentifizierung erforderlich.
Im MQTT Gateway Plugin
Alle eingehenden Daten werden im topic rcvr/#
gesendet. Dieses Topic muss bei den Subscriptions eingetragen werden.
Datenmodell
Die Topicstruktur sieht folgendermaßen aus:
Topic | Topic via Gateway (HTTP Virtual Inputs) | Beschreibung |
---|---|---|
rcvr/<HOST>/REMOTEADDR | rcvr_<HOST>_REMOTEADDR | IP-Adresse des Absenders |
rcvr/<HOST>/REMOTEHOST | rcvr_<HOST>_REMOTEHOST | Hostname des Absenders |
rcvr/<HOST>/loxtime | rcvr_<HOST>_loxtime | Loxone Timestamp der letzten Übermittlung |
rcvr/<HOST>/GET/... | rcvr_<HOST>_GET_... | Alle Querystring-Parameter (GET-Request) |
rcvr/<HOST>/POST/... | rcvr_<HOST>_POST_... | Alle Formulardaten (POST-Request) |
rcvr/<HOST>/BODY/... | rcvr_<HOST>_BODY_... | Alle als JSON im Content übertragene Daten |
<HOST>
entspricht (je nach Verfügbarkeit in dieser Reihenfolge):
- Der Hostname des Absenders - bei vollem Domänennamen (FQDN) wird nur der kurze Hostname verwendet
- Die IP-Adresse (IPv4 oder IPv6)
local
wenn keines der anderen Kennzeichen gesetzt ist.
Die Datenstruktur von GET- und POST-Daten ist flach. Eingehende JSON-Daten hingegen werden in ihrer Hierarchie aufgelöst.
Am besten ist es, sich die eingehenden Daten in der Incoming Overview anzusehen.
Besonderheiten und Hinweise
- Wenn ein HTTP-Request lokal am LoxBerry abgesetzt wird, kann der <HOST> "127.0.0.1" oder "::1" sein (lokale IP-Adresse).
- POST- und GET-Daten haben keine Hierarchie. Der Receiver erzeugt daher eine Hierarchiestufe durch den Absender (<HOST>). Jeder Datensatz, der vom <HOST> gesendet wird, überschreibt daher den letzten Datensatz vom gleichen Host. Das muss bei der Programmierung in der Loxone Config berücksichtigt werden.
- Dementsprechend kann es notwendig sein, bei den Eingangsdaten das "Reset after send" flag zu setzen, um Impulse zu generieren.
- Die "Conversions" funktionieren identisch wie mit anderen Daten.
Fehlersuche
Bitte das Logfile "Receiver" kontrollieren, welche Daten hereinkommen und was bei der Übertragung passiert.
Scripte kopieren und anpassen
Man kann die Scripts ohne Probleme kopieren und z.B. das Topic anpassen, wenn man aus dem Eingangsdaten z.B. eine Hierarchie auslesen kann.
Dazu folgendermaßen vorgehen:
Kopiere die beiden Dateien aus /opt/loxberry/webfrontend/html/plugins/mqttgateway/receive*.php
nach /opt/loxberry/webfrontend/legacy/receive*.php
Die Aufruf-URL ist dann:
http://loxberry/legacy/receive.php
bzw. http://loxberry/legacy/receive_pub.php
Erstelle keine Kopien innerhalb des LoxBerry Verzechnisses außerhalb von legacy! Diese würden bei einem LoxBerry-Update gelöscht werden.