NEWS
Keba KeEnergy Heizungssteuerung (M-TEC WP) in Smarthome
-
Hat schon jemand die Keba KeEnergy Heizungssteuerung in ein Smarthome eingebunden?
Diese Heizungssteuerung wird z.B. in den M-TEC WĂ€rmepumpen eingebaut.
Ich habe es ĂŒber Modbus TCP realisiert. Allerdings bin ich damit nicht wirklich glĂŒcklich, weil die Modbus TCP Registerliste ziemlich dĂŒrftig ist.
z.B. kann man sich zwar die aktuelle Leistung in % von der Heizungspumpe (UmwÀlzpumpe) anzeigen lassen, aber nicht die aktuelle Leistung in % vom Verdichter der WÀrmepumpe, was ja wesentlich interessanter wÀre.
Vor allem wenn die Leistung wie bei mir abhĂ€ngig vom PV Ăberschuss geregelt wird.
Weiters gibt es kein Register mit der Solltemperatur, welche die Heizung aktuell als Ziel hat.Mich hÀtte jetzt einfach interessiert, ob sich auch schon andere Personen damit gequÀlt haben und ob bei anderen Herstellern die Smarthome Anbindungsmöglichkeiten auch so halbherzig implementiert sind.
Der Hersteller zeigt bisher ĂŒbrigens kein Interesse hier etwas zu verbessern. (bereits ĂŒber verschiedene Wege versucht) -
Hat schon jemand die Keba KeEnergy Heizungssteuerung in ein Smarthome eingebunden?
Diese Heizungssteuerung wird z.B. in den M-TEC WĂ€rmepumpen eingebaut.
Ich habe es ĂŒber Modbus TCP realisiert. Allerdings bin ich damit nicht wirklich glĂŒcklich, weil die Modbus TCP Registerliste ziemlich dĂŒrftig ist.
z.B. kann man sich zwar die aktuelle Leistung in % von der Heizungspumpe (UmwÀlzpumpe) anzeigen lassen, aber nicht die aktuelle Leistung in % vom Verdichter der WÀrmepumpe, was ja wesentlich interessanter wÀre.
Vor allem wenn die Leistung wie bei mir abhĂ€ngig vom PV Ăberschuss geregelt wird.
Weiters gibt es kein Register mit der Solltemperatur, welche die Heizung aktuell als Ziel hat.Mich hÀtte jetzt einfach interessiert, ob sich auch schon andere Personen damit gequÀlt haben und ob bei anderen Herstellern die Smarthome Anbindungsmöglichkeiten auch so halbherzig implementiert sind.
Der Hersteller zeigt bisher ĂŒbrigens kein Interesse hier etwas zu verbessern. (bereits ĂŒber verschiedene Wege versucht)@manuel001 Ich habe auch eine WĂ€rmepumpe mit der Steuerung. Wir könnten uns gerne mal austauschen. Schreib mir gerne eine private Nachricht, so dass wir unsere Kontaktdaten austauschen können
-
Hat schon jemand die Keba KeEnergy Heizungssteuerung in ein Smarthome eingebunden?
Diese Heizungssteuerung wird z.B. in den M-TEC WĂ€rmepumpen eingebaut.
Ich habe es ĂŒber Modbus TCP realisiert. Allerdings bin ich damit nicht wirklich glĂŒcklich, weil die Modbus TCP Registerliste ziemlich dĂŒrftig ist.
z.B. kann man sich zwar die aktuelle Leistung in % von der Heizungspumpe (UmwÀlzpumpe) anzeigen lassen, aber nicht die aktuelle Leistung in % vom Verdichter der WÀrmepumpe, was ja wesentlich interessanter wÀre.
Vor allem wenn die Leistung wie bei mir abhĂ€ngig vom PV Ăberschuss geregelt wird.
Weiters gibt es kein Register mit der Solltemperatur, welche die Heizung aktuell als Ziel hat.Mich hÀtte jetzt einfach interessiert, ob sich auch schon andere Personen damit gequÀlt haben und ob bei anderen Herstellern die Smarthome Anbindungsmöglichkeiten auch so halbherzig implementiert sind.
Der Hersteller zeigt bisher ĂŒbrigens kein Interesse hier etwas zu verbessern. (bereits ĂŒber verschiedene Wege versucht)@manuel001 Ich bin einen anderen Ansatz gegangen, die WeboberflĂ€che lĂ€sst sich nett abfragen. Werden JSON zurĂŒckgeliefert. Ich schicke mal meine Ansatz dazu.
-
@socke Hast du auch eine Heizung von M-TEC?
WĂ€re toll, wenn es eine Alternative zu der lĂŒckenhaften Modbus Liste geben wĂŒrde.
Es ist echt ĂŒbel, dass ich fĂŒr meine Visualisierung statt der Leistung vom Verdichter die Leistung (in %) von der UmwĂ€lzpumpe nehmen muss, damit ich irgendeine Hausnummer habe. -
@manuel001 Ich bin einen anderen Ansatz gegangen, die WeboberflĂ€che lĂ€sst sich nett abfragen. Werden JSON zurĂŒckgeliefert. Ich schicke mal meine Ansatz dazu.
@socke Ich habe eine Heizung von Hautec, die aber auch den Controller nutzt. Zwar komme ich schon an einige Werte per Modbus TCP ran,

jedoch fehlen mir z.B. Vorlauf/RĂŒcklauftemperaturen der Quelle und der Heizkreise. Ich bin also auch an deiner Lösung interessiert! :)
-
@socke Hast du auch eine Heizung von M-TEC?
WĂ€re toll, wenn es eine Alternative zu der lĂŒckenhaften Modbus Liste geben wĂŒrde.
Es ist echt ĂŒbel, dass ich fĂŒr meine Visualisierung statt der Leistung vom Verdichter die Leistung (in %) von der UmwĂ€lzpumpe nehmen muss, damit ich irgendeine Hausnummer habe.@manuel001 Die Realtime Leistung des Verdichters kommt tatsĂ€chlich nicht zurĂŒck, sondern wird von dem Regler 1,5kW als Leistung als fester Wert zurĂŒckgegeben. Das stimmt auch fast +-100 Watt.
Meine Heizung ist von Hautec mit dem Keba-Regler.
Wozu musst du eigentlich den genauen Wert haben? Du solltest sowieso nicht den Verdichter zig-mal an- und ausschalten. Sprich ĂŒberleg dir genau wie du die Schwelle setzt.Aktuell hab ich noch keine prĂ€zise Strommessung im Haus, kommt in KĂŒrze, aber ich mache das gerade so:
- wenn Durchschnitt PV-Leistung der letzten 15 Minuten >3k => aktiviere Ăberschussladen.
-
@socke Ich habe eine Heizung von Hautec, die aber auch den Controller nutzt. Zwar komme ich schon an einige Werte per Modbus TCP ran,

jedoch fehlen mir z.B. Vorlauf/RĂŒcklauftemperaturen der Quelle und der Heizkreise. Ich bin also auch an deiner Lösung interessiert! :)
Ich pack hier mal meine "gebastelte" Lösung rein, das ist tatsĂ€chlich Vor- und RĂŒcklauftemp dabei, aber ich speichere nicht alle Werte aktuell.
Wenn ich mal Zeit habe đ mach ich das mal "schön".
Heizung host mit IP ersetzen!
Das unschöne ist, dass die RĂŒckgabewerte in responseBody[]-array reinkommen, die Reihenfolge ist, soweit ich das aber erkenne, diesselbe wie die Anfrage, also im jsonRequest.
/** * This script reads data from a hautec heater Keba controller. * www.hautec.eu */ const request = require('request'); const heizung_host = '192.168.100.99'; 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"} ]; 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'}); // 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) { setState('javascript.'+instance+'.Heizung.Heizung.aufheizen', false); } setState('javascript.'+instance+'.Heizung.Boiler.aufheizen', JSON.parse(responseBody[20].value)); setState('javascript.'+instance+'.Heizung.RuecklaufTemp.ist', parseFloat(responseBody[21].value)); setState('javascript.'+instance+'.Heizung.RuecklaufTemp.soll', parseFloat(responseBody[22].value)); } }); });Wen es interessiert wie ich darauf gekommen bin?
âĄHeizungscontroller im Browser aufrufen, Chrome, rechte Maustaste "Untersuchen"
in den Menues kann man dann immer die Requests und Responses "sniffen". Da ist auch nix verschlĂŒsselt.
-
Ich pack hier mal meine "gebastelte" Lösung rein, das ist tatsĂ€chlich Vor- und RĂŒcklauftemp dabei, aber ich speichere nicht alle Werte aktuell.
Wenn ich mal Zeit habe đ mach ich das mal "schön".
Heizung host mit IP ersetzen!
Das unschöne ist, dass die RĂŒckgabewerte in responseBody[]-array reinkommen, die Reihenfolge ist, soweit ich das aber erkenne, diesselbe wie die Anfrage, also im jsonRequest.
/** * This script reads data from a hautec heater Keba controller. * www.hautec.eu */ const request = require('request'); const heizung_host = '192.168.100.99'; 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"} ]; 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'}); // 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) { setState('javascript.'+instance+'.Heizung.Heizung.aufheizen', false); } setState('javascript.'+instance+'.Heizung.Boiler.aufheizen', JSON.parse(responseBody[20].value)); setState('javascript.'+instance+'.Heizung.RuecklaufTemp.ist', parseFloat(responseBody[21].value)); setState('javascript.'+instance+'.Heizung.RuecklaufTemp.soll', parseFloat(responseBody[22].value)); } }); });Wen es interessiert wie ich darauf gekommen bin?
âĄHeizungscontroller im Browser aufrufen, Chrome, rechte Maustaste "Untersuchen"
in den Menues kann man dann immer die Requests und Responses "sniffen". Da ist auch nix verschlĂŒsselt.
Ăbrigens, man kann hier auch die Temperatur wunderbar ĂŒber einen Request setzen đ
So "simuliere" ich gerade mein Ăberschussladen, indem ich die Soll-Temp bei genug Energie auf 60 Grad setze... zack springt der Verdichter an. Da brauch ich das nicht ĂŒber das Stromkabel triggern.
Der Wert dafĂŒr ist: APPL.CtrlAppl.sParam.hotWaterTank[0].param.normalSetTempMax.value
"ohne GewÀhr", das ist auch nicht komplett, hab die PV erst seit kurzer Zeit....
const desiredTemperature = 59.0; const heaterTempName = "APPL.CtrlAppl.sParam.hotWaterTank[0].param.normalSetTempMax.value"; const jsonRequest = [{ name: heaterTempName, value: desiredTemperature.toString()}]; const jsonAsString = JSON.stringify(jsonRequest); const doUeberschussLaden = (heaterUrl, json) => { request.post({ url: heaterUrl, form: json }, function (error, response, body) { if (error) log(error, 'error'); if (body) { log("ueberschussladen aktiviert"); } }); }; doUeberschussLaden(urlOfHeatpump, jsonAsString); -
@manuel001 Die Realtime Leistung des Verdichters kommt tatsĂ€chlich nicht zurĂŒck, sondern wird von dem Regler 1,5kW als Leistung als fester Wert zurĂŒckgegeben. Das stimmt auch fast +-100 Watt.
Meine Heizung ist von Hautec mit dem Keba-Regler.
Wozu musst du eigentlich den genauen Wert haben? Du solltest sowieso nicht den Verdichter zig-mal an- und ausschalten. Sprich ĂŒberleg dir genau wie du die Schwelle setzt.Aktuell hab ich noch keine prĂ€zise Strommessung im Haus, kommt in KĂŒrze, aber ich mache das gerade so:
- wenn Durchschnitt PV-Leistung der letzten 15 Minuten >3k => aktiviere Ăberschussladen.
@socke Ich habe einen drehzahlgeregelten Verdichter, welcher eigentlich den ganzen Tag lÀuft. Nur halt mit unterschiedlicher Leistung bzw. Drehzahl. Und genau die möchte ich wissen.
Vorerst möchte ich da gar nicht eingreifen, sondern nur ĂŒberwachen. PV Ăberschussregelung macht die KeEnergy mittlerweile eh selbst und das funktioniert seit dem letzten Update bis auf ein paar Kleinigkeiten relativ gut.
z.B. kann man bei den konfigurierbaren Diagrammen nicht PV Ăberschuss und Drehzahl vom Verdichter anzeigen lassen.
Das habe ich jetzt selbst nachgebaut aber halt mit der Drehzahl von der UmwÀlzpumpe statt vom Verdichter.
Danke fĂŒr den Hinweis mit dem jsonRequest.
Ich habe da auch den Wert gefunden, welchen ich weiterverarbeiten möchte: APPL.CtrlAppl.sParam.heatpump[0].Compressor.values.setValueScaled
So einfach wĂ€re es, wenn dieser Wert nicht in der Modbus Liste fehlen wĂŒrde
Wie baut man dein Script in iobroker ein? Ăber einen Adapter?Ist auch interessant:

Sind das nicht die TechnikerzugÀnge? -
@socke Ich habe einen drehzahlgeregelten Verdichter, welcher eigentlich den ganzen Tag lÀuft. Nur halt mit unterschiedlicher Leistung bzw. Drehzahl. Und genau die möchte ich wissen.
Vorerst möchte ich da gar nicht eingreifen, sondern nur ĂŒberwachen. PV Ăberschussregelung macht die KeEnergy mittlerweile eh selbst und das funktioniert seit dem letzten Update bis auf ein paar Kleinigkeiten relativ gut.
z.B. kann man bei den konfigurierbaren Diagrammen nicht PV Ăberschuss und Drehzahl vom Verdichter anzeigen lassen.
Das habe ich jetzt selbst nachgebaut aber halt mit der Drehzahl von der UmwÀlzpumpe statt vom Verdichter.
Danke fĂŒr den Hinweis mit dem jsonRequest.
Ich habe da auch den Wert gefunden, welchen ich weiterverarbeiten möchte: APPL.CtrlAppl.sParam.heatpump[0].Compressor.values.setValueScaled
So einfach wĂ€re es, wenn dieser Wert nicht in der Modbus Liste fehlen wĂŒrde
Wie baut man dein Script in iobroker ein? Ăber einen Adapter?Ist auch interessant:

Sind das nicht die TechnikerzugĂ€nge?@manuel001 đ Das sieht so aus. Das ist schon etwas seltsam, dass alle Passwörter einfach so einem zugesendet werden. đ€·
Das Interface erlaubt nur Zahlen einzutragen, nehme aber an, man kann am PC ĂŒber Web einfach auf der Tastatur die Buchstaben eintippen... mal bei Gelegenheit ausprobieren. -
@socke Ich habe einen drehzahlgeregelten Verdichter, welcher eigentlich den ganzen Tag lÀuft. Nur halt mit unterschiedlicher Leistung bzw. Drehzahl. Und genau die möchte ich wissen.
Vorerst möchte ich da gar nicht eingreifen, sondern nur ĂŒberwachen. PV Ăberschussregelung macht die KeEnergy mittlerweile eh selbst und das funktioniert seit dem letzten Update bis auf ein paar Kleinigkeiten relativ gut.
z.B. kann man bei den konfigurierbaren Diagrammen nicht PV Ăberschuss und Drehzahl vom Verdichter anzeigen lassen.
Das habe ich jetzt selbst nachgebaut aber halt mit der Drehzahl von der UmwÀlzpumpe statt vom Verdichter.
Danke fĂŒr den Hinweis mit dem jsonRequest.
Ich habe da auch den Wert gefunden, welchen ich weiterverarbeiten möchte: APPL.CtrlAppl.sParam.heatpump[0].Compressor.values.setValueScaled
So einfach wĂ€re es, wenn dieser Wert nicht in der Modbus Liste fehlen wĂŒrde
Wie baut man dein Script in iobroker ein? Ăber einen Adapter?Ist auch interessant:

Sind das nicht die TechnikerzugĂ€nge?@manuel001 Einbauen geht ĂŒber Javascript, Adapter "Script Engine" installieren, das ist der, wo man auch ĂŒber Blockly programmieren kann. Ich nutze aber bislang nur Javascript, bin noch nicht so lange mit iobroker dran.

Dann gibt es einen neuen Menupunkt Scripte

Dann auf das â Symbol klicken und ein Javascript erstellen:

Da muss man ein bisschen testen um das zu verstehen, ging mir auch so.
-
@manuel001 Einbauen geht ĂŒber Javascript, Adapter "Script Engine" installieren, das ist der, wo man auch ĂŒber Blockly programmieren kann. Ich nutze aber bislang nur Javascript, bin noch nicht so lange mit iobroker dran.

Dann gibt es einen neuen Menupunkt Scripte

Dann auf das â Symbol klicken und ein Javascript erstellen:

Da muss man ein bisschen testen um das zu verstehen, ging mir auch so.
-
Ăbrigens, man kann hier auch die Temperatur wunderbar ĂŒber einen Request setzen đ
So "simuliere" ich gerade mein Ăberschussladen, indem ich die Soll-Temp bei genug Energie auf 60 Grad setze... zack springt der Verdichter an. Da brauch ich das nicht ĂŒber das Stromkabel triggern.
Der Wert dafĂŒr ist: APPL.CtrlAppl.sParam.hotWaterTank[0].param.normalSetTempMax.value
"ohne GewÀhr", das ist auch nicht komplett, hab die PV erst seit kurzer Zeit....
const desiredTemperature = 59.0; const heaterTempName = "APPL.CtrlAppl.sParam.hotWaterTank[0].param.normalSetTempMax.value"; const jsonRequest = [{ name: heaterTempName, value: desiredTemperature.toString()}]; const jsonAsString = JSON.stringify(jsonRequest); const doUeberschussLaden = (heaterUrl, json) => { request.post({ url: heaterUrl, form: json }, function (error, response, body) { if (error) log(error, 'error'); if (body) { log("ueberschussladen aktiviert"); } }); }; doUeberschussLaden(urlOfHeatpump, jsonAsString);@socke
Angenommen, die desiredTemperature wird bei dir auf 59 gesetzt. Setzt du sie ebenfalls ĂŒber ein Skript wieder auf einen kleineren Wert, wenn due nicht mehr ĂŒberhitzen willst oder lĂ€dt sich die WĂ€rmepumpe dann wieder einen Wert aus dem internen Regler? Und: reicht es den Wert 1x zu setzen oder musst du es zyklisch wieder machen, da der interne Regler der WĂ€rmepumpe den Wert sonst ĂŒberschreibt? -
@manuel001 Einbauen geht ĂŒber Javascript, Adapter "Script Engine" installieren, das ist der, wo man auch ĂŒber Blockly programmieren kann. Ich nutze aber bislang nur Javascript, bin noch nicht so lange mit iobroker dran.

Dann gibt es einen neuen Menupunkt Scripte

Dann auf das â Symbol klicken und ein Javascript erstellen:

Da muss man ein bisschen testen um das zu verstehen, ging mir auch so.
@socke Ich habe das Script eingebaut und fĂŒr den einen Parameter der mich interessiert, angepasst.
Allerding dĂŒrfte ich dabei einen oder mehrere Fehler gemacht haben:/** * This script reads data from a hautec heater Keba controller. * www.hautec.eu */ const request = require('request'); const heizung_host = '192.168.1.101'; 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.heatpump[0].Compressor.values.setValueScaled"}, ]; const jsonAsString = JSON.stringify(jsonRequest); // create all the states in broker createState('javascript.'+instance+'.Heizung.Verdichter', 0, {type: 'number', 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.Verdichter', parseFloat(responseBody[1].value)); } }); });Welche Nummer gehört in die Eckige Klammer nach responseBody?
(bin kein Programmierer) -
@socke Ich habe das Script eingebaut und fĂŒr den einen Parameter der mich interessiert, angepasst.
Allerding dĂŒrfte ich dabei einen oder mehrere Fehler gemacht haben:/** * This script reads data from a hautec heater Keba controller. * www.hautec.eu */ const request = require('request'); const heizung_host = '192.168.1.101'; 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.heatpump[0].Compressor.values.setValueScaled"}, ]; const jsonAsString = JSON.stringify(jsonRequest); // create all the states in broker createState('javascript.'+instance+'.Heizung.Verdichter', 0, {type: 'number', 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.Verdichter', parseFloat(responseBody[1].value)); } }); });Welche Nummer gehört in die Eckige Klammer nach responseBody?
(bin kein Programmierer)@manuel001 sagte in Keba KeEnergy Heizungssteuerung (M-TEC WP) in Smarthome:
@socke Ich habe das Script eingebaut und fĂŒr den einen Parameter der mich interessiert, angepasst.
Allerding dĂŒrfte ich dabei einen oder mehrere Fehler gemacht haben:/** * This script reads data from a hautec heater Keba controller. * www.hautec.eu */ const request = require('request'); const heizung_host = '192.168.1.101'; 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.heatpump[0].Compressor.values.setValueScaled"}, ]; const jsonAsString = JSON.stringify(jsonRequest); // create all the states in broker createState('javascript.'+instance+'.Heizung.Verdichter', 0, {type: 'number', 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.Verdichter', parseFloat(responseBody[1].value)); } }); });Welche Nummer gehört in die Eckige Klammer nach responseBody?
(bin kein Programmierer)Es liegt lediglich an der "1" in folgender Zeile
setState('javascript.'+instance+'.Heizung.Verdichter', parseFloat(responseBody**[1]**.value));Einfach Àndern auf
setState('javascript.'+instance+'.Heizung.Verdichter', parseFloat(responseBody**[0]**.value));Hintergrund: Die abgefragten Werte (bei dir nur ein Wert) geben ein Array zurĂŒck. Hierbei ist der erste Eintrag immer mit 0 indexiert, der zweite mit 1, der dritte mit 2 , usw usw
-
@manuel001 sagte in Keba KeEnergy Heizungssteuerung (M-TEC WP) in Smarthome:
@socke Ich habe das Script eingebaut und fĂŒr den einen Parameter der mich interessiert, angepasst.
Allerding dĂŒrfte ich dabei einen oder mehrere Fehler gemacht haben:/** * This script reads data from a hautec heater Keba controller. * www.hautec.eu */ const request = require('request'); const heizung_host = '192.168.1.101'; 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.heatpump[0].Compressor.values.setValueScaled"}, ]; const jsonAsString = JSON.stringify(jsonRequest); // create all the states in broker createState('javascript.'+instance+'.Heizung.Verdichter', 0, {type: 'number', 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.Verdichter', parseFloat(responseBody[1].value)); } }); });Welche Nummer gehört in die Eckige Klammer nach responseBody?
(bin kein Programmierer)Es liegt lediglich an der "1" in folgender Zeile
setState('javascript.'+instance+'.Heizung.Verdichter', parseFloat(responseBody**[1]**.value));Einfach Àndern auf
setState('javascript.'+instance+'.Heizung.Verdichter', parseFloat(responseBody**[0]**.value));Hintergrund: Die abgefragten Werte (bei dir nur ein Wert) geben ein Array zurĂŒck. Hierbei ist der erste Eintrag immer mit 0 indexiert, der zweite mit 1, der dritte mit 2 , usw usw
-
@manuel001 sagte in Keba KeEnergy Heizungssteuerung (M-TEC WP) in Smarthome:
@socke Ich habe das Script eingebaut und fĂŒr den einen Parameter der mich interessiert, angepasst.
Allerding dĂŒrfte ich dabei einen oder mehrere Fehler gemacht haben:/** * This script reads data from a hautec heater Keba controller. * www.hautec.eu */ const request = require('request'); const heizung_host = '192.168.1.101'; 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.heatpump[0].Compressor.values.setValueScaled"}, ]; const jsonAsString = JSON.stringify(jsonRequest); // create all the states in broker createState('javascript.'+instance+'.Heizung.Verdichter', 0, {type: 'number', 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.Verdichter', parseFloat(responseBody[1].value)); } }); });Welche Nummer gehört in die Eckige Klammer nach responseBody?
(bin kein Programmierer)Es liegt lediglich an der "1" in folgender Zeile
setState('javascript.'+instance+'.Heizung.Verdichter', parseFloat(responseBody**[1]**.value));Einfach Àndern auf
setState('javascript.'+instance+'.Heizung.Verdichter', parseFloat(responseBody**[0]**.value));Hintergrund: Die abgefragten Werte (bei dir nur ein Wert) geben ein Array zurĂŒck. Hierbei ist der erste Eintrag immer mit 0 indexiert, der zweite mit 1, der dritte mit 2 , usw usw
-
@ttjaden Noch eine blöde Frage:
Wo und wie baue ich es ein, dass der ĂŒbergebene Wert gleich mit Faktor 100 multipliziert wird? (Ausgabe in %)
Multiplikation sollte ja mit *= gehen.@manuel001
Das mĂŒsste dann hinter der vorletzten Klammer sein, denke ich.setState('javascript.'+instance+'.Heizung.Verdichter', parseFloat(responseBody**[0]**.value) * 100);Brauchte ich bisher noch nicht :)
-
@manuel001
Das mĂŒsste dann hinter der vorletzten Klammer sein, denke ich.setState('javascript.'+instance+'.Heizung.Verdichter', parseFloat(responseBody**[0]**.value) * 100);Brauchte ich bisher noch nicht :)
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen BeitrĂ€ge zu scrollen? Wenn du dich fĂŒr ein Konto anmeldest, kommst du immer genau dorthin zurĂŒck, wo du zuvor warst, und kannst dich ĂŒber neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und BeitrĂ€ge positiv bewerten, um anderen Community-Mitgliedern deine WertschĂ€tzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden đ
Registrieren Anmelden