Navigation

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

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    K
    • Profile
    • Following 0
    • Followers 1
    • Topics 0
    • Posts 4
    • Best 0
    • Groups 1

    kr4mb3

    @kr4mb3

    0
    Reputation
    22
    Profile views
    4
    Posts
    1
    Followers
    0
    Following
    Joined Last Online

    kr4mb3 Follow
    Starter

    Latest posts made by kr4mb3

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

      @xatrix Ist erledigt, ich hab mein aktuelles Skript in meinem Beitrag oben editiert.

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

      Hi oemer9119,

      ja ich bekomme Werte zurück, wenn ich getStatus ausführe. Das passiert in meinem Skript ja in zwei Teilen. Zuerst werden Werte wie Batteriestatus oder Boost über die Funktion "eQ3json" abgerufen, danach der aktuelle Modus, die Temperatur, die Ventil-Stellung und der Name sowie Hersteller des Thermostats über die Funktion "eQ3status". Über Putty sieht der Befehl "status" bei mir zB so aus wie im Anhang.

      Die Zeile 143 im Skript teilt zB die Zeile "Device Name" am Doppelpunkt, um nur den Namen selbst zu bekommen. Trim entfernt dann noch die ganzen Leerzeichen zwischen Doppelpunkt und dem Namen. Hat dein Thermostat evtl keinen Namen?!

      Und Zeile 140 ermittelt die Offset Temperatur. Die Zeile im Rückgabewert tritt aber nur auf, wenn man auch den Offset-Wert verändert. Das sollte aber eigentlich keine Fehler aufwerfen. Hast du denn dein Thermostat auch erfolgreich mit dem ioBroker Host per Bluetooth gekoppelt?
      3592_2019-01-02_22_38_55-window.png
      3592_2019-01-02_22_53_50-window.png

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

      @oemer9119:

      Hallo,

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

      Ich habe mir noch einen weiteren State erstellt, der den Boost Modus aktiviert bzw. deaktiviert:

      createState('eQ3.control.boostSwitch', false, {type: "boolean", role: "switch"});
      

      Diese State habe ich dann im Cloud Adapter hinzugefügt, so kann ich per Alexa-Spracheingabe spontan den Boost Modus aktivieren, wenn es mir zu kalt ist. Den Temperaturwert per Cloud-Adapter zu erhöhen wäre auch sehr praktisch, ich habe es allerdings noch nicht hinbekommen, bestimmte absolute Werte zu übergeben, sondern bloß Prozentwerte…

      In VIS solltest du eigentlich alle States aus dem Skript als Button oder als anderes Objekt einfügen können. Zum Beispiel mit dem hqWidget "Inner Temperature". Dort kann man die Zieltemperatur und den aktuellen Ventilstatus anzeigen. Und wenn du einen Sensor dafür hast, auch die aktuelle Temperatur. Und ein paar Stati aus dem Skript kann man auch als Signalbilder nutzen, zB ob der Boostmodus an ist, die Batterie leer ist oder das Fenster offen ist.

      Greetz kr4mb3
      3592_01_widget.png
      3592_02_signalbilder.png

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

      @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:1A:22:0C:08:3E";
      
      //new iobroker states
      createState('eQ3.control.boostOn', false, {type: "boolean", role: "button"});
      createState('eQ3.control.boostOff', false, {type: "boolean", role: "button"});
      createState('eQ3.control.boostSwitch', false, {type: "boolean", role: "switch"});
      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);
           });    
      });
      
      //Boost Switch
      on({id: 'javascript.0.eQ3.control.boostSwitch', change: "any"}, function (obj) {
          var value = obj.state.val;
          log (value);
          if (value === true) {
              exec(eQ3exec + "boost", function(err, stdout, stderr) {
                  eQ3status(stdout);
                  log ("Boost an");
              });
          }else if (value === false){
              exec(eQ3exec + "boost off", function(err, stdout, stderr) {
                  eQ3status(stdout);
                  log ("Boost aus");
              });
          }
      });
      
      //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].trim());
                          break;
                      case "Valve":
                          setState('eQ3.status.Valve', element.split(":")[1].trim());
                          break;
                      */
                      case "Mode":
                          setState('eQ3.status.Mode', element.split(":")[1].trim());
                          break;
                      case "Vacation mode":
                          setState('eQ3.status.VacationMode', element.split(":")[1].trim());
                          break;
                      case "Offset temperature":
                          setState('eQ3.status.OffsetTemp', element.split(":")[1].trim());
                          break;
                      case "Device name":
                          setState('eQ3.device.Name', element.split(":")[1].trim());
                          break;
                      case "Device vendor":
                          setState('eQ3.device.Vendor', element.split(":")[1].trim());
                          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);
              setState('eQ3.status.Valve', obj.valve);
              setState('eQ3.status.Temperature', obj.temperature);
              
              //Device
              setState('eQ3.device.MAC', obj.mac);
              
              //Timer
              setState('eQ3.timer.timerJSON', JSON.stringify(obj.timers));
          });
      }
      
      schedule('*/2 * * * *', 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 2 Minuten) reicht mir bisher. Vielleicht hilft dir oder anderen das ja als Vorlage.

      Greetz

      kr4mb3

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