@manuel001 Bitte gern! Ich habe auch lang genug auf den Hersteller (Bartl) nervend eingewirkt, bis ich die Listen bekommen habe
Die in der WP verbaute Steuerung ist eine KEBA KeEnergy. Die Oberfläche sieht exakt aus wie andere hier im Forum erwähnte Wärmepumpensteuerungen, nur dass eben rechts oben das Bartl-Logo steht. Hatte aufgrund dieser Tatsache erst bei KEBA versucht, die Liste zu bekommen (leider erfolglos, man spricht dort nicht mit Endkunden). Erst beim Hersteller konnte ich mich dann durchbeißen.
Habe gestern noch versucht, alle für mich interessant klingenden Register einzukonfigurieren. Auch bei mir funktionieren einige Register nicht (was ja nicht sein sollte), daher bin ich auf die Scriptlösung von weiter oben ausgewichen und habe die erweritert. Sieht nun wie folgt aus bei mir:
/**
* This script reads data from a hautec heater Keba controller.
* www.hautec.eu
*/
const request = require('request');
const heizung_host = '192.168.178.18';
const urlOfHeatpump = 'http://' + heizung_host + '/var/readWriteVars';
const jsondata = [{"name":"APPL.CtrlAppl.sParam.outdoorTemp.values.actValue"}];
// all values I want to receive
const jsonRequest = [
{"name":"APPL.CtrlAppl.sParam.param.setControlMode"},
{"name":"APPL.CtrlAppl.sParam.heatCircuit[0].tempRoom.values.actValue"},
{"name":"APPL.CtrlAppl.sParam.hotWaterTank[0].topTemp.values.actValue"},
{"name":"APPL.CtrlAppl.sParam.heatCircuit[0].humidityRoom.values.actValue"},
{"name":"APPL.CtrlAppl.sParam.outdoorTemp.values.actValue"},
{"name":"APPL.CtrlAppl.sParam.heatCircuit[0].values.setValue"},
{"name":"APPL.CtrlAppl.sParam.heatCircuit[0].param.offsetRoomTemp"},
{"name":"APPL.CtrlAppl.sParam.heatCircuit[0].values.selectedSetTemp"},
{"name":"APPL.CtrlAppl.sParam.heatCircuit[0].values.heatRequest"},
{"name":"APPL.CtrlAppl.sParam.heatCircuit[0].values.coolRequest"},
{"name":"APPL.CtrlAppl.sParam.hotWaterTank[0].values.heatRequestTop"},
{"name":"APPL.CtrlAppl.sParam.outdoorTemp.state.msgId"},
{"name":"APPL.CtrlAppl.sParam.hotWaterTank[0].topTemp.state.msgId"},
{"name":"APPL.CtrlAppl.sParam.heatCircuit[0].humidityRoom.state.msgId"},
{"name":"APPL.CtrlAppl.sParam.heatCircuit[0].param.operatingMode"},
{"name":"APPL.CtrlAppl.sParam.heatCircuit[0].tempRoom.state.msgId"},
{"name":"APPL.CtrlAppl.sParam.screedDrying.values.active"},
{"name":"APPL.CtrlAppl.sParam.param.operatingMode"},
{"name":"APPL.CtrlAppl.sParam.hmiRetainData.ctrlSessionId"},
{"name":"APPL.CtrlAppl.sParam.hotWaterTank[0].param.normalSetTempMax.value"},
{"name": "APPL.CtrlAppl.sParam.hotWaterTank[0].values.heatRequestTop"},
{"name": "APPL.CtrlAppl.sParam.heatCircuit[0].tempReflux.values.actValue"},
{"name": "APPL.CtrlAppl.sParam.heatCircuit[0].values.flowSetTemp"},
{"name":"APPL.CtrlAppl.sParam.heatpump[0].TempSourceIn.values.actValue"},
{"name":"APPL.CtrlAppl.sParam.heatpump[0].TempSourceOut.values.actValue"},
{"name":"APPL.CtrlAppl.sParam.heatpump[0].values.heatpumpState","value":"0"}
];
const jsonAsString = JSON.stringify(jsonRequest);
// create all the states in broker
createState('javascript.'+instance+'.Heizung.Aussentemperatur', 0, {type: 'number', role: 'value', unit: '°C'});
createState('javascript.'+instance+'.Heizung.Boilertemperatur.ist', 0, {type: 'number', role: 'value', unit: '°C'});
createState('javascript.'+instance+'.Heizung.Boilertemperatur.soll', 0, {type: 'number', role: 'value', unit: '°C'});
createState('javascript.'+instance+'.Heizung.Raumtemperatur.ist', 0, {type: 'number', role: 'value', unit: '°C'});
createState('javascript.'+instance+'.Heizung.Raumtemperatur.soll', 0, {type: 'number', role: 'value', unit: '°C'});
createState('javascript.'+instance+'.Heizung.Boiler.aufheizen', 0, {type: 'boolean', role: 'value', unit: ''});
createState('javascript.'+instance+'.Heizung.Heizung.aufheizen', 0, {type: 'boolean', role: 'value', unit: ''});
createState('javascript.'+instance+'.Heizung.RuecklaufTemp.ist', 0, {type: 'number', role: 'value', unit: '°C'});
createState('javascript.'+instance+'.Heizung.RuecklaufTemp.soll', 0, {type: 'number', role: 'value', unit: '°C'});
createState('javascript.'+instance+'.Heizung.QuelleTempEingang', 0, {type: 'number', role: 'value', unit: '°C'});
createState('javascript.'+instance+'.Heizung.QuelleTempAusgang', 0, {type: 'number', role: 'value', unit: '°C'});
createState('javascript.'+instance+'.Heizung.WP-Status', 0, {type: 'boolean', role: 'value', unit: ''});
createState('javascript.'+instance+'.Heizung.WP-StatusText', 0, {type: 'string', role: 'value', unit: ''});
// every minute read the data from the heater and save it
schedule("* * * * *", function() {
request.post({
url: urlOfHeatpump,
form: jsonAsString
}, function(error, response, body) {
if (error) log(error, 'error');
if (body) {
//log(body);
var responseBody = JSON.parse(body);
setState('javascript.'+instance+'.Heizung.Aussentemperatur', parseFloat(responseBody[4].value), true);
setState('javascript.'+instance+'.Heizung.Boilertemperatur.ist', parseFloat(responseBody[2].value), true);
setState('javascript.'+instance+'.Heizung.Boilertemperatur.soll', parseFloat(responseBody[19].value), true);
setState('javascript.'+instance+'.Heizung.Raumtemperatur.ist', parseFloat(responseBody[1].value), true);
setState('javascript.'+instance+'.Heizung.Raumtemperatur.soll', parseFloat(responseBody[5].value), true);
if (parseInt(responseBody[8].value) == 1) {
setState('javascript.'+instance+'.Heizung.Heizung.aufheizen', true);
}
// if (parseInt(responseBody[8].value) == 2) {
else {
setState('javascript.'+instance+'.Heizung.Heizung.aufheizen', false);
}
setState('javascript.'+instance+'.Heizung.Boiler.aufheizen', JSON.parse(responseBody[20].value), true);
setState('javascript.'+instance+'.Heizung.RuecklaufTemp.ist', parseFloat(responseBody[21].value), true);
setState('javascript.'+instance+'.Heizung.RuecklaufTemp.soll', parseFloat(responseBody[22].value), true);
setState('javascript.'+instance+'.Heizung.QuelleTempEingang', parseFloat(responseBody[23].value), true);
setState('javascript.'+instance+'.Heizung.QuelleTempAusgang', parseFloat(responseBody[24].value), true);
setState('javascript.'+instance+'.Heizung.WP-Status', parseFloat(responseBody[25].value), true);
if (parseInt(responseBody[25].value) == 0) {
setState('javascript.'+instance+'.Heizung.WP-StatusText', 'Standby', true);
}
else if (parseInt(responseBody[25].value) == 1) {
setState('javascript.'+instance+'.Heizung.WP-StatusText', 'Vorlauf', true);
}
else if (parseInt(responseBody[25].value) == 2) {
setState('javascript.'+instance+'.Heizung.WP-StatusText', 'Heizbetrieb', true);
}
else if (parseInt(responseBody[25].value) == 3) {
setState('javascript.'+instance+'.Heizung.WP-StatusText', 'Abtaubetrieb', true);
}
else if (parseInt(responseBody[25].value) == 4) {
setState('javascript.'+instance+'.Heizung.WP-StatusText', 'Kühlbetrieb', true);
}
else if (parseInt(responseBody[25].value) == 5) {
setState('javascript.'+instance+'.Heizung.WP-StatusText', 'Nachlauf', true);
}
else if (parseInt(responseBody[25].value) == 7) {
setState('javascript.'+instance+'.Heizung.WP-StatusText', 'Sicherheitsabschaltung', true);
}
else if (parseInt(responseBody[25].value) == 8) {
setState('javascript.'+instance+'.Heizung.WP-StatusText', 'Störung', true);
}
}
});
});
Die gewonnenen Werte speichere ich in meiner InfluxDB und lasse sie in Grafana

sowie iQontrol

anzeigen. Vorsicht übrigens bei Zeile 79/80 im Script, das habe ich angepasst weil mir der Wert falsch vorkam.