Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

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

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    324

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.5k

Keba KeEnergy Heizungssteuerung (M-TEC WP) in Smarthome

Geplant Angeheftet Gesperrt Verschoben Hardware
keba keenergy m-tec modbus
149 Beiträge 27 Kommentatoren 31.2k Aufrufe 24 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • 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
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antworten Letzte Antwort
        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
          schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antworten Letzte Antwort
              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
                schrieb am zuletzt editiert von
                #12

                @socke Vielen Dank!

                1 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von
                      #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 Antworten Letzte Antwort
                      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
                        schrieb am zuletzt editiert von
                        #16

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

                        1 Antwort Letzte Antwort
                        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
                          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                          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
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            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
                              schrieb am zuletzt editiert von
                              #19

                              @ttjaden Funktioniert, danke!

                              1 Antwort Letzte Antwort
                              0
                              • X Offline
                                X Offline
                                x4nder
                                schrieb am zuletzt editiert von
                                #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 Antwort Letzte Antwort
                                0
                                • X x4nder

                                  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 Offline
                                  M Offline
                                  Manuel001
                                  schrieb am zuletzt editiert von
                                  #21

                                  @x4nder Hast du auch einen drehzahlgeregelten Verdichter? PV Überschussregelung?

                                  X 1 Antwort Letzte Antwort
                                  0
                                  • M Manuel001

                                    @x4nder Hast du auch einen drehzahlgeregelten Verdichter? PV Überschussregelung?

                                    X Offline
                                    X Offline
                                    x4nder
                                    schrieb am zuletzt editiert von
                                    #22

                                    @manuel001
                                    Ja, habe ich.
                                    An der PV Geschichte sitze ich gerade rum.
                                    Über einen SmartMeter würde es gehen. Ich will es über Modbus TCP steuern..
                                    Habe ein Fronius Symo mit eine Fronius SmartMeter.

                                    M 1 Antwort Letzte Antwort
                                    0
                                    • X x4nder

                                      @manuel001
                                      Ja, habe ich.
                                      An der PV Geschichte sitze ich gerade rum.
                                      Über einen SmartMeter würde es gehen. Ich will es über Modbus TCP steuern..
                                      Habe ein Fronius Symo mit eine Fronius SmartMeter.

                                      M Offline
                                      M Offline
                                      Manuel001
                                      schrieb am zuletzt editiert von
                                      #23

                                      @x4nder
                                      Ja ich habe auch einen zusätzlichen SmartMeter für Überschussmessung gebraucht.
                                      Gibt es mittlerweile eine Drehzahl in Prozent (Leistung) vom Verdichter in der Modbusliste?
                                      Spätestens wenn man zusätzliche Verbraucher wie E-Auto steuern möchte, sollte man ja wissen ob die Heizung eh schon auf Vollgas läuft oder nur auf 40%.

                                      1 Antwort Letzte Antwort
                                      0
                                      • X Offline
                                        X Offline
                                        x4nder
                                        schrieb am zuletzt editiert von
                                        #24

                                        @manuel001

                                        bis dahin bin ich noch nicht gekommen.
                                        Schau mal ob du damit was anfangen kannst.

                                        Mod-Adresse; R/W; Factor; VariableName; Description;
                                        712; R; 100; APPL.CtrlAppl.sParam.heatpump[0].CircPump.values.setValueScaled; Heat side actuator

                                        1 Antwort Letzte Antwort
                                        0
                                        • M Offline
                                          M Offline
                                          Manuel001
                                          schrieb am zuletzt editiert von
                                          #25

                                          @x4nder Nein das ist leider nur die Heizungsumwälzpumpe.
                                          Vermutlich haben die eh noch immer nichts verbessert.
                                          Ich warte mal ab, bis du es integriert hast.
                                          Bin schon gespannt, was dir dann fehlt bzw. was dich am meisten stört.
                                          Vielleicht hilft es ja, wenn sich mehrere Leute beschweren.

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          540

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe