Navigation

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

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    C
    • Profile
    • Following 0
    • Followers 0
    • Topics 8
    • Posts 28
    • Best 2
    • Groups 1

    cedric

    @cedric

    Starter

    2
    Reputation
    11
    Profile views
    28
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    cedric Follow
    Starter

    Best posts made by cedric

    • Für viele Objekte InfluxDB inkl. Aliase aktivieren

      Hi zusammen,

      ich habe sehr viele Homematic-IP (hmip) Instanzen, mit ganz vielen Thermostate und Fenstersensoren und möchte gerne für bestimmte Merkmale (windowOpen, lowBat, ...) InfluxDB aktivieren.
      Allerdings möchte ich auch Aliase nutzen, die natürlich jeweils individuell sind, also eigentlich immer Objekt-Name + "." + Merkmal.

      Wie bekomme ich sowas hin, ohne das für hunderte manuell durchzuführen?

      Danke
      Cedric

      posted in ioBroker Allgemein
      C
      cedric
    • RE: Für viele Objekte InfluxDB inkl. Aliase aktivieren

      Falls es noch jemand anderes braucht, ich habe mir ein Script erstellt:

      // returns device id of state, device or channel-id
      function getDeviceId(id) {
          return id.match(/(.+[a-zA-Z0-9]{24})/g);
      }
      
      
      // check if id has influx enabled
       function isInfluxEnabled(fullList, id, checkAliasToo) {
      
          if(fullList[id] != undefined && fullList[id].enabled && (checkAliasToo == null || checkAliasToo == fullList[id].aliasId)) {
              console.log("angeschaltet: " + getObject(getDeviceId(id)).common.name);
              return true;
          }    
                  
          // default
          return false;
      }
      
      // enable influxdb
      function enableInflux(id, alias) {
          sendTo('influxdb.0', 'enableHistory', {
              id: id,
              options: {
                  changesOnly:  true,
                  debounceTime:     0,
                  blockTime:    0,
      			changesRelogInterval: 0,
                  retention:    31536000,
                  maxLength:    3,
                  changesMinDelta: 0,
                  aliasId: alias
              }
          }, function (result) {
              if (result.error) {
                  console.log(result.error);
              }
              if (result.success) {
                  // successfully enabled
              }
          });
      }
      
      // disable infludb
      function disableInflux(id) {
           sendTo('influxdb.0', 'disableHistory', {
              id: id,
              }, function (result) {
                  if (result.error) {
                      console.log(result.error);
                  }
                  if (result.success) {
                      // successfully disabled
                  }
           });
      }
      
      const deviceBase = "hmip.*.devices.*"; // hmip.0.devices.3014F711A000201D89AC42E3
      const dataPoints = {".channels.1.valveActualTemperature" : 1, ".channels.1.temperatureOffset" : 0, ".channels.0.lowBat" : 0}; // 0=disable; 1=enable
      
      
      // get full list of enabled influx datapoints
      sendTo('influxdb.0', 'getEnabledDPs', {}, function (fullList) {
          //console.log(fullList);
      
          // loop through all datapoints
          for (const [dataPoint, enable] of Object.entries(dataPoints)) {
      
              // get all devices
              var devices = $('state[id=' +deviceBase+dataPoint+']');
      
              console.log("Number of Devices found: " + devices.length);
      
              // loop through all devices
              devices.each(function (id, i){
      
                  // alias
                  var aliasId = getObject(getDeviceId(id)).common.name + dataPoint;
      
                  if( enable == 1) {
                      // enable influx
                      if( !isInfluxEnabled(fullList, id, aliasId)) {
                          console.log("ENABLE: " + aliasId);
                          enableInflux(id, aliasId)
                      }
                  } else {
                      // disable influx
                      console.log("DISABLE: " + aliasId);
                      disableInflux(id);
                  }
                  
      
              }); // devices
      
          } // datapoints
      
      });
      
      posted in ioBroker Allgemein
      C
      cedric

    Latest posts made by cedric

    • RE: Skript läuft ab und zu in Timeout bei InfluxDB-Abfrage

      @haus-automatisierung tausend Dank! Ich habe in der Dokumentation vom Influxdb geguckt und in den globalen Einstellungen vom Javaskript-Adapter, bin allerdings nicht darauf gekommen, dass es in der sendTo-Methode sein könnte.

      Läuft jetzt wieder alles: 🙂

      posted in JavaScript
      C
      cedric
    • RE: Skript läuft ab und zu in Timeout bei InfluxDB-Abfrage

      Kann ich irgendwo definieren, wann ein Timeout erfolgen soll?
      Für mich sieht es so aus, als wäre es immer nach 30sek innerhalb der sendTo-Methode (an verschiedenen stellen im Skript.
      Das kann auch durchaus sein, dass es länger als 30sek dauert, kann ich den Timeout-Wert irgendwo auf 60sek erhöhen?

      posted in JavaScript
      C
      cedric
    • RE: Skript läuft ab und zu in Timeout bei InfluxDB-Abfrage

      @codierknecht

      	 // returns device id of state, device or channel-id
      	 function getDeviceId(id) {
      	     return id.match(/(.+[a-zA-Z0-9]{24})/g)[0];
      	 }
      
      	 // return group if auf state, device or channel-id
      	 function getGroupId(id) {
      	     return id.match(/(.+[a-zA-Z0-9-]{36})/g)[0];
      	 }
         
         
          // fenster auf, temparatur falsch
          var devices = $('state[id=hmip.*.devices.*.channels.1.windowOpen]'); // hmip.1.devices.3014F711A000155F298D9D3B 
          console.log("Anzahl (gesamt) devices window open, wrong temperature: " + devices.length);
          var cnt = 0;
      
          devices.each(function (id_fk, i){
      
              sendTo('influxdb.0', 'getHistory', {
                  id: id_fk,
                  options: {
                      end:       Date.now(),
                      count:     10,
                      aggregate: 'none' // or 'none' to get raw values
                  }
              }, function (result) {
      
                  //console.log("RESULTSET 1 LENGTH: " + result.result.length);
                  var window_open_currently = (i == 9 && result.result[i].val);
                  //console.log("FENSTER IST CURRENTLY OPEN: " + window_open_currently);
      
                  var window_open_from = null;
                  var window_open_to = null;
      
                  for (var i = result.result.length-1; i >= 0 ; i--) {
                      //console.log("RESULT" +i + ": " + result.result[i].val + ' ' + new Date(result.result[i].ts).toISOString());
      
                      // TO: is not set, current is FALSE and next is TRUE
                      if( window_open_to == null && !result.result[i].val && (i-1 >= 0) && result.result[i-1].val) {
                          window_open_to = result.result[i].ts
                      }
      
      
                      // FROM: TO has to be set, current value has to be TRUE and next FALSE
                      if( window_open_to != null && window_open_from == null && result.result[i].val && (i-1 >= 0) && !result.result[i-1].val) {
                          window_open_from = result.result[i].ts
                      }
                      
                  }
      
                  // check if resultset is big enough
                  if( window_open_from == null || window_open_to == null) {
                      return;
                  }
      
                  // get thermostat
                  var name_fk = getObject(getDeviceId(id_fk)).common.name;
                  var name_room = name_fk.substring(0, name_fk.lastIndexOf("_"));
                  var name_t = name_room + "_T";
                  
              
      
                  //console.log("namen des fenstersensors: " + name_fk);
                  //console.log("namen des thermos: " + name_t);
                  //console.log("window_open_from: " + new Date(window_open_from).toISOString());
                  //console.log("window_open_to: " + new Date(window_open_to).toISOString());
      
      
                  // thermo zu fk finden
                  var thermos = $('state[id=hmip.*.devices.*.channels.1.setPointTemperature]');
                  thermos.each(function (id, i){
                      if( getObject(getDeviceId(id)).common.name.includes(name_t)){
                          //console.log("thermostat zu fenstersensor gefunden: " + getObject(getDeviceId(id)).common.name + " zu " + name_fk);
      
                          // in db gucken nach temps
                          sendTo('influxdb.0', 'getHistory', {
                              id: id,
                              options: {
                                  end: new Date(window_open_to), //.setMilliseconds(new Date(window_open_to).getMilliseconds() - 3000),
                                  start: new Date(window_open_from), //.setMilliseconds(new Date(window_open_to).getMilliseconds() + 3000),
                                  //count: 1,
                                  //limit: 1,
                                  aggregate: 'none' // or 'none' to get raw values
                              }
                          }, function (result) {
                              var temp_avg = 0;
      
                              //console.log("RESULTS ALS FENSTER AUF WAR LENGTH: " + result.result.length);
                              for (var i = 0; i < result.result.length; i++) {
                                  temp_avg = temp_avg + result.result[i].val;
                                  //console.log(getObject(getDeviceId(id)).common.name +' von ' + new Date(window_open_from).toISOString()+ ' bis ' + new Date(window_open_to).toISOString()+ ' set temp: ' + result.result[i].val );
                                  //console.log(getObject(getDeviceId(id)).common.name + ' (' + name_fk + '): ' + new Date(result.result[i].ts).toISOString()+ ' set temp: ' + result.result[i].val );
                              }
      
      
                              if( result.result.length > 0) {
                                  temp_avg = temp_avg / result.result.length;
      
                                  // check if window-open-temp is > 5°C
                                  if( temp_avg > 5) {
                                      // console.log(getObject(getDeviceId(id)).common.name + ' (' + name_fk + '): ' + temp_avg);
      
                                      //devices_error_status[getObject(getDeviceId(id)).common.name] = "window open, wrong temperature (" + temp_avg.toFixed(1) + "°C)";
                                      cnt++;
                                  }
                                  
                              }
                          });
      
                      }
                  }); // thermos
      
              }); // db abfrage fk
      
          }); // fensterkontakte
      

      Timeout resultiert darin, dass im inneren getHistory result.result undefiniert wird.

      posted in JavaScript
      C
      cedric
    • Skript läuft ab und zu in Timeout bei InfluxDB-Abfrage

      Hi, ich habe seit dem Update auf den Skript-Engine 8.8.2 folgenden Fehler in einem meiner Skripts, die Abfrage dauert wohl solange, dass es zu einem TImeout kommt.
      Das kann durchaus sein, weil es sich um sehr viele Daten handelt.
      Ich lasse es 4h/laufen und 2h läuft es ohne TImeout und 2x kommt es zu einem Timeout (wahrscheinlich weil in dem Moment noch andere Sachen passieren und zu viel Last auf dem System ist oder so).
      Kann ich das Timeout-Limit irgendwo erhöhen oder verstehe ich die Fehlermeldung grundsätzlich falsch?

      at process.processTimers (node:internal/timers:512:7)
      
      javascript.0
      2024-08-10 11:30:34.229	error	at listOnTimeout (node:internal/timers:569:17)
      
      j.avascript.0
      2024-08-10 11:30:34.229	error	at Timeout._onTimeout 
      (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3078:38)
      posted in JavaScript
      C
      cedric
    • RE: Adapter per Skript stoppen/starten löscht Einstellungen

      Tausend Dank Leute für die Hilfe!
      Läuft jetzt alles 🙂

      Schönes WE!

      posted in JavaScript
      C
      cedric
    • Adapter per Skript stoppen/starten löscht Einstellungen

      Hi,

      ich habe immer mit folgendem Code Adapter neugestartet/gestoppt und gestartet:

      var object_name = "system.adapter.hmip." + i;
      var obj = getObject(object_name);
      
      // restart
      obj.common.restartAdapter = true;
      setObject(object_name, obj);
      
      
      // enable  
      obj.common.enabled = true;
      setObject(object_name, obj);
      
      
      
      // disable
      obj.common.enabled = false;
      setObject(object_name, obj);
      

      Wenn ich das jetzt mache bei meinem hmip-Adapter, dann werden die ganzen Einstellungen (Authentication token, PIN, ...) in der Instanz entfernt.

      GIbt es andere Wege um Adapter neuzutarten/stoppen/starten oder ist es irgendwo (im Adapter? iobroker?) ein Bug?

      posted in JavaScript
      C
      cedric
    • RE: Logfile der Fritzbox per MQTT übertragen und wegspeichern

      @homoran
      Tausend Dank, du hattest recht.

      Ich musste MQTT_MAX_PACKET_SIZE in der PubSubClient.h hochsetzen damit es klappt, dort war 256 bytes das Limit und alles darüber wurde gar nicht an MQTT geschickt.

      posted in ioBroker Allgemein
      C
      cedric
    • RE: Logfile der Fritzbox per MQTT übertragen und wegspeichern

      @homoran said in Logfile der Fritzbox per MQTT übertragen und wegspeichern:

      @cedric sagte in Logfile der Fritzbox per MQTT übertragen und wegspeichern:

      Ich rede von der Spalte rechts, also wo Fritzbox 7490 steht, die heißt bei mir "value", wahrscheinlich Wert auf deutsch.

      bitte keine Schnipsel ohne Zusammenhang!
      kompletter Baum und Spaltenköpfe bitte

      Captura de pantalla 2023-09-23 a las 13.53.25.jpg

      posted in ioBroker Allgemein
      C
      cedric
    • RE: Logfile der Fritzbox per MQTT übertragen und wegspeichern

      @homoran said in Logfile der Fritzbox per MQTT übertragen und wegspeichern:

      @cedric sagte in Logfile der Fritzbox per MQTT übertragen und wegspeichern:

      danach wird unter "value" nichts mehr angezeigt.

      was für ein value?

      Captura de pantalla 2023-09-23 a las 13.40.22.jpg

      Ich rede von der Spalte rechts, also wo Fritzbox 7490 steht, die heißt bei mir "value", wahrscheinlich Wert auf deutsch.

      Ursprünglich wollte ich das gesamte Logfile der FB dort hinterlegen. Allerdings wird dann immer (null) angezeigt. Wenn ich es kürze auf 200 Zeichen, dann klappt alles, daher meine Vermutung, dass das Feld irgendeinem Zeichenlimit unterliegt. Alternative kann natürlich auch sein, dass es irgendwelche Zeichen nicht verträgt, die im späteren Teil des Logfiles auftauchen. Die Einträge werden erstellt/aktualisiert über den MQTT-Adapter.

      posted in ioBroker Allgemein
      C
      cedric
    • RE: Logfile der Fritzbox per MQTT übertragen und wegspeichern

      @djmarc75 said in Logfile der Fritzbox per MQTT übertragen und wegspeichern:

      @cedric sagte in Logfile der Fritzbox per MQTT übertragen und wegspeichern:

      das Logfile meiner Fritzbox per MQTT übertragen und diese wegspeichern.
      Grundsätzlich klappt das auch gut

      und wie genau?
      Würde es gerne nachstellen

      @djmarc75
      Ich lese die FB über TR064 mit einem ESP32 aus und schiebe es danach in MQTT, falls das deine Frage war/beantwortet.

      @mickym said in Logfile der Fritzbox per MQTT übertragen und wegspeichern:

      @cedric Na Du kannst doch immer wenn ein neuer Inhalt in value auftaucht, dass selber in eine Datei schreiben.

      Dazu müsste der Inhalt in value ja auftauchen, was er nicht macht, außer er ist sehr klein. Ich kann ihn natürlich stückeln und dann wieder im iobroker in eine Datei zusammenführen, allerdings möchte ich es am liebsten dauerhaft in value lesbar haben (also das gesamte Log) und nicht in eine Datei gucken müssen.

      posted in ioBroker Allgemein
      C
      cedric
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo