Navigation

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

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

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

    mplogas

    @mplogas

    Starter

    I'm just a developer, working around the limitations of JavaScript ;)

    0
    Reputation
    12
    Profile views
    15
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    mplogas Follow
    Starter

    Latest posts made by mplogas

    • RE: deConz WebSocket watchdog

      @Jey-Cee Hab eben deinen 1.2.x Thread gefunden und habe mal quergelesen. Danke für deine Mühen!

      Kurz OT: Also 1.2.x ist nur ein Zwischenschritt, sobald das stabil ist wird daraus ein neues Major-Release (2.x), richtig? Was passiert mit meiner mysql-History? Sind deine bevorstehenden deconzId/deviceId Änderungen da transparent oder erzeugste du neue Datenpunkte für die ich meine Analytics anpassen muss?

      posted in ioBroker Allgemein
      mplogas
      mplogas
    • RE: deConz WebSocket watchdog

      @Jey-Cee danke für die schnelle Antwort! Die .72 ist leider noch nicht verfügbar für mich, also warte ich.

      Laut npm ist die 1.2.4 deines Adapters schon freigegeben. Kann man schon auf einem Produktivsystem aktualisieren oder sollte das Update Hand-in-Hand mit dem Update auf deConz 2.5.72 gehen?

      posted in ioBroker Allgemein
      mplogas
      mplogas
    • deConz WebSocket watchdog

      Hi,
      mir ist aufgefallen, dass mein DeConz-Adapter gelegentlich (und scheinbar zufällig) die WebSocket-Verbindung zum deConz-Gateway verliert und meine Sensordaten entsprechend nicht mehr empfangen (und gespeichert & verarbeitet) werden können. Das äußert sich darin, dass bspw meine Morgenroutinen nicht mehr ausgeführt werden, da der Helligkeitswert im Garten seit 3 Tagen auf einem "Mittagswert" festhängt.
      //edit: Commands über die REST-API funktionieren problemlos!

      Meine HueEssentials-App ist übrigens nicht betroffen, allerdings wird die Verbindung zum Gateway auch recht häufig (wieder)hergestellt.

      Gibt es einen Watchdog für das deConz-Modul, der die WebSocket-Verbindung wiederherstellt? Sollte es täglich einmal neu initialisiert werden?

      posted in ioBroker Allgemein
      mplogas
      mplogas
    • RE: Fragen zur Ausführung von setState und getState

      @AlCalzone said in Fragen zur Ausführung von setState und getState:

      Das kannst du durchaus machen. Allerdings weißt du dann, dass der Inhalt ein leeres Array ist, das brauchst du nicht wieder auslesen.

      Das Auslesen geschieht ja nur im Log, weil ich versuchte den Fehler zu finden. Mir ist aufgefallen, dass ich jeden zweiten Tag (bzw. jeden zweiten Lauf) die Werte des vorherigen Laufs noch im Array hatte obwohl ich Clear() aufgerufen hatte. Wie auch immer, ich habe Clear() ersetzt und überschreibe das Array jetzt mit den neuen Werten. Ist leider nicht ganz so modular wie erhofft, aber vermutlich muss ich mich ohnehin gedanklich von den SOLID-Prinzipien lösen und mehr "hacken".

      posted in JavaScript
      mplogas
      mplogas
    • RE: Fragen zur Ausführung von setState und getState

      @AlCalzone Ja, ich kann natürlich drumherum-engineeren indem ich kein Clear nutze sondern ein Overwrite schreibe und somit den Datenpunkt "zeitunkritisch" schreibe. Mich interessierte, ob/was ich falsch gemacht hatte - wenn das by-design ist das auch OK 🙂

      posted in JavaScript
      mplogas
      mplogas
    • RE: Fragen zur Ausführung von setState und getState

      @Mic said in Fragen zur Ausführung von setState und getState:

      Wenn du noch mehr Hilfe brauchst, poste am besten ein komplettes Script, damit wir das schnell nachvollziehen/testen können

      Mein Repro-Code im OP zeigt mein Problem. Was ich eigentlich machen will ist einmal am Tag durch alle Sensoren und Switches rennen und alle Sensoren unter einem Schwellwert in einem JSON-Array als string-Datenpunkt speichern. Dieser Teil funktioniert ohne Probleme und ist auch nicht zeitkritisch. Ich möchte allerdings beim Scriptstart sinnvollerweise den Datenpunkt vorher "leeren" (lies: mit einem leeren JSON-Array beschreiben).
      Genau dieses Clear() bereitet mir Probleme: wenn ich getValue(id) zeitnah nach setValue(id, value) aufrufe ist bei jedem zweiten Mal (warum jedes Zweite?) nicht der erwartete (und geschriebene) Inhalt im Datenpunkt.

      Ich habe meinen Code mal angehangen, aber da passiert auch nicht viel mehr als im Repro. ClearArray und AddToArray sind globale Methoden, die Clear und Add im Repro entsprechen.

      schedule("30 5 * * *", CheckBattery);
      function CheckBattery() {
          const warning = "javascript.0.x.batterywarning";
          const empty = "javascript.0.x.batteryempty";
      
          ClearArray(warning);
          ClearArray(empty);    
      
          let sensors = getObject("enum.sensors.battery").common.members;
          let switches = getObject("enum.switches.battery").common.members;
          let state = sensors.concat(switches);
      
          for(let i = 0; i < state.length; i++) {
              let battery = getState(state[i]).val;
      
              if(battery < 30) {
                  log("critical: " + state[i] + " " + battery);
                  AddToArray(empty, state[i]);
              } else if(battery < 50) {
                  log("warning: " + state[i] + " " + battery);
                  AddToArray(warning, state[i]);
              }
          }
      }
      
      posted in JavaScript
      mplogas
      mplogas
    • RE: Fragen zur Ausführung von setState und getState

      @AlCalzone das mache ich tatsächlich in meinem ursprünglichen Batterie-Skript. Meine Clear()-Methode zeigt aber, dass der mit setState() gesetzte Wert nicht zuverlässig mit getState() abgerufen werden kann. Da meine JSONArray-CRUDs Teil eines globalen Scripts sind interessiert mich was ich falsch mache.

      posted in JavaScript
      mplogas
      mplogas
    • Fragen zur Ausführung von setState und getState

      Hallo.
      Ich habe ein Script, welches Batteriewerte meiner Sensoren und Schalter aggregiert und in eigenen Datenpunkten ablegt. Leider funktioniert das Script nicht wie erwartet und ich verstehe nicht wieso. Ich habe das Problem in einem Repro extrahiert und würde mich freuen, wenn ihr mal draufschauen könntet und mir meinen Fehler zeigt.

      Erwartetes Verhalten:

      1. Datenpunkt wird mit der Clear()-Methode gelöscht
      2. Der Datenpunkt enthält ein leeres serialisiertes JSON-Array
      3. Ein string ("test1") wird dem Datenpunkt mit der Add()-Methode hinzugefügt
      4. Der Datenpunkt enthält ein serialisiertes JSON-Array mit einem Item: "test1"

      Beobachtetes Verhalten:

      1. Run, Clear() ist erfolgreich
      11:16:10.846	info	javascript.0 (27065) Start javascript script.js.dev.mvp
      11:16:10.853	info	javascript.0 (27065) script.js.dev.mvp: add: [] | | test1
      11:16:10.853	info	javascript.0 (27065) script.js.dev.mvp: content: []
      11:16:10.853	info	javascript.0 (27065) script.js.dev.mvp: registered 0 subscriptions and 0 schedules
      11:16:10.856	info	javascript.0 (27065) script.js.dev.mvp: arrayjavascript.0.DEV.repro cleared: []
      11:16:10.856	info	javascript.0 (27065) script.js.dev.mvp: added test1 to list
      
      1. Run, Clear() ist nicht erfolgreich
      11:16:43.390	info	javascript.0 (27065) Start javascript script.js.dev.mvp
      11:16:43.397	info	javascript.0 (27065) script.js.dev.mvp: add: ["test1"] | test1 | test1
      11:16:43.397	info	javascript.0 (27065) script.js.dev.mvp: content: ["test1"]
      11:16:43.397	info	javascript.0 (27065) script.js.dev.mvp: registered 0 subscriptions and 0 schedules
      11:16:43.399	info	javascript.0 (27065) script.js.dev.mvp: arrayjavascript.0.DEV.repro cleared: ["test1"]
      

      Script:

      createState("DEV");
      createArray("DEV.repro");
      
      Test();
      
      function Test() {
          const id = "javascript.0.DEV.repro";
          let data = "test1";
          
          Clear(id);
          Add(id, data);
          Remove(id, data);
          Add(id, "test2");
      
          log("content: " + getState(id).val);
      }
      
      function createArray(name) {
          let data = [];
          createState(name, "", {
              read: true,
              write: true,
              desc: "Beschreibung",
              type: "string",
              def: JSON.stringify(data)
          });
      }
      
      function Add(array, value) {
          let data = [];
          let raw = getState(array).val;
          if(raw.length > 2) {
              data = JSON.parse(raw);
          }
      
          log("add: " + raw + " | " + data + " | " + value);
      
          if(!data.includes(value)) {
              data.push(value);
              setState(array, JSON.stringify(data));                        
              log("added " + value + " to list");
          }
      }
      
      function Clear(array) {
          let data = [];
          log(JSON.stringify(data));
          setState(array, JSON.stringify(data));
          log("array" + array + " cleared: " + getState(array).val);
      }
      

      Workarounds

      Ich hatte die Vermutung, dass es sich um ein Timing-Problem handelt und habe daher versucht, beim setState() mit Callbacks zu arbeiten. Leider ändert sich nichts, laut Log. Clear() ist immer nur jedes zweite Mal erfolgreich.

      function Clear(array, callback) {
         let data = [];
         setState(array, JSON.stringify(data), false, callback);   
      }
      
      ...
      Clear(id, function() {
              log("array" + id + " cleared: " + getState(id).val);
              Add(id, data, function() {
                  log("content: " + getState(id).val);
              });
      });
      ...
      

      Was mache ich falsch?

      posted in JavaScript
      mplogas
      mplogas
    • RE: Deconz - common.name ist NULL

      Danke! Das wars!

      Wer lesen kann... 😞

      posted in ioBroker Allgemein
      mplogas
      mplogas
    • Deconz - common.name ist NULL

      Hallo,
      laut einem Forumspost (von 2015) fragt man den Namen von Elementen mit

      getObject(elementId + ".common.name");
      

      ab. Das mache ich auch, aber laut Log ist der Name null

      sensorSelector.each(function(id, index) {
              //presence testing for now
              const elementId = id.slice(0, id.length-9);
              log("sensor id: " + elementId, "info");
              log("sensor name:" + getObject(elementId + ".common.name"), "info");
          });
      
      12:34:07.115	info	javascript.1 script.js.dev.Test: sensors found: 15
      12:34:07.115	info	javascript.1 script.js.dev.Test: sensor id: deconz.0.Sensors.13
      12:34:07.115	info	javascript.1 script.js.dev.Test: sensor name:null
      12:34:07.115	info	javascript.1 script.js.dev.Test: sensor id: deconz.0.Sensors.16
      12:34:07.116	info	javascript.1 script.js.dev.Test: sensor name:null
      ...
      

      Im Objektbaum sind die Namen zu sehen, vermutlich hat sich die API geändert. Wie macht man es jetzt richtig?

      Danke!

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