September 2015 haben wir eine neue Weishaupt Heizung bekommen zusammen mit einem WCM-COM siehe auch in Heizung Reloaded.
Seit dem sammelt ein Raspberry Pi mit Node-Red die Daten aus dem
WCM-COM Home der Heizung zusammen und veröffentlicht die Werte auf je
eigenen mqtt Topics home/weishaupt/+
.
Die Topics werden von unterschiedlichen Diensten abonniert, zum einen von einer weiteren Node-Red Instanz die die Daten in einer Influx Datenbank als Zeitreihe speichert und zum anderen von einem OpenHAB das die Werte auf einem Dashboard anzeigt.
Nachdem die Werte ja schon angezeigt werden kommt schnell der Wunsch auf die Werte auch dort setzen zu können. Werte ich ich hier setzen möchte sind die Betriebsart (Normal, Absenk, Programm 1..3 …) und die Raumtemperatur
Da der WCM-COM Home keine parallel Zugriffe von mehreren Geräten
verarbeiten kann hab ivh das in den gleichen Node-Red Flow mit
eingebaut der auch die Werte abfragt. Hierzu abonniert der Flow das
Topic home/weishaupt/+/set
und baut die entsprechenden JSON Requests
zusammen die dafür an die Heizung geschickt werden müssen.
Die beiden Funktionen die die entsprechenden JSON Requests
zusammenbauen heissen Encode Betriebsart
und Encode Raumtemperatur
im Node-Red Flow.
Encode Betriebsart
low = msg.payload % 256;
high = Math.floor(msg.payload / 256);
req = '{"prot":"coco","telegramm":[[6,0,2,274,0,0,' + low +','+ high +']]}';
node.log(req);
msg.topic = "home/weishaupt";
msg.payload = req;
return msg;
Encode Raumtemperatur
if ((msg.payload < 10) || (msg.payload > 35)) {
node.log("Raumtemperatur ausserhalb 10..35°C");
return null;
}
temp = msg.payload * 10;
low = temp % 256;
high = Math.floor(temp / 256);
req = '{"prot":"coco","telegramm":[[6,0,2,5,0,0,' + low +','+ high +']]}';
node.log(req);
msg.topic = "home/weishaupt";
msg.payload = req;
return msg;