MQTT: Unterschied zwischen den Versionen

Aus Gude Systems GmbH
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
<br />[[Datei:MQTT.png]]
+
Dieses Gerät unterstützt MQTT 3.1.1 um konfigurierte Nachrichten zu verschicken, und auch Kommandos entgegenzunehmen. Dieses Kapitel ist für alle Gude Geräte allgemein gehalten, manche Gude Modelle haben keine schaltbaren Ports.
<br /><u>Enable MQTT:</u>Aktiviert MQTT Unterstützung.
+
*Default Port für eine unverschlüsselte Verbindung ist Port 1883.
<br /><u>Broker:</u>DNS oder IP-Adresse des MQTT Brokers.
+
*Default Port für eine TLS gesicherte Verbindung ist Port 8883.
<br /><u>TLS:</u>Schaltet TLS-Verschlüsselung an.
+
*Wenn der Broker einen anonymen Login erlaubt, sind Benutzername und Passwort beliebig, aber ein Benutzername muss angegeben werden.
<br /><u>Modus TCP port:</u>Die TCP/IP Portnummer des Brokers.
+
*Wenn mehrere MQTT Clients mit einem Broker verbunden sind, müssen die Namen der Clients verschieden sein. Aus diesem Grund wird als Default Name "client_xxxx" generiert. Dabei sind "xxxx" die 4 letzten Stellen der MAC-Adresse.
<br /><u>Username:</u>Der MQTT Benutzername.
+
 
<br /><u>password:</u>Das Passwort zum Benutzernamen.
+
='''Nachrichtenformat'''=
<br /><u>Client ID:</u>Die MQTT Client ID.
+
<br />Die MQTT Nachrichten des Gerätes werden immer im JSON Format verschickt. Z.B.
 
<br />
 
<br />
<br />[[Datei:Wichtig_zeichen.png]]Die Client IDs eines Benutzers müssen unterschiedlich sein! Wenn zwei Clients eines Benutzers den gleichen Namen haben, wird normalerweise die Verbindung eines Clients abgebrochen.
+
<br />{"type": "portswitch", "idx": 2, "port": "2", "state": 1, "cause": {"id": 2, "txt": "http"}, "ts": 1632}
 
<br />
 
<br />
<br /><u>Quality of Service (QoS):</u>Stellt den QoS Wert (0 oder 1) der MQTT publishes ein.
+
<br />Dies ist ein Schalten des zweiten Ports in den Zustand ("state") on. Die Quelle des Schaltkommando ist CGI ("http"). Der Index ist immer numerisch, "port" kann bei Geräten mit mehreren Banks auch alphanumerisch sein, z.B. "A2". Am Ende folgt ein timestamp ("ts"), der die Anzalh der Sekunden anzeigt, die das Gerät eingeschaltet ist, oder unixtime wenn das Gerät sich mit einem NTP-Server synchronisiert hat.
<br /><u>Keep-alive ping interval:</u>Dies bestimmt das Zeitintervall in dem der Client einen MQTT Ping schickt.
+
 
<br /><u>Topic Prefix:</u>Definiert des Anfang des Topics mit dem alle Nachrichten geschickt werden.
+
='''MQTT Topic Prefix'''=
Die Strings '''[mac]''' und '''[host]''' symbolisieren dabei die MAC-Adresse oder den Hostname des Gerätes.
+
<br />Das Topic Prefix für die Nachrichten ist in der MQTT Konfiguration einstellbar. Ein Default wäre z.B. "de/gudesystems/epc/[mac]". Hier steht "[mac]" als Platzhalter für die MAC-Adresse des Gerätes, ein weiterer möglicher Platzhalter ist "[host]", der den Host-Namen beinhaltet. Ein Beispiel Topic für eine Schaltnachricht des zweites Ports wäre dann:
<br /><u>Permit CLI commands:</u>Aktiviert die Ausführung von Konsolen Kommandos.
+
<br />
<br /><u>Publish device data summary interval:</u>Zeitintervall in dem Nachrichten mit dem globalen Zustand des Gerätes verschickt werden.
+
<br />"de/gudesystems/epc/00:19:32:01:16:41/switch/2".
<br />[[Datei:MQTT_Logs-Status.png]]
+
<br />
<br /><u>MQTT Logs:</u>Gibt einzelne Logmeldungen zu dem Verbindungsaufbau aus.
+
='''Ausführen von Konsolen Kommandos'''=
<br /><u>MQTT Broker Status:</u>Zeitinformationen über Verbindungsdauer, dem letzten publish und dem letzten keep-alive.
+
Das Gerät kann über MQTT komplett mit Konsolen Kommandos ferngesteuert werden. Eine Liste aller Kommandos findet sich im Kapitel Konsole . Je nach Topic werden die Kommandos in verschiedenen Formaten angenommen.
 +
<br />
 +
<br />[[Datei:wichtig_Zeichen.png]] Als Default ist das Ausführen vom Kommandos nicht erlaubt, sondern muss in der MQTT Konfiguration ("Permit CLI commands") freigeschaltet werden!
 +
<br />
 +
<br />'''Format 1: Kommando in JSON Syntax'''
 +
<br />
 +
<br />Publish Topic: "de/gudesystems/epc/00:19:32:01:16:41/cmd"
 +
<br />Publish Message: "{"type": "cli", "cmd": "port 2 state set 1", "id": 10}"
 +
<br />
 +
<br />Antwort vom Gerät an "de/gudesystems/epc/00:19:32:01:16:41/cmdres"
 +
<br />"{"type": "cli", "cmdres": ["OK."], "result": {"num": 0, "hint": "ok"}, "id": 10}"
 +
<br />[[Datei:wichtig_Zeichen.png]] Das JSON Objekt "result" gibt zurück, ob das Kommando valide war. Das Objekt "id" im Kommando ist optional und wird in der Antwort vom Gerät durchgereicht. Die Übergebene Nummer kann helfen eine Synchronizität zwischen Kommando und Antwort über den Broker herzustellen.
 +
<br />
 +
<br />'''Format 2: Raw Text'''
 +
<br />
 +
<br />Publish Topic: "de/gudesystems/epc/00:19:32:01:16:41/cmd/cli"
 +
<br />Publish Message: "port 2 state set 1"
 +
<br />
 +
<br />Antwort vom Gerät an "de/gudesystems/epc/00:19:32:01:16:41/cmdres/cli"
 +
<br />"OK."
 +
<br />
 +
<br />'''Format 3: Vereinfachtes Port schalten'''
 +
<br />
 +
<br />Publish Topic: "de/gudesystems/epc/00:19:32:01:16:41/cmd/port/2"
 +
<br />Publish Message: "0" oder "1"
 +
<br />Antwort vom Gerät an "de/gudesystems/epc/00:19:32:01:16:41/cmdres/port/2"
 +
<br />"0" oder "1"
 +
<br />[[Datei:wichtig_Zeichen.png]] Diese Spezialform existiert nur für die Port Schaltbefehle.
 +
 
 +
='''Device Data Summary'''=
 +
<br />In der '''Device Data Summary''' werden in einem JSON Objekt die wichtigsten Daten des Gerätes zusammengefasst und in einem konfigurierbaren Zeitintervall periodisch verschickt. Diese Zusammenfassung hängt von den Eigenschaftes des Gerätes und der angeschlossenen Sensoren ab, und könnte z.B. so aussehen:
 +
<br />
 +
<br />Topic: de/gudesystems/epc/00:19:32:01:16:41/device/telemetry
 +
<br />
 +
<br />Nachricht:
 +
<br />
 +
<br />{
 +
<br />"type": "telemetry",
 +
<br />"portstates": [{
 +
<br />"port": "1",
 +
<br />"name": "Power Port",
 +
<br />"state": 1
 +
<br />}, {
 +
<br />"port": "2",
 +
<br />"name": "Power Port",
 +
<br />"state": 0
 +
<br />}, {
 +
<br />"port": "3",
 +
<br />"name": "Power Port",
 +
<br />"state": 0
 +
<br />}, {
 +
<br />"port": "4",
 +
<br />"name": "Power Port",
 +
<br />"state": 0
 +
<br />}],
 +
<br />"line_in": [{
 +
<br />"voltage": 242.48,
 +
<br />"current": 0.000
 +
<br />}],
 +
<br />"sensors": [{
 +
<br />"idx": 1,
 +
<br />"name": "7105",
 +
<br />"data": [{
 +
<br />"field": "temperature",
 +
<br />"v": 21.1,
 +
<br />"unit": "deg C"
 +
<br />}, {
 +
<br />"field": "humidity",
 +
<br />"v": 71.9,
 +
<br />"unit": "%"
 +
<br />}, {
 +
<br />"field": "dew_point",
 +
<br />"v": 15.8,
 +
<br />"unit": "deg C"
 +
<br />}, {
 +
<br />"field": "dew_diff",
 +
<br />"v": 5.3,
 +
<br />"unit": "deg C"
 +
<br />}]
 +
<br />}],
 +
<br />"ts": 210520
 +
<br />}

Version vom 26. März 2024, 11:07 Uhr

Dieses Gerät unterstützt MQTT 3.1.1 um konfigurierte Nachrichten zu verschicken, und auch Kommandos entgegenzunehmen. Dieses Kapitel ist für alle Gude Geräte allgemein gehalten, manche Gude Modelle haben keine schaltbaren Ports.

  • Default Port für eine unverschlüsselte Verbindung ist Port 1883.
  • Default Port für eine TLS gesicherte Verbindung ist Port 8883.
  • Wenn der Broker einen anonymen Login erlaubt, sind Benutzername und Passwort beliebig, aber ein Benutzername muss angegeben werden.
  • Wenn mehrere MQTT Clients mit einem Broker verbunden sind, müssen die Namen der Clients verschieden sein. Aus diesem Grund wird als Default Name "client_xxxx" generiert. Dabei sind "xxxx" die 4 letzten Stellen der MAC-Adresse.

Nachrichtenformat


Die MQTT Nachrichten des Gerätes werden immer im JSON Format verschickt. Z.B.

{"type": "portswitch", "idx": 2, "port": "2", "state": 1, "cause": {"id": 2, "txt": "http"}, "ts": 1632}

Dies ist ein Schalten des zweiten Ports in den Zustand ("state") on. Die Quelle des Schaltkommando ist CGI ("http"). Der Index ist immer numerisch, "port" kann bei Geräten mit mehreren Banks auch alphanumerisch sein, z.B. "A2". Am Ende folgt ein timestamp ("ts"), der die Anzalh der Sekunden anzeigt, die das Gerät eingeschaltet ist, oder unixtime wenn das Gerät sich mit einem NTP-Server synchronisiert hat.

MQTT Topic Prefix


Das Topic Prefix für die Nachrichten ist in der MQTT Konfiguration einstellbar. Ein Default wäre z.B. "de/gudesystems/epc/[mac]". Hier steht "[mac]" als Platzhalter für die MAC-Adresse des Gerätes, ein weiterer möglicher Platzhalter ist "[host]", der den Host-Namen beinhaltet. Ein Beispiel Topic für eine Schaltnachricht des zweites Ports wäre dann:

"de/gudesystems/epc/00:19:32:01:16:41/switch/2".

Ausführen von Konsolen Kommandos

Das Gerät kann über MQTT komplett mit Konsolen Kommandos ferngesteuert werden. Eine Liste aller Kommandos findet sich im Kapitel Konsole . Je nach Topic werden die Kommandos in verschiedenen Formaten angenommen.

Datei:Wichtig Zeichen.png Als Default ist das Ausführen vom Kommandos nicht erlaubt, sondern muss in der MQTT Konfiguration ("Permit CLI commands") freigeschaltet werden!

Format 1: Kommando in JSON Syntax

Publish Topic: "de/gudesystems/epc/00:19:32:01:16:41/cmd"
Publish Message: "{"type": "cli", "cmd": "port 2 state set 1", "id": 10}"

Antwort vom Gerät an "de/gudesystems/epc/00:19:32:01:16:41/cmdres"
"{"type": "cli", "cmdres": ["OK."], "result": {"num": 0, "hint": "ok"}, "id": 10}"
Datei:Wichtig Zeichen.png Das JSON Objekt "result" gibt zurück, ob das Kommando valide war. Das Objekt "id" im Kommando ist optional und wird in der Antwort vom Gerät durchgereicht. Die Übergebene Nummer kann helfen eine Synchronizität zwischen Kommando und Antwort über den Broker herzustellen.

Format 2: Raw Text

Publish Topic: "de/gudesystems/epc/00:19:32:01:16:41/cmd/cli"
Publish Message: "port 2 state set 1"

Antwort vom Gerät an "de/gudesystems/epc/00:19:32:01:16:41/cmdres/cli"
"OK."

Format 3: Vereinfachtes Port schalten

Publish Topic: "de/gudesystems/epc/00:19:32:01:16:41/cmd/port/2"
Publish Message: "0" oder "1"
Antwort vom Gerät an "de/gudesystems/epc/00:19:32:01:16:41/cmdres/port/2"
"0" oder "1"
Datei:Wichtig Zeichen.png Diese Spezialform existiert nur für die Port Schaltbefehle.

Device Data Summary


In der Device Data Summary werden in einem JSON Objekt die wichtigsten Daten des Gerätes zusammengefasst und in einem konfigurierbaren Zeitintervall periodisch verschickt. Diese Zusammenfassung hängt von den Eigenschaftes des Gerätes und der angeschlossenen Sensoren ab, und könnte z.B. so aussehen:

Topic: de/gudesystems/epc/00:19:32:01:16:41/device/telemetry

Nachricht:

{
"type": "telemetry",
"portstates": [{
"port": "1",
"name": "Power Port",
"state": 1
}, {
"port": "2",
"name": "Power Port",
"state": 0
}, {
"port": "3",
"name": "Power Port",
"state": 0
}, {
"port": "4",
"name": "Power Port",
"state": 0
}],
"line_in": [{
"voltage": 242.48,
"current": 0.000
}],
"sensors": [{
"idx": 1,
"name": "7105",
"data": [{
"field": "temperature",
"v": 21.1,
"unit": "deg C"
}, {
"field": "humidity",
"v": 71.9,
"unit": "%"
}, {
"field": "dew_point",
"v": 15.8,
"unit": "deg C"
}, {
"field": "dew_diff",
"v": 5.3,
"unit": "deg C"
}]
}],
"ts": 210520
}