Anbindung an verschiedene SmartHome Systeme - GollmerSt/SolvisSmartHomeServer GitHub Wiki
Für das Smarthome-System FHEM existiert ein spezielles Modul, das die Client-Server-Schnittstelle nutzt. Es ist im Programmpaket enthalten und sollte in das FHEM-Verzeichnis kopiert werden.
Wenn das FHEM auf einem Linux-Rechner installiert ist, kann es mittels Make - wie hier beschrieben – in das System eingebunden werden. Dabei werden auch die Rechte entsprechend gesetzt.
Für ioBroker existiert (bisher) kein spezieller Adapter. Zu Anbindung kann der Adapter MQTT Broker/Client oder MQTT-Client verwendet werden.
Leider habe ich mit der aktuellen Version 2.1.2 des MQTT Broker/Clients keinen stabilen Betrieb. Dieses Problem scheinen auch andere zu besitzen:
https://forum.iobroker.net/topic/32143/mqtt-problem
Wenn die stable-Version des MQTT Broker wieder aktualisiert ist, werde ich mich damit beschäftigen. Es kann natürlich daher kommen, weil ich ioBroker auf einer virtuellen Maschine laufen lasse und der Server auf dem Entwicklungs-PC läuft. Da ich selber als MQTT Broker den Mosqitto schon jahrelang verwende, hat das aktuell eine niedrige Priorität.
Dazu muss ein MQTT Broker im System existieren. Ich empfehle den Mosquitto. Mit diesem läuft mein SmartHome-System schon seit Jahren problemlos. Den MQTT-Test des SolvisSmartHomeServers erfolgte ebenfalls mit diesem Broker.
Der MQTT-Client ist wie folgt einzurichten:
Einstellung | Wert | Bedeutung |
---|---|---|
MQTT Broker IP | 192.168.0.71 (Beispiel) | IP-Adresse des MQTT Brokers, z.B. Mosquitto (Server) |
Client ID | ioBrokerSolvisClient (Beispiel) | Im MQTT-System eindeutige ClientId |
Topic bei Verbindung | Topic/Client/online | Topic, der bei Verbindung gesendet wird |
Meldung bei Verbindung | true | Meldung, welche bei Verbindung gesendet wird |
last will topic | Topic/Client/online | Topic, der bei Verbindungsverlust gelten soll |
last will message | false | Meldung, welche bei Verbindungsverlust gilt |
Zusätzliche subscriptions | Topic/# | Subscription, welche automatisch geholt werden, nur erforderlich, wenn man die Objektliste selber erstellen will. |
Hierbei ist
Topic | Der Wert von topicPrefix der in die base.xml einzutragen ist. |
Client | Ein vom User festzulegender Name, über den der ioBroker MQTT Client beim SolvisSmartHomeServer identifiziert wird (z.B. ioBroker). |
Im Installationspaket befindet sich die Datei mqtt.0.SolvisSmartHomeServer.json mit der Objektliste für die Heizungsanlage.
Der Server kann über eine Command-Line-Option eine zu der aktuellen Anlagenkonfiguration passende Objektliste mit einem Pairing-Skript generieren.
Dazu ist in der base.xml die Iobroker-Sektion entsprechend der aktuellen iobroker-Konfiguration anzupassen. Dabei handelt es sich um folgende Attribute:
Attribut | Bedeutung |
---|---|
iobrokerName | Name, unter dem sich der iobroker beim Server identifiziert (default: IoBroker). |
mqttInterface | Name des Mqtt-Interface auf der iobroker-Seite. Dieser wird der Prefix des Objektnamens (default: mqtt-client.0). |
javascriptInterface | Prefix der generierten Pairing-Objekte (default: javascript.0). |
Den Server kann man mit den entsprechenden CLI-Optionen dann entweder unter Linux mittels dem Makefile mit folgendem Befehl generieren
sudo make iobroker
oder man nutzt unter Windiows den Startmenüpunkt SolvisSmarthomeServer\CreateIobroker.
Wichtig: Vorher muss einmal das Learning fehlerfrei durchgelaufen sein, da ein Teil der Anlagen-Konfiguration während des Learnings ermittelt wird.
Unter dem im base.xml beschreibaren Pfad liegen dann folgende Dateien:
Name | Bedeutung |
---|---|
Appendix/mqtt-client.0.SolvisSmartHomeServer.json | Json-Datei mit den Iobroker-Objekten passen zur Anlage |
Appendix/solvis_pairing.js | Der dazugehörige Pairing-Skript |
Die Beschreibung der MQTT-Topics findet sich im Anhang unter der MQTT-Schnittstelle. Die Dateien mqtt.0.SolvisSmartHomeServer.json sowie solvis_pairing.js basierwn auf folgenden Werten:
Zu jedem Kanal gibt es folgende Objekte:
Objekt | Bedeutung |
---|---|
data | Daten des Kanals vom letzten Auslesen |
meta | Die Beschreibung des Kanals |
cmnd | Objekt über das man beschreibbare Werte ändern kann |
update | Objekt, mit dem man einen Update eines nur von dem Gui der SolvisControl lesbaren Kanals anstoßen kann. (Beliebigen Wert in dieses Objekt schreiben). |
Das Objekt cmnd existiert nur für beschreibbare Känale, wie Solltemperaturen, Pumpensteuerung etc. Das Object update existiert nur für Känale, welche nur über das Gui der SolvisControl gelesen werden können.
Der Pairing-Skript dient dazu, die bei den beschreibbaren Kanälen vorhandenen cmnd- und data-Objekte zu "pairen". Ich habe mich dabei von diesem ioBroker-Forums-Beitrag inspirieren lassen. Auch sie kann entsprechend angepasst werden. Der Hintergrund für das Pairing ist der, dass die meisten ioBroker-Elemente wie z.B. Schieberegeler für Objekte gedacht sind, welche sowohl eine Lese- als auch Schreibmöglichkeit besitzen.
Durch den Script solvis_pairing.js werden noch die sowohl les- als auch beschreibbaren .rw-Objekte erstellt. Es sind folgende Objekte (im Maximal-"Ausbau"):
Objekt-Name |
---|
javascriptInterface.id.C01:StartsBrenner.rw |
javascriptInterface.id.C02:LaufzeitBrenner.rw |
javascriptInterface.id.C03:LaufzeitAnforderung2.rw |
javascriptInterface.id.C04:WarmwasserPumpe.rw |
javascriptInterface.id.C05:WassertemperaturSoll.rw |
javascriptInterface.id.C06:Anlagenmodus_HK1.rw |
javascriptInterface.id.C07:Tagestemperatur_HK1.rw |
javascriptInterface.id.C08:Nachttemperatur_HK1.rw |
javascriptInterface.id.C09:TemperaturFeineinstellung_HK1.rw |
javascriptInterface.id.C10:Raumeinfluss_HK1.rw |
javascriptInterface.id.C11:Vorlauf_Soll_HK1.rw |
javascriptInterface.id.C12:Anlagenmodus_HK2.rw |
javascriptInterface.id.C13:Tagestemperatur_HK2.rw |
javascriptInterface.id.C14:Nachttemperatur_HK2.rw |
javascriptInterface.id.C15:TemperaturFeineinstellung_HK2.rw |
javascriptInterface.id.C16:Raumeinfluss_HK2.rw |
javascriptInterface.id.C17:Vorlauf_Soll_HK2.rw |
javascriptInterface.id.C18:Anlagenmodus_HK3.rw |
javascriptInterface.id.C19:Tagestemperatur_HK3.rw |
javascriptInterface.id.C20:Nachttemperatur_HK3.rw |
javascriptInterface.id.C21:TemperaturFeineinstellung_HK3.rw |
javascriptInterface.id.C22:Raumeinfluss_HK3.rw |
javascriptInterface.id.C23:Vorlauf_Soll_HK3.rw |
javascriptInterface.id.C24:LaufzeitSolarpumpe.rw |
javascriptInterface.id.C25:LaufzeitSolarpumpe2.rw |
javascriptInterface.id.C26:Warmwasserzirkulation_Puls.rw |
javascriptInterface.id.C27:Warmwasserzirkulation_Zeit.rw |
javascriptInterface.id.C28:WW_Pumpe_Min_Laufzeit.rw |
javascriptInterface.id.C29:WaermemengeWW.rw |
javascriptInterface.id.C30:WaermemengeSolar.rw |
javascriptInterface.id.C31:BetriebsartVT_HK1.rw |
javascriptInterface.id.C32:Steilheit_HK1.rw |
javascriptInterface.id.C33:Fix_Vorlauf_Tag_HK1.rw |
javascriptInterface.id.C34:Fix_Vorlauf_Absenk_HK1.rw |
javascriptInterface.id.C35:Min_Vorlauf_Temp_HK1.rw |
javascriptInterface.id.C36:BetriebsartVT_HK2.rw |
javascriptInterface.id.C37:Steilheit_HK2.rw |
javascriptInterface.id.C38:Fix_Vorlauf_Tag_HK2.rw |
javascriptInterface.id.C39:Fix_Vorlauf_Absenk_HK2.rw |
javascriptInterface.id.C40:Min_Vorlauf_Temp_HK2.rw |
javascriptInterface.id.C41:BetriebsartVT_HK3.rw |
javascriptInterface.id.C42:Steilheit_HK3.rw |
javascriptInterface.id.C43:Fix_Vorlauf_Tag_HK3.rw |
javascriptInterface.id.C44:Fix_Vorlauf_Absenk_HK3.rw |
javascriptInterface.id.C45:Min_Vorlauf_Temp_HK3.rw |
Hierbei ist javascriptInterface das Attribut javascriptInterface aus der Sektion Iobroker und id das Attribut id der Sektion Unit aus der base.xml. Je nach Konfiguration gibt es nur eine teilmenge der gepairten Objekte.