Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Gelöst] FoxESS Cloud Javascript Warnmeldungen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.4k

[Gelöst] FoxESS Cloud Javascript Warnmeldungen

Geplant Angeheftet Gesperrt Verschoben JavaScript
11 Beiträge 4 Kommentatoren 580 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • AsgothianA Offline
    AsgothianA Offline
    Asgothian
    Developer
    schrieb am zuletzt editiert von Asgothian
    #2

    @torsten-g sagte in FoxESS Cloud Javascript Warnmeldungen:

    State value to set for "0_userdata.0.FoxEss.PVPower" has to be type "number" but received type "string"

    da sollte deinem Fahrrad ein Licht aufgehen:

    der Datenpunkt ist definiert als Zahl (number). Dein Skript schreibt da einen String rein (string).

    Um die Warnung loszuwerden musst du die explizite Konvertierung zum String wegnehmen oder den DP als String deklarieren.

    .
    .
    .
                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));
    .
    .
    .
    

    A.

    ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
    "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

    T 1 Antwort Letzte Antwort
    0
    • T Torsten G.

      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 :blush: ?

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #3

      @torsten-g sagte: Licht ans Fahrrad machen ?

      Da es sich um Zahlenwerte handelt, ändere Zeilen 41 bis 47:

                  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);
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      T 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @torsten-g sagte: Licht ans Fahrrad machen ?

        Da es sich um Zahlenwerte handelt, ändere Zeilen 41 bis 47:

                    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);
        
        T Offline
        T Offline
        Torsten G.
        schrieb am zuletzt editiert von
        #4

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

        paul53P 1 Antwort Letzte Antwort
        0
        • AsgothianA Asgothian

          @torsten-g sagte in FoxESS Cloud Javascript Warnmeldungen:

          State value to set for "0_userdata.0.FoxEss.PVPower" has to be type "number" but received type "string"

          da sollte deinem Fahrrad ein Licht aufgehen:

          der Datenpunkt ist definiert als Zahl (number). Dein Skript schreibt da einen String rein (string).

          Um die Warnung loszuwerden musst du die explizite Konvertierung zum String wegnehmen oder den DP als String deklarieren.

          .
          .
          .
                      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));
          .
          .
          .
          

          A.

          T Offline
          T Offline
          Torsten G.
          schrieb am zuletzt editiert von
          #5

          @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!

          1 Antwort Letzte Antwort
          0
          • T Torsten G.

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

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #6

            @torsten-g sagte: Das funktioniert leider nicht.

            Ich hatte die erste Zeile nachträglich korrigiert. Hast du die Korrektur übernommen?

                        const datas = JSON.parse(res).result[0].datas;
            

            Die Datenpunkte müssen vom Typ "number" sein.

            @torsten-g sagte in FoxESS Cloud Javascript Warnmeldungen:

            Object 0_userdata.0.FoxEss.PVPower is invalid: Default value has to be type "string" but received type "number"

            Wenn du Strings verwenden möchtest, musst du auch common.def von 0 (Zahl) in "" (Leerstring) ändern.

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            T 1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @torsten-g sagte: Das funktioniert leider nicht.

              Ich hatte die erste Zeile nachträglich korrigiert. Hast du die Korrektur übernommen?

                          const datas = JSON.parse(res).result[0].datas;
              

              Die Datenpunkte müssen vom Typ "number" sein.

              @torsten-g sagte in FoxESS Cloud Javascript Warnmeldungen:

              Object 0_userdata.0.FoxEss.PVPower is invalid: Default value has to be type "string" but received type "number"

              Wenn du Strings verwenden möchtest, musst du auch common.def von 0 (Zahl) in "" (Leerstring) ändern.

              T Offline
              T Offline
              Torsten G.
              schrieb am zuletzt editiert von
              #7

              @paul53 Danke funktioniert nun super. Problem gelöst

              paul53P 1 Antwort Letzte Antwort
              0
              • T Torsten G.

                @paul53 Danke funktioniert nun super. Problem gelöst

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #8

                @torsten-g sagte: Problem gelöst

                Mit Zahlen oder Strings?

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                T 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @torsten-g sagte: Problem gelöst

                  Mit Zahlen oder Strings?

                  T Offline
                  T Offline
                  Torsten G.
                  schrieb am zuletzt editiert von Torsten G.
                  #9

                  @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);
                  
                  
                  1 Antwort Letzte Antwort
                  0
                  • MartinPM Online
                    MartinPM Online
                    MartinP
                    schrieb am zuletzt editiert von MartinP
                    #10

                    Ich habe das Script etwas angepasst - ich habe nur einen Micro-Inverter von FoxEss (Balkonkraftwerk, keine Batterie (deshalb SOC unnötig, und auch keine Lastmessung deshalb Load unnötig)

                    Da der kleine Wechselrichter auch die Erzeugung in kW ausgibt, habe ich das Round angepasst - es kommen dadurch "glatte" Wattwerte (nicht kW) ohne Komma in den Datenpunkt

                    14b37deb-eed3-4e1f-abd2-b94db89a25c7-grafik.png

                    /*
                    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 datas = JSON.parse(res).result[0].datas;
                                console.log(datas[0]);
                                setState("0_userdata.0.FoxEss.PVPower", Math.round(datas[0].value * 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);        
                            });
                        });
                        request.write(data);
                        request.end();
                     
                      } catch (e) { console.error(e); }
                    });
                    

                    Meine Planungen für weitere Ergänzungen am Script:

                    1. Tagesbudget an Queries sparsamer einsetzen
                      a) zwischen Dämmerungsende und Dämmerungsbeginn keine Werte über die API abfragen (da kann es keine Erträge geben).
                      b) bei niedrigen Erträgen ggfs. auch den Leserhythmus abschwächen.
                    2. Ertrag Vortag einmalig am Folgetag abfragen
                    3. Ertrag Vormonat einmalig am ersten Tag des Folgemonats abfragen.

                    Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                    Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.13)
                    kernel Linux pve 6.8.12-15-pve
                    6 GByte RAM für den Container
                    Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                    Remote-Access über Wireguard der Fritzbox

                    MartinPM 1 Antwort Letzte Antwort
                    0
                    • MartinPM MartinP

                      Ich habe das Script etwas angepasst - ich habe nur einen Micro-Inverter von FoxEss (Balkonkraftwerk, keine Batterie (deshalb SOC unnötig, und auch keine Lastmessung deshalb Load unnötig)

                      Da der kleine Wechselrichter auch die Erzeugung in kW ausgibt, habe ich das Round angepasst - es kommen dadurch "glatte" Wattwerte (nicht kW) ohne Komma in den Datenpunkt

                      14b37deb-eed3-4e1f-abd2-b94db89a25c7-grafik.png

                      /*
                      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 datas = JSON.parse(res).result[0].datas;
                                  console.log(datas[0]);
                                  setState("0_userdata.0.FoxEss.PVPower", Math.round(datas[0].value * 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);        
                              });
                          });
                          request.write(data);
                          request.end();
                       
                        } catch (e) { console.error(e); }
                      });
                      

                      Meine Planungen für weitere Ergänzungen am Script:

                      1. Tagesbudget an Queries sparsamer einsetzen
                        a) zwischen Dämmerungsende und Dämmerungsbeginn keine Werte über die API abfragen (da kann es keine Erträge geben).
                        b) bei niedrigen Erträgen ggfs. auch den Leserhythmus abschwächen.
                      2. Ertrag Vortag einmalig am Folgetag abfragen
                      3. Ertrag Vormonat einmalig am ersten Tag des Folgemonats abfragen.
                      MartinPM Online
                      MartinPM Online
                      MartinP
                      schrieb am zuletzt editiert von
                      #11

                      Ich habe erste Ergänzungen vorgenommen ...

                      Der kumulierte Tagesertrag ("todayYield") ist hinzugekommen...

                      const data = JSON.stringify({
                              "sn": sn,
                              "variables": [
                                  "pvPower",
                                  "todayYield"
                                   /*, "generationPower", "SoC", "loadsPower" */
                              ]
                          });
                      ....
                                  setState("0_userdata.0.FoxEss.todayYield", Math.round(datas[1].value * 1000), true);
                      

                      Daneben ein kurzes Blockly, was kurz vor Mitternacht den "todayYield" in einen user-Datenpunkt "yesterdayYield" verschiebt...

                      c1039540-2c85-495f-a91d-f5eaecd37dee-grafik.png

                      Wenn man sich die weiteren API-Möglichkeiten so anschauen will, gibt es hier eine Übersicht, was man sich alles aus der Cloud besorgen kann (Abhängig davon, was man sich so alles von denen gekauft hat) ...

                      https://www.foxesscloud.com/public/i18n/en/OpenApiDocument.html

                      Dort diesen Abschnitt suchen

                      Variable table:

                      The table presented below offers a comprehensive overview of the variables that can be accessed through the API. It is important to note that the availability of these variables may differ depending on the specific device being utilized. Therefore, the variables listed in the table are subject to change based on the device in use.

                      Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                      Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.13)
                      kernel Linux pve 6.8.12-15-pve
                      6 GByte RAM für den Container
                      Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                      Remote-Access über Wireguard der Fritzbox

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      394

                      Online

                      32.4k

                      Benutzer

                      81.4k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe