Hinweise zur Realisierung auf der SmartHomeSystem Seite - GollmerSt/SolvisSmartHomeServer GitHub Wiki

In Arbeit

Die folgenden Hinweise gelten allgemein für alle SmartHomeSystem, welche entweder mittels der Server-Client- oder der MQTT-Schnittstelle angebunden sind.

Die eigentliche Realisierung ist natürlich sehr SmartHomeSystem-abhängig, hier können daher nur allgemeine Hinweise gegeben werden.

Bei der folgenden Beschreibung beziehe ich mich mehr auf die MQTT-Schnittstelle, für die Server-Client-Schnittstelle gilt entsprechendes.

Einstellung der Sollwerte

Zur Einstellung der Sollwerte können beispielsweise mittels eines Dreh- oder Schieberegler erfolgen. Der Einstellbereich der Regler und die Stufen können den vom Server gesendeten Meta-Daten entnommen werden.

Auswertung der Meta-Beschreibung

Unter MQTT existiert dafür folgender Topic, hier für die Warmwasser-Temperatur:

SolvisSmartHomeServer/mySolvis/C05:WassertemperaturSoll/meta

Dieses Topic liefert folgende JSON-Struktur:

{  
    "Writeable":true,  
    "Type":"CONTROL",  
    "Unit":"°C",  
    "Accuracy":1.0,  
    "IsBoolean":false,  
    "Upper":65.0,  
    "Lower":10.0,  
    "Step":1.0
}

Dieser JSON-Ausdruck gibt an, dass die Einheit °C ist, der kleinste Wert somit 10,0°C, der größte 65°C und die Schrittbreite 1°C beträgt. Entsprechend diesen Angaben kann man dann einen Schieberegler oder Drehknopf definieren.

Bei der FHEM-Server-Client-Lösung sind diese Einstellbereiche nur indirekt zu erkennen und zwar über das dort zur Verfügung gestellte Modul. Die möglichen Einstellungen sind dort über die Pull-Down-Menüs der verschiedenen SET-Befehle sichtbar. Die Einheit wird in der FHEM-Umgebung bei dem Datenbank-Log verwendet. In diese werden die Werte mit Einheit geschrieben. Entsprechend stellt das Modul die dafür erforderliche Methode zur Verfügung.

Lese- und Schreibwerte

Werte werden über die MQTT-Schnittstelle immer als String übergeben um Big- bzw. Little-Endian-Probleme zu umgehen.

Unter folgendem Topic kann man den aktuell eingestellten Sollwert auslesen (subscribe):

SolvisSmartHomeServer/mySolvis/C05:WassertemperaturSoll/data

In der dem Installationspaket beiliegenden ioBroker-Objekt-Liste ist diesem Pfad entsprechendes Objekt angelegt. Eine Veränderung (z.B. Änderung durch den Anwender direkt an der SolvisControl2 bewirkt dann ein Ereignis/Event mit diesem Pfad.

Mit diesem Ereignis/Event muss man dann den aktuellen Wert des Dreh-/Schiebereglers setzen.

Eine Sollwert-Veränderung erfolgt über folgenden Topic (publish):

SolvisSmartHomeServer/IoBroker/mySolvis/C05:WassertemperaturSoll/cmnd

Bei der ioBroker-Objektliste ist der publish-Topic als folgendes Objekt abgebildet:

SolvisSmartHomeServer/mySolvis/C05:WassertemperaturSoll/cmnd

Mit dem gelesenen Sollwert stellt man dann denn Wert den aktuellen Wert des Dreh-/Schiebereglers ein.

In manchen SmartHomeSystem - wie auch dem ioBroker - sind die Bedienungselemente so definiert, dass das zu schreibende Objekt identisch mit dem zu lesenden Objekt sein müsste. Das ist jedoch bei der MQTT-Schnittstelle nicht sinnvoll bzw. kann - je nach MQTT-Client - zu Rückkoppelungen führen.

Der MQTT-Broker würde in diesem Fall den gesetzten Wert direkt an den Sender wieder zurück senden. Im ungünstigsten Fall sendet das Schaltelement den vom MQTT-Broker zurückgesendeten Wert wieder an den Broker zurück, man hätte eine Rückkoppelung. Aus diesem Grund wurde auf der Server-Seite daher diese Topics nicht zusammengefasst.

Um dieses Problem zu lösen, sollte man das cmnd- und data-Objekt in einem neuen zusammenfassen. Das macht die dem Projekt beiliegenden ioBroker-spezifischen solvis_pairing.js-Datei. Dann hat man ganz unabhängig von den genutzten Elementen die Kontrolle und kann so Rückkoppelungen vermeiden.

Der Server selber schickt die nach der Auführung die eingestellten Werte zurück, das kann recht lange dauern. So dauert es im ungünstigsten Fall rund 2,5 Minuten, bis der Sollwert der Heizwasserttemperatur von 10°C auf 65° gestellt wurde (sicher ein Extremfall). Der Server selber ist darauf vorbereitet, dass ein "Echo" für dieses Wertes an ihn zurückgesendet wird.