MQTT Gateway - HTTP- und UDP-Interface

Mit dem MQTT Gateway Plugin ist es nicht nur möglich, Daten zwischen Loxone Miniserver und MQTT auszutauschen, sondern auch andere, nicht MQTT-fähige Geräte können via UDP oder HTTP Daten einliefern. Ist im MQTT Gateway das Topic, an das diese Geräte senden, abonniert, geht der Status auch an den Miniserver.

HTTP Interface

http://<lbuser>:<lbpass>@loxberry:80/admin/system/tools/mqtt.php?topic=<topic>&value=<value>&retain=<1/0>&transform=<transformername>

Anmerkung: Bei Verwendung von http://localhost:80/admin/… können die Credentials entfallen (LoxBerry erfordert bei lokalem Zugriff keine Authentifizierung) - das geht natürlich nur in z. B. Skripten direkt auf dem LoxBerry.

<lbuser> (optional bei Verwendung von localhost) Benutzername und Passwort von LoxBerry (Web-Credentials)
<lbpass>
loxberry:80 oder localhost für den lokalen LoxBerry Hostname und Port von LoxBerry
<topic> Pflicht Das Topic, das published wird
<value> Optional Der zu publishende Wert
<retain> Optional 1 oder 0/nicht angegeben → Wert am Broker speichern
<transformername> Optional Der UDP-Transformer, der angewandt werden soll


Beispiele:

Published beim Topic livingroom den Wert 21.3:

mqtt.php?topic=homematic/temperature/livingroom&value=21.3

Published beim Topic livingroom den Wert 21.3 mit retain-Flag (wird am Broker gespeichert):

mqtt.php?retain=1&topic=homematic/temperature/livingroom&value=21.3

Löscht am Broker ein mit retain gesetztes Topic livingroom (weil kein value angegeben): 

mqtt.php?retain=1&topic=homematic/temperature/livingroom

Published beim Topic livingroom den Wert 21.3 an den Transformer mytransformer mit retain-Flag (wird am Broker gespeichert):

mqtt.php?retain=1&topic=homematic/temperature/livingroom&value=21.3&transform=mytransformer

UDP Interface (einfach)

Das UDP-Interface entspricht genau jenem, mit dem der Miniserver Daten an MQTT senden kann (MQTT Gateway - Schritt für Schritt Loxone -> MQTT). Die eckigen Klammern sind nicht anzugeben.

publish <topic> <value>

oder

retain <topic> <value>

publish

retain
publish sendet den Wert als Kommando

retain sendet den Wert und speichert ihn am Broker
<topic> Das Topic, das published wird
<value> Der zu sendende Wert

Ist der Wert nicht gesetzt, wird bei retain das Topic am Broker gelöscht

Die Daten müssen an den UDP-In-Port des MQTT Gateways (nicht der Miniserver-Port!) gesendet werden.

UDP Interface mit Transformer (einfach)

Das UDP-Interface entspricht genau jenem, mit dem der Miniserver Daten an MQTT senden kann (MQTT Gateway - Schritt für Schritt Loxone -> MQTT). Die eckigen Klammern sind nicht anzugeben.

publish <transformername> <topic> <value>

oder

retain <transformername> <topic> <value>

publish

retain
publish sendet den Wert als Kommando

retain sendet den Wert und speichert ihn am Broker
<transformername> Der Name des Transformers, aus der Transformerliste
<topic> Das Topic, das published wird
<value> Der zu sendende Wert

Ist der Wert nicht gesetzt, wird bei retain das Topic am Broker gelöscht

Die Daten müssen an den UDP-In-Port des MQTT Gateways (nicht der Miniserver-Port!) gesendet werden.

Beispiele

Bash

# Check if the MQTT Gateway config file exists
if [ ! -e "$LBPCONFIG/mqttgateway/mqtt.json" ]; then
    echo "MQTT Gateway Configfile not found"
    exit 1
fi
 
# Read UDP-In-Port of the MQTT Gateway into $UDPINPORT variable
UDPINPORT=$(jq -r '.Main.udpinport' $LBPCONFIG/mqttgateway/mqtt.json)
 
# Publish or retain messages to the gateway's port
echo -n "publish <topic> <value>" > /dev/udp/127.0.0.1/$UDPINPORT
echo -n "retain <topic> <value>" > /dev/udp/127.0.0.1/$UDPINPORT
echo -n "retain <topic>" > /dev/udp/127.0.0.1/$UDPINPORT
 
# Example with transformer
echo -n "publish shelly_rgb&w <topic> <value>" > /dev/udp/127.0.0.1/$UDPINPORT
echo -n "retain shelly_rgb&w <topic> <value>" > /dev/udp/127.0.0.1/$UDPINPORT


PHP

// Check the existance of the MQTT Gateway config
if (!file_exists(LBHOMEDIR . "/config/mqttgateway/mqtt.json")) {
    echo ("MQTT Gateway config not found");
    exit(1);
}
 
// Read gateway config file to get udpinport
$jsonstr = file_get_contents(LBHOMEDIR . "/config/mqttgateway/mqtt.json");
$json = json_decode($jsonstr, true);
$udpinport = $json['Main']['udpinport'];
 
// Open an udp socket and publish/retain data
$socket = fsockopen("udp://127.0.0.1:$udpinport");
fwrite($socket, "publish <topic> <value>");
fwrite($socket, "retain <topic> <value>");

UDP Interface (JSON data transfer)

Per UDP können die Daten auch als JSON-Datensatz übertragen werden. Es werden dabei Leerzeichen im Topic unterstützt (nicht bei einfachem UDP!), außerdem sind Encoding-Probleme eher ausgeschlossen.

Nachrichtenformat:

{ 
    "topic" : "this/is/my/topic",
    "value" : "The payload of the message",
    "retain": true/false,
    "transform": "transformername"
}

Wird der value weggelassen, wird eine leere Nachricht an das Topic übermittelt (entspricht dem Löschen des Topics am Broker).

Das retain-Flag ist optional. Wird es weggelassen, wird die Nachricht ohne Retain-Flag gepublished.

Das transform-Flag ist optional. Es wird nur benötigt, wenn ein UDP-Transformer ausgeführt werden soll.