MQTT Schnittstelle - GollmerSt/SolvisSmartHomeServer GitHub Wiki

Allgemeines

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.

Aufstellung aller vom SolvisSmartHomeServer verwendete Topics (ab V01.04.00)

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.

Present Topics

Alle Topics, welche der Server schreibt (publish) sind vom Typ „present“ mit Ausnahme von „prefix/ client /error“.

Serverspezifische Topics

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"]

Unit- & Serverspezifische Topics

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"]

Unit-spezifische Topics

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

Aktuell definierte Channels (Stand 18.08.2020)

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

Anmerkung:

Die Kanäle C*:* werden aus dem GUI der SolvisControl2 ermittelt.

⚠️ **GitHub.com Fallback** ⚠️