Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. Keba KeEnergy Heizungssteuerung (M-TEC WP) in Smarthome

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    488

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    5.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.4k

Keba KeEnergy Heizungssteuerung (M-TEC WP) in Smarthome

Scheduled Pinned Locked Moved Hardware
keba keenergy m-tec modbus
149 Posts 27 Posters 33.8k Views 24 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    Manuel001
    wrote on last edited by Manuel001
    #1

    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)

    ttjadenT S 2 Replies Last reply
    0
    • M Manuel001

      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)

      ttjadenT Offline
      ttjadenT Offline
      ttjaden
      wrote on last edited by
      #2

      @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

      1 Reply Last reply
      0
      • M Manuel001

        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)

        S Offline
        S Offline
        socke
        wrote on last edited by
        #3

        @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.

        ttjadenT 1 Reply Last reply
        0
        • M Offline
          M Offline
          Manuel001
          wrote on last edited by Manuel001
          #4

          @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.

          S 1 Reply Last reply
          0
          • S socke

            @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.

            ttjadenT Offline
            ttjadenT Offline
            ttjaden
            wrote on last edited by
            #5

            @socke Ich habe eine Heizung von Hautec, die aber auch den Controller nutzt. Zwar komme ich schon an einige Werte per Modbus TCP ran,

            09b3ae5d-bf26-4cce-b021-c452459492bc-grafik.png

            jedoch fehlen mir z.B. Vorlauf/Rücklauftemperaturen der Quelle und der Heizkreise. Ich bin also auch an deiner Lösung interessiert! :)

            S 1 Reply Last reply
            0
            • M Manuel001

              @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.

              S Offline
              S Offline
              socke
              wrote on last edited by
              #6

              @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.
              M 1 Reply Last reply
              0
              • ttjadenT ttjaden

                @socke Ich habe eine Heizung von Hautec, die aber auch den Controller nutzt. Zwar komme ich schon an einige Werte per Modbus TCP ran,

                09b3ae5d-bf26-4cce-b021-c452459492bc-grafik.png

                jedoch fehlen mir z.B. Vorlauf/Rücklauftemperaturen der Quelle und der Heizkreise. Ich bin also auch an deiner Lösung interessiert! :)

                S Offline
                S Offline
                socke
                wrote on last edited by
                #7

                @ttjaden

                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.

                51b5e2e6-407f-424d-938f-2a1f088b497c-2021-03-09 at 16.28.jpg

                S 1 Reply Last reply
                0
                • S socke

                  @ttjaden

                  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.

                  51b5e2e6-407f-424d-938f-2a1f088b497c-2021-03-09 at 16.28.jpg

                  S Offline
                  S Offline
                  socke
                  wrote on last edited by
                  #8

                  Ü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);
                  
                  ttjadenT M 2 Replies Last reply
                  0
                  • S socke

                    @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.
                    M Offline
                    M Offline
                    Manuel001
                    wrote on last edited by Manuel001
                    #9

                    @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 :face_with_rolling_eyes:
                    Wie baut man dein Script in iobroker ein? Über einen Adapter?

                    Ist auch interessant:
                    2021-03-10 10_56_30-Window.jpg
                    Sind das nicht die Technikerzugänge?

                    S 2 Replies Last reply
                    0
                    • M Manuel001

                      @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 :face_with_rolling_eyes:
                      Wie baut man dein Script in iobroker ein? Über einen Adapter?

                      Ist auch interessant:
                      2021-03-10 10_56_30-Window.jpg
                      Sind das nicht die Technikerzugänge?

                      S Offline
                      S Offline
                      socke
                      wrote on last edited by
                      #10

                      @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.

                      P 1 Reply Last reply
                      0
                      • M Manuel001

                        @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 :face_with_rolling_eyes:
                        Wie baut man dein Script in iobroker ein? Über einen Adapter?

                        Ist auch interessant:
                        2021-03-10 10_56_30-Window.jpg
                        Sind das nicht die Technikerzugänge?

                        S Offline
                        S Offline
                        socke
                        wrote on last edited by
                        #11

                        @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.

                        ef518c6f-4490-42bc-b554-c0f6f8172a6e-2021-03-11 at 16.34.jpg

                        Dann gibt es einen neuen Menupunkt Scripte

                        da0a5fb5-99c4-4d76-b99c-6847ead137d2-2021-03-11 at 16.35.jpg

                        Dann auf das ➕ Symbol klicken und ein Javascript erstellen:

                        309459b8-ac47-4476-adca-d96b54eafc9f-2021-03-11 at 16.36.jpg

                        Da muss man ein bisschen testen um das zu verstehen, ging mir auch so.

                        M 2 Replies Last reply
                        0
                        • S socke

                          @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.

                          ef518c6f-4490-42bc-b554-c0f6f8172a6e-2021-03-11 at 16.34.jpg

                          Dann gibt es einen neuen Menupunkt Scripte

                          da0a5fb5-99c4-4d76-b99c-6847ead137d2-2021-03-11 at 16.35.jpg

                          Dann auf das ➕ Symbol klicken und ein Javascript erstellen:

                          309459b8-ac47-4476-adca-d96b54eafc9f-2021-03-11 at 16.36.jpg

                          Da muss man ein bisschen testen um das zu verstehen, ging mir auch so.

                          M Offline
                          M Offline
                          Manuel001
                          wrote on last edited by
                          #12

                          @socke Vielen Dank!

                          1 Reply Last reply
                          1
                          • S socke

                            Ü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);
                            
                            ttjadenT Offline
                            ttjadenT Offline
                            ttjaden
                            wrote on last edited by
                            #13

                            @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?

                            1 Reply Last reply
                            0
                            • S socke

                              @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.

                              ef518c6f-4490-42bc-b554-c0f6f8172a6e-2021-03-11 at 16.34.jpg

                              Dann gibt es einen neuen Menupunkt Scripte

                              da0a5fb5-99c4-4d76-b99c-6847ead137d2-2021-03-11 at 16.35.jpg

                              Dann auf das ➕ Symbol klicken und ein Javascript erstellen:

                              309459b8-ac47-4476-adca-d96b54eafc9f-2021-03-11 at 16.36.jpg

                              Da muss man ein bisschen testen um das zu verstehen, ging mir auch so.

                              M Offline
                              M Offline
                              Manuel001
                              wrote on last edited by Manuel001
                              #14

                              @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)

                              ttjadenT 1 Reply Last reply
                              0
                              • M Manuel001

                                @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)

                                ttjadenT Offline
                                ttjadenT Offline
                                ttjaden
                                wrote on last edited by
                                #15

                                @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

                                M 2 Replies Last reply
                                0
                                • ttjadenT ttjaden

                                  @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

                                  M Offline
                                  M Offline
                                  Manuel001
                                  wrote on last edited by
                                  #16

                                  @ttjaden Kleine Ursache, große Wirkung. Es funktioniert! Vielen Dank!

                                  1 Reply Last reply
                                  0
                                  • ttjadenT ttjaden

                                    @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

                                    M Offline
                                    M Offline
                                    Manuel001
                                    wrote on last edited by Manuel001
                                    #17

                                    @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.

                                    ttjadenT 1 Reply Last reply
                                    0
                                    • M Manuel001

                                      @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.

                                      ttjadenT Offline
                                      ttjadenT Offline
                                      ttjaden
                                      wrote on last edited by
                                      #18

                                      @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 :)

                                      M 1 Reply Last reply
                                      0
                                      • ttjadenT ttjaden

                                        @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 :)

                                        M Offline
                                        M Offline
                                        Manuel001
                                        wrote on last edited by
                                        #19

                                        @ttjaden Funktioniert, danke!

                                        1 Reply Last reply
                                        0
                                        • X Offline
                                          X Offline
                                          x4nder
                                          wrote on last edited by
                                          #20

                                          Moin zusammen,
                                          ich habe seit gestern auch die M-Tec mit der Keba Steuerung und habe auch die Modbus Register parat. (Excel Datei)
                                          Ich habe zum testen 10 Stück in meinem iOBroker angelegt und die Werte sind plausibel.
                                          VG
                                          Alex

                                          M 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          589

                                          Online

                                          32.7k

                                          Users

                                          82.5k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe