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.

Heizungsdashboard

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.

Node Red Flow

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;