Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. oemer9119

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    O
    • Profile
    • Following 0
    • Followers 0
    • Topics 0
    • Posts 2
    • Best 0
    • Groups 0

    oemer9119

    @oemer9119

    0
    Reputation
    21
    Profile views
    2
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    oemer9119 Follow

    Latest posts made by oemer9119

    • RE: Skript für Bluetooth-Heizkörperthermostat unter IoBroker

      Hallo bekommst du werte zurück wenn du getstatus ausführst.

      Ich bekomme immer ein Fehler.

      Wenn der Code Läuft kriege ich nicht mal antwort über Putty, aber die Befehle werden trotzdem umgesetzt.

      > Caught by controller[0]: at script.js.Heizung2:143:51

      Oder Auch was mit Zeile 140.

      posted in Skripten / Logik
      O
      oemer9119
    • RE: Skript für Bluetooth-Heizkörperthermostat unter IoBroker

      @kr4mb3:

      @DennisK:

      Weis jemand von euch wie ich den Pfad "./eQ-3-radiator-thermostat/eq3.exp <macadresse>temp 20.0" anpassen muss, damit er mit iobroker kompatibel ist?</macadresse> `

      Ich habe mich die Tage auch mal mit dem Thermostat beschäftigt und mir basierend auf dem Code von Heckie75 ein Skript in ioBroker geschrieben, dass mir auch ein paar Datenpunkte erstellt. Sicherlich nicht der schönste Code, aber es funktioniert. Ich habe den Pfad zur eq3.exp-Datei absolut angegeben, damit ich den Code verwenden kann:

      ! ````
      /*
      script needs Heckie75/eQ-3-radiator-thermostat package.
      see https://github.com/Heckie75/eQ-3-radiator-thermostat
      thermostat must be paired via bluetooth
      exec command must be enabled in javascript adapter
      */
      ! //Absolute Path to eQ-3-radiator-thermostat package and MAC of paired eQ3 thermostat
      var eQ3 = "/home/pi/eQ-3-radiator-thermostat/eq3.exp";
      var mac = "00:00:00:00:00:00";
      ! //new iobroker states
      createState('eQ3.control.boostOn', false, {type: "boolean", role: "button"});
      createState('eQ3.control.boostOff', false, {type: "boolean", role: "button"});
      createState('eQ3.control.getStatus', false, {type: "boolean", role: "button"});
      createState('eQ3.control.setMode', false, {max: 1, min: 0, states: {0:"auto",1:"manual"}});
      createState('eQ3.control.setTemp');
      createState('eQ3.control.setOffset');
      createState('eQ3.control.command');
      ! createState('eQ3.status.Temperature');
      createState('eQ3.status.Valve');
      createState('eQ3.status.Mode');
      createState('eQ3.status.VacationMode');
      createState('eQ3.status.LowBattery');
      createState('eQ3.status.OpenWindow');
      createState('eQ3.status.Boost');
      createState('eQ3.status.Locked');
      createState('eQ3.status.OffsetTemp');
      ! createState('eQ3.device.MAC');
      createState('eQ3.device.Name');
      createState('eQ3.device.Vendor');
      ! createState('eQ3.timer.timerJSON');
      ! //Exec-Befehl
      var eQ3exec = eQ3 + ' ' + mac + ' ';
      ! //Status
      on({id: 'javascript.0.eQ3.control.getStatus', val: true}, function (obj) {
      exec(eQ3exec + "status", function(err, stdout, stderr) {
      eQ3status(stdout);
      });
      });
      ! //Boost On
      on({id: 'javascript.0.eQ3.control.boostOn', val: true}, function (obj) {
      exec(eQ3exec + "boost", function(err, stdout, stderr) {
      eQ3status(stdout);
      });
      });
      ! //Boost Off
      on({id: 'javascript.0.eQ3.control.boostOff', val: true}, function (obj) {
      exec(eQ3exec + "boost off", function(err, stdout, stderr) {
      eQ3status(stdout);
      });
      });
      ! //Set Temperature
      on({id: 'javascript.0.eQ3.control.setTemp', change: "any"}, function (obj) {
      var value = obj.state.val;
      exec(eQ3exec + "temp " + value, function(err, stdout, stderr) {
      eQ3status(stdout);
      });
      });
      ! //Set Offset
      on({id: 'javascript.0.eQ3.control.setOffset', change: "any"}, function (obj) {
      var value = obj.state.val;
      exec(eQ3exec + "offset " + value, function(err, stdout, stderr) {
      eQ3status(stdout);
      });
      });
      ! //Set Mode
      on({id: 'javascript.0.eQ3.control.setMode', change: "any"}, function (obj) {
      var value = obj.state.val;
      if (value === 0) {
      exec(eQ3exec + "auto", function(err, stdout, stderr) {
      eQ3status(stdout);
      });
      } else if (value === 1){
      exec(eQ3exec + "manual", function(err, stdout, stderr) {
      eQ3status(stdout);
      });
      }
      });
      ! //Custom Command
      on({id: 'javascript.0.eQ3.control.command', change: "any"}, function (obj) {
      var value = obj.state.val;
      exec(eQ3exec + value, function(err, stdout, stderr) {
      eQ3status(stdout);
      });
      });
      ! //Thermostat Status
      function eQ3status(stdout) {
      eQ3json();

          stdout = stdout.split("\n");
          stdout.forEach(element => {
      
              switch(element.split(":")[0]){
                  case "Temperature":
                      setState('eQ3.status.Temperature', element.split(":")[1]);
                      break;
                  case "Valve":
                      setState('eQ3.status.Valve', element.split(":")[1]);
                      break;
                  case "Mode":
                      setState('eQ3.status.Mode', element.split(":")[1]);
                      break;
                  case "Vacation mode":
                      setState('eQ3.status.VacationMode', element.split(":")[1]);
                      break;
                  case "Offset temperature":
                      setState('eQ3.status.OffsetTemp', element.split(":")[1]);
                      break;
                  case "Device name":
                      setState('eQ3.device.Name', element.split(":")[1]);
                      break;
                  case "Device vendor":
                      setState('eQ3.device.Vendor', element.split(":")[1]);
                      break;
                  case "":
                      break;
              }
          });
      

      }

      ! //Thermostat Status JSON
      function eQ3json(){
      exec(eQ3exec + "json", function(err, stdout, stderr) {
      obj = JSON.parse(stdout);

          //Status
          setState('eQ3.status.LowBattery', obj.mode["low battery"]);
          setState('eQ3.status.OpenWindow', obj.mode["open window"]);
          setState('eQ3.status.Boost', obj.mode.boost);
          setState('eQ3.status.Locked', obj.mode.locked);
          
          //Device
          setState('eQ3.device.MAC', obj.mac);
          
          //Timer
          setState('eQ3.timer.timerJSON', JSON.stringify(obj.timers));
      });
      

      }

      ! schedule('*/5 * * * *', function (obj) {
      exec(eQ3exec + "status", function(err, stdout, stderr) {
      eQ3status(stdout);
      });
      });
      ! ````

      Noch habe ich nicht alle Funktionen des Skripts von Heckie75 umgesetzt, aber mehr brauch ich aktuell nicht. Die Basissteuerung und die Abfrage des Status (alle 5 Minuten) reicht mir bisher. Vielleicht hilft dir oder anderen das ja als Vorlage.

      Greetz

      kr4mb3 `

      Hallo,

      Kann jemand vielleicht kurz erklären wie der das eingebunden hat mit dem code? Evtl für vis oder den cloud Adapter

      posted in Skripten / Logik
      O
      oemer9119
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo