Navigation

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

    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

    T
    • Profile
    • Following 0
    • Followers 0
    • Topics 2
    • Posts 9
    • Best 0
    • Groups 1

    Torsten G.

    @Torsten G.

    0
    Reputation
    13
    Profile views
    9
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Torsten G. Follow
    Starter

    Latest posts made by Torsten G.

    • RE: [Gelöst] FoxESS Cloud Javascript Warnmeldungen

      @paul53 Dein korrigierter Post mit Zahlen. Die Datenpunkte in IOBroker habe ich auch auf Zahlen gemacht.

      
                  const datas = JSON.parse(res).result[0].datas;
                  setState("0_userdata.0.FoxEss.PVPower", Math.round(datas[0].value * 1000) / 1000, true);
                  setState("0_userdata.0.FoxEss.SOC", datas[2].value, true);
                  setState("0_userdata.0.FoxEss.Load", Math.round(datas[3].value * 1000) / 1000, true);
      
      
      posted in JavaScript
      T
      Torsten G.
    • RE: [Gelöst] FoxESS Cloud Javascript Warnmeldungen

      @paul53 Danke funktioniert nun super. Problem gelöst

      posted in JavaScript
      T
      Torsten G.
    • RE: [Gelöst] FoxESS Cloud Javascript Warnmeldungen

      @asgothian Danke nur jetzt kommt folgende Meldung vom Admin.0

      Object 0_userdata.0.FoxEss.PVPower is invalid: Default value has to be type "string" but received type "number" This will throw an error up from js-controller version 7.0.0!

      posted in JavaScript
      T
      Torsten G.
    • RE: [Gelöst] FoxESS Cloud Javascript Warnmeldungen

      @paul53 Das funktioniert leider nicht. Nur Error Meldungen. Trotzdem Danke für deine Mühe

      posted in JavaScript
      T
      Torsten G.
    • [Gelöst] FoxESS Cloud Javascript Warnmeldungen

      Ich habe dieses Javascript im Netz gefunden. Soweit läuft es auch. Jedoch verstehe ich nicht warum es im Log Warnungen gibt. Kann man diese ausstellen bzw. was könnte geändert werden? Ich bin mehr der Copy/Paste User und habe von Java und Code nicht viel Ahnung.

      /*
      Dieses Script ruft alle 2 Minuten die FoxESS Cloud über eine RestAPI auf und speichert die aufgerufenen Informationen
      an die entsprechenden Objekte im IO-Broker.
      */
       
      const https = require("https")
      const crypto = require('crypto')
      const token = "???"; /* Hier muss der API-Key aus der FoxESS Cloud eingefügt werden */
      const sn = "???"; /* Hier muss die Seriennummer vom Inverter aus der FoxESS Cloud eingefügt werden */
       
      schedule("*/2 * * * * ", async function () {
        try {
          const data = JSON.stringify({
              "sn": sn,
              "variables": [
                  "pvPower", "generationPower", "SoC", "loadsPower"
              ]
          });
          const path = "/op/v0/device/real/query";
          const milliseconds = new Date().getTime();
          const signature = crypto.createHash('md5').update(path + "\\r\\n" + token + "\\r\\n" + milliseconds).digest("hex");
          
          const options = {
              headers: {
                  "Content-Type": "application/json",
                  "token": token,
                  "timestamp": milliseconds,
                  "signature": signature,
                  "lang": "en"
              },
              hostname: "www.foxesscloud.com",
              method: "POST",
              path: path,
              port: 443
          }
          const request = https.request(options, response => {
              //console.log('STATUS: ' + response.statusCode);
              response.setEncoding('utf8');
              response.on("data", function (res) {
                  //console.log(res);
                  const json = JSON.parse(res);
                  const pvPower = json.result[0].datas[0].value;
                  setState("0_userdata.0.FoxEss.PVPower", pvPower.toFixed(3));
                  const soc = json.result[0].datas[2].value;
                  setState("0_userdata.0.FoxEss.SOC", soc.toString());
                  const load = json.result[0].datas[3].value;
                  setState("0_userdata.0.FoxEss.Load", load.toFixed(3));
              });
          });
          request.write(data);
          request.end();
       
        } catch (e) { console.error(e); }
      });
      

      Folgende Warnungen erhalte ich bei jeder Ausführung:

      javascript.0
      2025-05-27 09:34:00.169 info State value to set for "0_userdata.0.FoxEss.PVPower" has to be type "number" but received type "string"
      javascript.0
      2025-05-27 09:34:00.156 warn at TLSSocket.Readable.push (node:internal/streams/readable:392:5)
      javascript.0
      2025-05-27 09:34:00.156 warn at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
      javascript.0
      2025-05-27 09:34:00.156 warn at addChunk (node:internal/streams/readable:561:12)
      javascript.0
      2025-05-27 09:34:00.155 warn at TLSSocket.emit (node:domain:489:12)
      javascript.0
      2025-05-27 09:34:00.155 warn at TLSSocket.emit (node:events:524:28)
      javascript.0
      2025-05-27 09:34:00.155 warn at TLSSocket.socketOnData (node:_http_client:544:22)
      javascript.0
      2025-05-27 09:34:00.155 warn at HTTPParser.parserOnBody (node:_http_common:130:24)
      javascript.0
      2025-05-27 09:34:00.155 warn at IncomingMessage.Readable.push (node:internal/streams/readable:392:5)
      javascript.0
      2025-05-27 09:34:00.155 warn at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
      javascript.0
      2025-05-27 09:34:00.155 warn at addChunk (node:internal/streams/readable:561:12)
      javascript.0
      2025-05-27 09:34:00.154 warn at IncomingMessage.emit (node:domain:489:12)
      javascript.0
      2025-05-27 09:34:00.154 warn at IncomingMessage.emit (node:events:524:28)
      javascript.0
      2025-05-27 09:34:00.154 warn at IncomingMessage.<anonymous> (script.js.skripte.foxx:44:13)
      javascript.0
      2025-05-27 09:34:00.154 warn at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2090:20)
      javascript.0
      2025-05-27 09:34:00.152 warn You are assigning a string to the state "0_userdata.0.FoxEss.PVPower" which expects a number. Please fix your code to use a number or change the state type to string. This warning might become an error in future versions.

      Den Datenpunkt PVPower habe ich bereits auf Nummer, dann auf String aber es kommt immer eine Fehlermeldung. Die Werte stimmen in beiden Versionen.
      Bei PVPower auf String kommt folgende Meldung:
      admin.0
      2025-05-27 09:43:47.084 warn Object 0_userdata.0.FoxEss.PVPower is invalid: Default value has to be type "string" but received type "number" This will throw an error up from js-controller version 7.0.0!

      Vielleicht kann mir wer Licht ans Fahrrad machen 😊 ?

      posted in JavaScript
      T
      Torsten G.
    • RE: [Vorlage] Einbinden des Xiaomi Mijia Bluetooth Thermo- und Hygrometer

      @Lenny-CB said in [Vorlage] Einbinden des Xiaomi Mijia Bluetooth Thermo- und Hygrometer:

      @Torsten-G schau dir mal die Anleitung an:
      https://forum.iobroker.net/topic/28388/xiaomi-temp-and-humidity-monitor-2-ble-adapter/97

      Vielen Dank hat geholfen. Ist Anfänger geeignet 🙂

      posted in ioBroker Allgemein
      T
      Torsten G.
    • RE: [Vorlage] Einbinden des Xiaomi Mijia Bluetooth Thermo- und Hygrometer

      @Colt said in [Vorlage] Einbinden des Xiaomi Mijia Bluetooth Thermo- und Hygrometer:

      Hallo zusammen,
      gibt es mittlerweile eine möglichkeit den LYWSD03MMC in den iObroker zu bekommen?

      Ich habe mir 2 Stück für 9 Euro zugelegt und stehe nun auch vor der Frage ob jemand schon eine Lösung gefunden hat. Ich habe mir die für die Luftfeuchtigkeit im Keller gekauft und würde die gerne über VIS anzeigen lassen bzw. den Luftentfeuchter starten lassen.

      Wenn jemand schon eine Lösung gefunden hat immer her damit. Aber für Anfänger geeignet 🙂

      Viele Grüße
      Torsten

      posted in ioBroker Allgemein
      T
      Torsten G.
    • RE: Licht Script zählen Shellys hinzufügen

      @crunchip Vielen Dank Script ausgetauscht und angepasst klappt.

      Erledigt

      posted in JavaScript
      T
      Torsten G.
    • Licht Script zählen Shellys hinzufügen

      Guten Tag,

      ich benutze seit längerem das Licht Script zählen von diesem Topic
      https://forum.iobroker.net/topic/5369/gelöst-lichter-zählen-script-läuft-nicht/113

      Ich habe mir nun, auch der Preisfrage wegen, zusätzlich Shelly´s als Lichtschalter verbaut. Gerne würde ich diese Schalter auch mit dem Script abfragen. Nur habe ich von dieser Sprache keine Ahnung.

      Wer könnte das Script um die Shelly´s erweitern? Der Datenpunkt müsste folgender sein:
      8d11c43a-a6c2-455d-9344-d42c3fe7df00-image.png

      Dieses Script ist bei mir im Einsatz - entnommen aus verlinktem Topic:

      /* Status Zahl Lichter
      
      zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
      Daten kommen vom Gewerk "Licht"
      */
      var logging = true;
      
      var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
            idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
            idText = 'javascript.0.Status.Lichter.Text',
            idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
            idAnsage = 'javascript.0.Status.Lichter.Ansage';
      
      // Ab hier nix mehr ändern
      createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
          type: 'number',
          name: 'Anzahl aller Lichter',
          min: 0,
          def: 0,
          role: 'value'
      });
      createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
          type: 'number',
          name: 'Anzahl der eingeschalteten Lichter',
          min: 0,
          def: 0,
          role: 'value'
      });
      createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
          type: 'string',
          name: 'Eingeschaltete Lichter',
          desc: 'Namen der eingeschalteten Lichter',
          def: ' ',
          role: 'value'
      });
      createState(idAnsage, {
          type: 'string',
          name: 'Eingeschaltete Lichter (Ansage)',
          desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
          def: ' ',
          role: 'value'
      });
      createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
          type: 'string',
          name: 'Räume mit eingeschalteten Lichter',
          desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
          def: ' ',
          role: 'value'
      });
      
      // HM Schalter, HM Dimmer und Hue Schalter im Gewerk Licht
      const hmSTATE = $('channel[state.id=*.STATE](functions=Licht)');
      const hmLEVEL = $('channel[state.id=*.LEVEL](functions=Licht)');
      const hueon   = $('state[id=*.on](functions=Licht)');
      
      var anzahlLichterAn,
          anzahlLichter,
          textLichterAn,
          textRaum;
      
      function checkLicht(id, vorn, hinten) {
          var name = getObject(id).common.name;
          var devicename = name.substring(vorn, name.indexOf(hinten)); //Zeichen vorn, State hinten aus Text entfernen
          var raum = getObject(id, "rooms").enumNames[0]; 
          if (getState(id).val) { // wenn Zustand != false / 0, dann wird die Anzahl der Lichter hochgezählt
              ++anzahlLichterAn;
              textLichterAn.push(devicename); // Zu Array hinzufügen
              if(textRaum.indexOf(raum) == -1) textRaum.push(raum); // zu Array hinzu, wenn noch nicht vorhanden
          }
          ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
      }
      
      function checkDevices() {
          // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
          anzahlLichterAn = 0;
          anzahlLichter = 0;
          textLichterAn = [];
          textRaum = [];
          hmSTATE.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
      	    checkLicht(id, 0, '.STATE');
          });
      
          hueon.each(function(id, i) { // Schleife für jedes gefundenen Element *.on im Gewerk Licht
      	    checkLicht(id, 12, '.on');
          });
      
          hmLEVEL.each(function(id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
      	    checkLicht(id, 0, '.LEVEL');
          });
      
          // Array mit Lichternamen sortieren
          textLichterAn.sort();
          textRaum.sort(); // <---- NEU
          // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
          if (logging) log("Text: " + textLichterAn);
          if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
          // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
          setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
          // setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
          setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
          setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
          // setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
          setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
      }
      // Trigger
      hmSTATE.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Licht
          if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
          checkDevices();
      });
      hueon.on(function(obj) { // bei Zustandänderung *.on von HUE Lampen im Gewerk Licht
          if (logging) log('Auslösende HUE: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
          checkDevices();
      });
      hmLEVEL.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
          if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
          checkDevices();
      });
      
      // Skriptstart
      setTimeout(function() {
          if (logging) log('Auslöser Skriptstart');
          checkDevices();
      }, 500);
      
      // Aufbereitung für Ansage
      function strip_tags(data) {
          var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
          return (rueckgabe);
      }
      
      on(idText, function(obj) {
          var text = obj.state.val;
          text = (getState(idAnzahl).val > 0) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
          setState(idAnsage, text);
      });
      

      Für die Mühe danke ich schonmal im Voraus 🙂

      Gruß
      Torsten

      PS: Sollte ich mein Thema in der Forensuche übersehen haben reicht auch ein Hinweis auf den entsprechenden Eintrag

      posted in JavaScript
      T
      Torsten G.
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo