MQTT Schnittstelle - GollmerSt/SolvisSmartHomeServer GitHub Wiki
Der SolvisSmartHomeServer unterstützt neben seiner proprietären Server-Client-Schnittstelle noch das MQTT-Protokoll. Aktuell jedoch nur die nichtverschlüsselte Version. Sollte bzgl. einer SSL-Verschlüsselung Bedarf bestehen, bitte eine PM an mich: [email protected]
Bei MQTT kennen sich die Clients untereinander nicht. Für den Server (ist ebenfalls ein MQTT-Client, wird aber weiterhin als Server benannt) ist dies jedoch für bestimmte Befehle notwendig. So muss beispielsweise der Server Informationen an den Client liefern können, wenn der Client selber bei Publish einen Befehl fehlerhaft angewendet hat. Daher muss der Client eine im System eindeutige Id besitzen.
Alle Publish-Befehle des Client müssen daher die Id des Clients im Topic besitzen. Der Aufbau der Topics, den die Clients versetzen muss immer folgenden Aufbau besitzen:
prefix/client/……
Hierbei ist prefix in base.xml unter dem Attribut topicPrefix definiert.
client ist die eindeutige ID des Clients im MQTT-Netzwerk.
Topics, welche der Server versendet sind immer im folgenden Format:
prefix/……
Hierbei ist prefix in base.xml unter dem Attribut topicPrefix definiert.
Eine Ausnahme hierzu ist die Rückmeldung des Servers bei einem Fehler auf Grund eines Publish eines Clients. In diesem Fall wird die Fehlermeldung in folgendes Topic geschrieben:
prefix/client/error
Wichtig:
Das Smarthome-System sollte seinen Online-Status dem Server übermitteln. Wenn er mit dem Server sich "verbindet", sollte er zu Beginn das Online-Topic SolvisSmartHomeServer/ClientId/online
auf true setzen. Als MQTT-Last-Will sollte man diesen Wert dann auf "false" setzen.
Bis zur Version 1.3.x war dies zwingend erforderlich, da andernfalls Änderungen der Anlagenparameter nicht möglich waren. Mit Version 1.4.0 wurde dieses Verhalten abgeändert. Von dieser Version an ist das Setzen auf den Wert false nach wie vor wichtig, da damit dann Client-spezifische Einstellungen im Server wieder zurück gesetzt werden.
Die verwendeten Topics des SolvisSmartHomeServers mit einer Kurzbeschreibung kann über die Dokumentationsfunktion erzeugt werden. Das wird vermutlich für die Erstellung der Smarthome-System-Anpassung hilfreich sein. Wie diese Dokumentation zu erstellen ist und der Inhalt dieser Dokumentation wird hier beschrieben.
Alle Topics, welche der Server schreibt (publish) sind vom Typ „present“ mit Ausnahme von „prefix/ client /error“.
Folgende rein Server-spezifischen Topics existieren:
Topic | Richtung (Server-bezogen) | Bedeutung / Werte |
---|---|---|
prefix/server/meta | publish | JSON-Meta-Beschreibung der Server-Befehle |
prefix/server/online | publish | true/false |
prefix/client/server/cmnd | subscribe | Befehle: backup, restart |
prefix/client /error | publish | Fehlermeldung für den Client client |
prefix/client/online | subscribe | Status: true/false (Client online). Der LWT (last will) des Client sollte diesen Wert auf false setzen. |
Die JSON-Meta-Beschreibung der Server Befehle sieht folgendermaßen aus:
["backup","restart"]
Folgende Topics sind Anlagen-abhängige den Server-Einstellungen/-Status:
Topic | Richtung (Server-bezogen) | Bedeutung / Werte |
---|---|---|
prefix/unit/server/meta | publish | JSON-Meta-Beschreibung der Anlage-spezifischen Befehle (JSON-Array). |
prefix/client/unit/server/cmnd | subscribe | Befehle: SCREEN_RESTORE_INHIBIT, SCREEN_RESTORE_ENABLE, COMMAND_OPTIMIZATION_INHIBIT, COMMAND_OPTIMIZATION_ENABLE, GUI_COMMANDS_ENABLE, GUI_COMMANDS_DISABLE, SERVICE_RESET, UPDATE_CHANNELS |
prefix/unit/screen/meta | publish | JSON-Meta-Beschreibung der möglichen Screen-Namen der Solvis-Control (JSON-Array). |
prefix/client/unit/screen/cmnd | subscribe | Der als Wert übergebene Screen-Name der Solvis-Control wird als Default-Bildschirm ausgewählt, d.h. dieser Bildschirm wird immer im Ruhezustand (kein Anwender-/Service- oder Server-Zugriff auf die SolvisControl) angefahren. |
Die JSON-Beschreibung der Anlage-spezifischen Befehle sieht folgendermaßen aus:
["SCREEN_RESTORE_INHIBIT","SCREEN_RESTORE_ENABLE","COMMAND_OPTIMIZATION_INHIBIT","COMMAND_OPTIMIZATION_ENABLE","GUI_COMMANDS_ENABLE",
"GUI_COMMANDS_DISABLE","SERVICE_RESET","UPDATE_CHANNELS"]
Die JSON-Beschreibung der Screen-Namen sieht folgendermaßen aus (bei einem Heizkreis):
["Heizkreis1-4_11","Wasser-Bereitschaft","Zeiteinstellung","NachttemperaturSelected_HK1","Schornsteinfeger","Anlagenstatus-HK","Heizkreis1-1_11","Uhrzeit/Datum","Anlagenstatus-WW","Heizkreise","Installateur-Menue","Brenner-Stufe-2","Sonstiges_Nutzerauswahl","Heizkreis1-2_5","Tagestemperatur_HK1","Wasser-Installateur","Heizkreis1-4_5","Wasser-Anforderung-2/2","Nutzerauswahl","TagestemperaturSelected_HK1","Heizung-Anforderung","Heizung-Installateur","Zirkulation","Home","Sonstiges-3","Heizkreis1-3_11","Sonstiges-2","Solar","Sonstiges-1","Zaehlfunktion","Heizkreis1-3_5","Warmwasser","Heizkreis1-1_5","Heizkreis1-5_5","Heizkreis1-2_11","Wasser-Anforderung-1/2","Nachttemperatur_HK1"]
Folgende Unit-spezifische Topics existieren:
Topic | Richtung (Server-bezogen) | Bedeutung / Werte |
---|---|---|
prefix/unit/status | publish | Status der Unit (POWER_OFF, REMOTE_CONNECTED, SOLVIS_CONNECTED, SOLVIS_DISCONNECTED, CONTROL_WRITE_ONGOING, CONTROL_READ_ONGOING und CONTROL_FINISHED, ERROR) |
prefix/unit/human_access | publish | none, user, service |
prefix/unit/channel/meta | publish | JSON-Meta-Beschreibung des Kanals |
prefix/unit/channel/data | publish | Aktuelles Datum des Kanals |
prefix/client/unit/channel/cmnd | subscribe | Zu setzender Wert des Kanals |
prefix/client/unit/channel/update | subscribe | Kanal aktualisieren |
Die JSON-Meta-Beschreibung eines Kanalnamens besitzt folgenden Aufbau:
{
"Writeable": boolean,
"Type": "type",
"Unit": "unit",
"Accuracy": float,
"IsBoolean": boolean,
"Upper": float,
"Lower": float,
"Step": float,
"IncrementChange": float,
"ChangedIncrement": float,
"Modes": ["mode1","mode2", …, "moden"]
}
Nähere Beschreibung hierzu hier
Mit Version 1.03.00 kann man mittels des Servers die Liste vom Programm selber erstellen lassen. Diese ist immer aktuell und an die durch das base.xml vorgebene Anlagenkonfiguration angepasst. Die Erstellung dieser Liste und die Bedeutung der Spalten ist hier beschrieben. Diese Datei enthält zusätzlich eine Aufstellung aller vom SolvisSmartHomeServer verwendeten Topics mit einer Kurzbeschreibung (ab V1.04.00).
Channel-Name | Publish / Subscribe | Einheit | Bemerkungen |
---|---|---|---|
I1:Anlagentyp | p | - | |
I2:Systemnummer | p | - | |
S01:Warmwasserpuffer | p | °C | |
S02:Warmwassertemperatur | p | °C | |
S03:Speicherreferenztemperatur | p | °C | |
S04:Heizungspuffertemperatur_oben | p | °C | |
S05:Solarvorlauftemperatur | p | °C | |
S06:Solarruecklauftemperatur | p | °C | |
S07:Solardruck | p | ?? | |
S08:Solarkollektortemperatur | p | °C | |
S09:Heizungspuffertemperatur_unten | p | °C | |
S10:Aussentemperatur | p | °C | |
S11:ZirkulationRuecklauftemperatur | p | °C | |
S12:Vorlauftemperatur_HK1 | p | °C | |
S13:Vorlauftemperatur_HK2 | p | °C | |
S14 | p | °C | |
S15 | p | °C | |
S16 | p | °C | |
S18:Durchfluss_Warmwasserzirkulation | p | l/h | |
S17:Durchfluss_Solarpanel | p | l/h | |
AIn1 | p | - | |
AIn2 | p | - | |
AIn3 | p | - | |
AOut0 | p | - | |
AOut1 | p | - | |
AOut2 | p | - | |
AOut3 | p | - | |
RF1:Raumfuehler_HK1 | p | °C | |
RF2:Raumfuehler_HK2 | p | °C | |
RF3:Raumfuehler_HK3 | p | °C | |
A01:Pumpe_Solar | p | % | |
A02:Pumpe_Warmwasser | p | % | |
A03:Pumpe_HK1 | p | - | |
A04:Pumpe_HK2 | p | - | |
A05:Pumpe_Warmwasserzirkulation | p | - | |
A06:Pumpe_HK3 | p | - | |
A07 | p | - | |
A07:Pumpe_Solar2 | p | % | |
A08:Mischer_HK1_auf | p | - | |
A09:Mischer:HK1_zu | p | - | |
A10:Mischer_HK2_auf | p | - | |
A11:Mischer:HK2_zu | p | - | |
A12:Brenner | p | - | |
A13:Brenner_S2 | p | - | |
A14:Entstoerung | p | - | |
SE:Solarertrag_kWh | p | kWh | |
AOut5 | p | ||
SL:Solarleistung_kW | p | kW | |
X01:BrennerStarts | p | - | Wird mittels A12:Brenner und C01:StartsBrenner ermittelt |
X02:BrennerLaufzeit_s | p | s | Wird mittels A12:Brenner und C02:LaufzeitBrenner ermittelt |
X03:BrennerStufe2Starts | p | - | Wird mittels A13:Brenner_S2 ermittelt (zählt nach Erstinstallation von 0 an) |
X04:BrennerStufe2Laufzeit_s | p | s | Wird mittels A13:Brenner_S2 und C03:LaufzeitAnforderung2 ermittelt |
X05:BrennerStatus | p | - | off, Stufe1, Stufe2 |
X06:UhrzeitSolvis | p | - | |
X07:MischerPosition0_HK1 | p | - | true: Wenn Mischer auf 0-Stellung |
X08:MischerPosition0_HK2 | p | - | true: Wenn Mischer auf 0-Stellung |
X09:LaufzeitSolarpumpe_s | p | s | Wird mittels A01:Pumpe_Solar und C24:LaufzeitSolarpumpe ermittelt |
X10:LaufzeitSolarpumpe2_s | p | s | Wird mittels A07:Pumpe_Solar2 und C25:LaufzeitSolarpumpe2 ermittelt |
C01:StartsBrenner | p | - | |
C02:LaufzeitBrenner | p | h | |
C03:LaufzeitAnforderung2 | p | h | |
C04:WarmwasserPumpe | p/s | - | an, aus, auto |
C05:WassertemperaturSoll | p/s | °C | |
C06:Anlagenmodus_HK1 | p/s | - | Tag, Nacht, Standby, Timer |
C07:Tagestemperatur_HK1 | p/s | °C | |
C08:Nachttemperatur_HK1 | p/s | °C | |
C09:TemperaturFeineinstellung_HK1 | p/s | - | |
C10:Raumeinfluss_HK1 | p/s | % | |
C11:Vorlauf_Soll_HK1 | p | °C | |
C12:Anlagenmodus_HK2 | p/s | - | Tag, Nacht, Standby, Timer |
C13:Tagestemperatur_HK2 | p/s | °C | |
C14:Nachttemperatur_HK2 | p/s | °C | |
C15:TemperaturFeineinstellung_HK2 | p/s | - | |
C16:Raumeinfluss_HK2 | p/s | % | |
C17:Vorlauf_Soll_HK2 | p | °C | |
C18:Anlagenmodus_HK3 | p/s | - | Tag, Nacht, Standby, Timer |
C19:Tagestemperatur_HK3 | p/s | °C | |
C20:Nachttemperatur_HK3 | p/s | °C | |
C21:TemperaturFeineinstellung_HK3 | p/s | - | |
C22:Raumeinfluss_HK3 | p/s | % | |
C23:Vorlauf_Soll_HK3 | p | °C | |
C24:LaufzeitSolarpumpe | p | h | |
C25:LaufzeitSolarpumpe2 | p | h | |
C26:Warmwasserzirkulation_Puls | p/s | - | true: aktiv |
C27:Warmwasserzirkulation_Zeit | p/s | - | true: aktiv |
C28:WW_Pumpe_Min_Laufzeit | p/s | s | 1, 2, 3, ..., 119, 120, 150, 180, 210, 240, 270 300 |
C29:BetriebsartVT_HK1 | p/s | - | Kurve, Fix |
C30:Steilheit_HK1 | p/s | - | |
C31:Fix_Vorlauf_Tag_HK1 | p/s | °C | |
C32:Fix_Vorlauf_Absenk_HK1 | p/s | °C | |
C33:Min_Vorlauf_Temp_HK1 | p/s | °C | |
C34:BetriebsartVT_HK2 | p/s | - | Kurve, Fix |
C35:Steilheit_HK2 | p/s | - | |
C36:Fix_Vorlauf_Tag_HK2 | p/s | °C | |
C37:Fix_Vorlauf_Absenk_HK2 | p/s | °C | |
C38:Min_Vorlauf_Temp_HK2 | p/s | °C |
Die Kanäle C*:* werden aus dem GUI der SolvisControl2 ermittelt.