Mit Hilfe des EMS-Collectors kann die Heizung verhältnismäßig einfach in OpenHAB eingebunden werden. Das dafür verwendete Protokoll heißt MQTT, wofür schon ein OpenHAB-Binding existiert.
Wenn alles gut ging, sollte jetzt eine Datei namens 'collectord' im Verzeichnis liegen. Der muss jetzt installiert und als Service gestartet werden - siehe hierfür wieder obige Anleitung :) Als Inhalt der ems-collector.conf empfiehlt sich hierbei folgendes:
mqtt-broker = MQTT_IP:1883 command-port = 7777 data-port = 7778
MQTT_IP ist die IP-Adresse (oder der Hostname) des Servers, auf dem Mosquitto läuft. command-port und data-port sind streng genommen optional, aber nützlich für's Debugging
Man kann diesen Schritt auch überspringen, aber es ist immer hilfreich, mal zu schauen, ob alles geht Um zu überprüfen, ob der installierte Collector die EMS-Daten richtig weiterleitet, installieren wir den Mosquitto-Client (Debian-Paket 'mosquitto-clients') und warten darauf, EMS-Daten zu bekommen:
mosquitto_sub -v -t '/ems/#'
Nach ein paar Sekunden sollten die Namen der Werte und die eigentlichen Werte vorbeiscrollen.
Jetzt fehlt nur noch ein Schritt: Das Anlegen von OpenHAB-Items für die EMS-Daten. Zunächst muss das MQTT-Binding konfiguriert werden, damit sich OpenHAB mit Mosquitto verbindet - siehe hierfür das OpenHAB-Wiki. Wenn dieses getan ist, fehlt nur noch eine .items-Datei, bei der jeder Eintrag in etwa wie folgt aussieht:
Number HeizungVorlaufHK1Soll "Vorlauf HK1 Soll [%.1f °C]" {mqtt="<[mosquitto:/ems/sensor/hk1/targettemperature/value:state:default]"}
Sensoren:
/ems/sensor/3wayonww/value /ems/sensor/burner/targetmodulation/value /ems/sensor/burner/currentmodulation/value /ems/sensor/errorcode/value /ems/sensor/exhaust/currenttemperature/value /ems/sensor/flameactive/value /ems/sensor/flamecurrent/value /ems/sensor/flamecurrent/value /ems/sensor/heater/targettemperature/value /ems/sensor/heater/currenttemperature/value /ems/sensor/heater/pumpactive/value /ems/sensor/heater/heaterstarts/value /ems/sensor/heater/operatingminutes/value /ems/sensor/heater/operatingminutes2/value /ems/sensor/heater/heatingminutes/value /ems/sensor/heater/currenttemperature/value /ems/sensor/heateractive/value /ems/sensor/heaterpump/currentmodulation/value /ems/sensor/heatexchanger/currenttemperature/value /ems/sensor/hk1/offoptimization/value /ems/sensor/hk1/onoptimization/value /ems/sensor/hk1/wwoverride/value /ems/sensor/hk1/floordrying/value /ems/sensor/hk1/frostprotectmodeactive/value /ems/sensor/hk1/summermode/value /ems/sensor/hk1/daymode/value /ems/sensor/hk1/opmode/value /ems/sensor/hk1/roomtargettemperature/value /ems/sensor/hk1/roomcurrenttemperature/value /ems/sensor/hk1/onoptimizationminutes/value /ems/sensor/hk1/offoptimizationminutes/value /ems/sensor/hk1/characteristic/value /ems/sensor/hk1/roomtemperaturechange/value /ems/sensor/hk1/requestedpower/value /ems/sensor/hk1/partymode/value /ems/sensor/hk1/pausemode/value /ems/sensor/hk1/vacationmode/value /ems/sensor/hk1/holidaymode/value /ems/sensor/hk1/switchpointactive/value /ems/sensor/hk1/targettemperature/value /ems/sensor/ignitionactive/value /ems/sensor/operatingminutes/value /ems/sensor/outdoor/dampedtemperature/value /ems/sensor/outdoor/currenttemperature/value /ems/sensor/outdoor/currenttemperature/value /ems/sensor/pressure/value /ems/sensor/returnflow/currenttemperature/value /ems/sensor/servicecode/value /ems/sensor/systemtime/value /ems/sensor/warmwaterminutes/value /ems/sensor/warmwaterpreparationactive/value /ems/sensor/warmwaterpreparations/value /ems/sensor/warmwatersystemtype/value /ems/sensor/warmwatertempok/value /ems/sensor/ww/targettemperature/value /ems/sensor/ww/currenttemperature/value /ems/sensor/ww/daymode/value /ems/sensor/ww/onetimeload/value /ems/sensor/ww/desinfectionactive/value /ems/sensor/ww/boostcharge/value /ems/sensor/ww/sensor1failure/value /ems/sensor/ww/sensor2failure/value /ems/sensor/ww/failure/value /ems/sensor/ww/desinfectionfailure/value /ems/sensor/ww/loading/value /ems/sensor/ww/flowrate/value /ems/sensor/zirkpump/daymode/value /ems/sensor/zirkpump/opmode/value /ems/sensor/zirkpumpactive/value
Commands:
Steuerbefehle können mittel eines Commands an den EMS Bus weitergegeben werden. z.B. lautet der Befehl zum Umstellen des Heizkreises 1 der Heizung auf den Tagbetrieb:
Ein MQTT Topic ist nach dem folgenden Pattern aufgebaut: <Präfix><Erste Ebene><Command> (ohne die jeweiligen Anführungszeichen)
Anhand von /ems/control/hk1/mode setzt sich der Topic wie folgt zusammen:
Präfix: „/ems/control/“
Erste Ebene "hk[1|2|3|4]" "ww" "uba" "rc" "raw" (optional Flag HAVE_RAW_READWRITE_COMMAND in Makefile must be uncommented) "cache" "getversion" "OK"
hk Commands: "mode [day|night|auto]" "daytemperature <temp>" "nighttemperature <temp>" "temperatureoverride <temp>" "getholiday" "holidaymode <start:YYYY-MM-DD> <end:YYYY-MM-DD>" "vacationtemperature <temp>" "getvacation" "vacationmode <start:YYYY-MM-DD> <end:YYYY-MM-DD>" "partymode <hours>" "pausemode <hours>" "getactiveschedule" "selectschedule [family|morning|early|evening|forenoon|noon|afternoon|single|senior|custom1|custom2]" "getcustomschedule [1|2]" "customschedule [1|2] <index> unset" "customschedule [1|2] <index> [monday|tuesday|...|sunday] HH:MM [on|off]" "scheduleoptimizer [on|off]" "mintemperature <temp>" "maxtemperature <temp>" "reductionmode [offmode|reduced|raumhalt|aussenhalt]" "heatingsystem [none|heater|floorheater|convection] [outdoor|indoor]" "vacationreductionmode [outdoor|indoor]" "maxroomeffect <temp>" "designtemperature <temp>" "roomtemperatureoffset <temp>" "frostprotectmode [off|byoutdoortemp|byindoortemp]" "frostprotecttemperature <temp>" "summerwinterthreshold <temp>" "reducedmodethreshold <temp>" "vacationreducedmodethreshold <temp>" "cancelreducedmodethreshold <temp>" "requestdata" "OK" ww Commands: "mode [on|off|auto]" "temperature <temp>" "limittemperature <temp>" "loadonce" "cancelload" "getcustomschedule" "customschedule <index> unset" "customschedule <index> [monday|tuesday|...|sunday] HH:MM [on|off]" "selectschedule [custom|hk]" "showloadindicator [on|off]" "thermdesinfect mode [on|off]" "thermdesinfect day [monday|tuesday|...|sunday]" "thermdesinfect hour <hour>" "thermdesinfect temperature <temp>" "zirkpump mode [on|off|auto]" "zirkpump count [1|2|3|4|5|6|alwayson]" "zirkpump getcustomschedule" "zirkpump customschedule <index> unset" "zirkpump customschedule <index> [monday|tuesday|...|sunday] HH:MM [on|off]" "zirkpump selectschedule [custom|hk]" "requestdata" "OK" uba Commands "antipendel <minutes>" "hyst [on|off] <kelvin>" "burnermodulation <minpercent> <maxpercent>" "pumpmodulation <minpercent> <maxpercent>" "pumpdelay <minutes>" "geterrors" "schedulemaintenance [off | byhour <hours / 100> | bydate YYYY-MM-DD]" "checkmaintenanceneeded" "testmode [on|off] <burnerpercent> <pumppercent> <3wayonww:[0|1]> <zirkpump:[0|1]>" "requestdata" "OK" rc Commands: "mintemperature <temp>" "buildingtype [light|medium|heavy]" "outdoortempdamping [on|off]" "requestdata" "geterrors" "getcontactinfo" "setcontactinfo [1|2] <text>" "settime YYYY-MM-DD HH:MM:SS" "OK" raw Commands: "read <target> <type> <offset> <len>" "write <target> <type> <offset> <data>" "OK" cache Commands: "fetch <key>" "OK" getversion commands "getversion"
Damit haben wir die EMS-Sensorwerte in OpenHAB übernommen und können sie dort weiterverarbeiten (anzeigen, in Regeln verwenden, über die Persistenzschicht in eine Datenbank schreiben usw. usf.). Prinzipiell ist auch die Steuerung der Heizung über OpenHAB möglich; hiermit wird sich eine spätere Version dieser Anleitung beschäftigen.