Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JSON parse Warnung beim auslesen vom Fronius Symo Gen24

    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

    JSON parse Warnung beim auslesen vom Fronius Symo Gen24

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      rudiradi last edited by Homoran

      Hallo,

      Ich bitte um Hilfe !
      Ich lese die aktuellen Daten eines Fronius nach der Anleitung in der Doku vom iobroker aus. (Werte sind angepasst an Ip und Daten des GEN24).
      Allerdings erhalte ich Warnmeldungen bei 2 Werten (Siehe Bild unten)
      Die Rohdaten per Browser sehen so aus:
      Ausgabe von : http://192.168.2.xxx/solar_api/v1/GetPowerFlowRealtimeData.fcgi

      {
         "Body" : {
            "Data" : {
               "Inverters" : {
                  "1" : {
                     "DT" : 1,
                     "P" : 0
                  }
               },
               "Site" : {
                  "BatteryStandby" : false,
                  "E_Day" : null,
                  "E_Total" : null,
                  "E_Year" : null,
                  "Meter_Location" : "grid",
                  "Mode" : "meter",
                  "P_Akku" : null,
                  "P_Grid" : 1053.3,
                  "P_Load" : -1053.3,
                  "P_PV" : 0.0,
                  "rel_Autonomy" : 0.0,
                  "rel_SelfConsumption" : null
               },
               "Version" : "12"
            }
         },
         "Head" : {
            "RequestArguments" : {},
            "Status" : {
               "Code" : 0,
               "Reason" : "",
               "UserMessage" : ""
            },
            "Timestamp" : "2021-11-08T16:25:08+00:00"
         }
      }
      
      
      
      Das dazugehörige Script:
      var request = require("request");
      
      var myJson = {};
      
      var pfad = "Fronius_Symo_Hybrid.";
      
      var idP_Akku    = pfad + "P_Akku";
      var idP_Grid    = pfad + "P_Grid";
      var idP_Load    = pfad + "P_Load";
      var idP_PV      = pfad + "P_PV";
      
      
      createState(idP_Akku, 0, {
          name: 'Leistung Akku',
          desc: 'Leistung Akku',
          type: 'number',
          role: 'value',
          unit: 'W'
      });
      
      createState(idP_Grid, 0, {
          name: 'Leistung Netz',
          desc: 'Leistung Netz',
          type: 'number',
          role: 'value',
          unit: 'W'
      });
      
      createState(idP_Load, 0, {
          name: 'Leistung Haus',
          desc: 'Leistung Haus',
          type: 'number',
          role: 'value',
          unit: 'W'
      });
      
      createState(idP_PV, 0, {
          name: 'Leistung PV',
          desc: 'Leistung PV',
          type: 'number',
          role: 'value',
          unit: 'W'
      });
      
      
      
      
      function parseJson(text) {
          var json ;
             if (text === "") return {};
          try {
              json = JSON.parse(text);
          } catch (ex) {
              json = {};
          }
          if(!json) json = {};
          return json;
      }
      
      function readJson(url, callback) {
          request(url, function (err, state, body){
              if (body) {
                  var json = parseJson(body);
                  callback(null, json);
              } else {
                  var error = "(" + err + ") ERROR bei Abfrage von: " + url;
                  log(error, "warn"); 
                  callback(error, null);
              }
          });
      }
      
      
      var url = 'http://192.168.2.211/solar_api/v1/GetPowerFlowRealtimeData.fcgi';
      
      function main() {
          readJson(url, function(err,json) {
              if(!err) {
                  myJson = json;
                  //console.log(myJson.Body.Data.Site.P_Load);            
                  //setState(idP_Akku   ,myJson.Body.Data.Site.P_Akku);
                  setState(idP_Grid   ,myJson.Body.Data.Site.P_Grid);
                  //setState(idP_Load   ,myJson.Body.Data.Site.P_Load);
                  //setState(idP_PV     ,myJson.Body.Data.Site.P_PV);
              } else {
                  log("Fehler beim Auslesen des JSON. Keine Daten erhalten.","warn");
                  myJson = {};
              }
          });
      }
      
      //schedule("*/10 * * * *", function () { // alle 10 Minuten die Werte abfragen
      //    main();
      //});
      
      //alle 10 sec abfragen
      setInterval(main, 10000);
      // Beim Skriptstart die Werte abfragen
      setTimeout(main,500);
      

      MOD-Edit: Code in code-tags gesetzt!

      Bei jedem Auslesen von P_Load und P_PV erhalte ich eine Warnung. Die Werte selbst werden korrekt eingetragen.

      image_2021-11-03_05-48-22.png

      Vielen Dank für Hilfe Gruss Rudi

      paul53 R 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @rudiradi last edited by paul53

        @rudiradi
        JSON und das Skript bitte in Code tags posten, da so nicht lesbar.

        1 Reply Last reply Reply Quote 0
        • R
          rudiradi @rudiradi last edited by

          @rudiradi
          Sorry bin neu hier.
          Das sind die Daten per browser aus dem Fronius ausgelesen:

          {
             "Body" : {
                "Data" : {
                   "Inverters" : {
                      "1" : {
                         "DT" : 1,
                         "P" : 0
                      }
                   },
                   "Site" : {
                      "BatteryStandby" : false,
                      "E_Day" : null,
                      "E_Total" : null,
                      "E_Year" : null,
                      "Meter_Location" : "grid",
                      "Mode" : "meter",
                      "P_Akku" : null,
                      "P_Grid" : 1053.3,
                      "P_Load" : -1053.3,
                      "P_PV" : 0.0,
                      "rel_Autonomy" : 0.0,
                      "rel_SelfConsumption" : null
                   },
                   "Version" : "12"
                }
             },
             "Head" : {
                "RequestArguments" : {},
                "Status" : {
                   "Code" : 0,
                   "Reason" : "",
                   "UserMessage" : ""
                },
                "Timestamp" : "2021-11-08T16:25:08+00:00"
             }
          }
          

          Das ist mein modifizierter Script zum auslesen der JSON Daten:

          var request = require("request");
          
          var myJson = {};
          
          var pfad = "Fronius_Symo_Hybrid.";
          
          var idP_Akku    = pfad + "P_Akku";
          var idP_Grid    = pfad + "P_Grid";
          var idP_Load    = pfad + "P_Load";
          var idP_PV      = pfad + "P_PV";
          
          
          createState(idP_Akku, 0, {
              name: 'Leistung Akku',
              desc: 'Leistung Akku',
              type: 'number',
              role: 'value',
              unit: 'W'
          });
          
          createState(idP_Grid, 0, {
              name: 'Leistung Netz',
              desc: 'Leistung Netz',
              type: 'number',
              role: 'value',
              unit: 'W'
          });
          
          createState(idP_Load, 0, {
              name: 'Leistung Haus',
              desc: 'Leistung Haus',
              type: 'number',
              role: 'value',
              unit: 'W'
          });
          
          createState(idP_PV, 0, {
              name: 'Leistung PV',
              desc: 'Leistung PV',
              type: 'number',
              role: 'value',
              unit: 'W'
          });
          
          
          
          
          function parseJson(text) {
              var json ;
                 if (text === "") return {};
              try {
                  json = JSON.parse(text);
              } catch (ex) {
                  json = {};
              }
              if(!json) json = {};
              return json;
          }
          
          function readJson(url, callback) {
              request(url, function (err, state, body){
                  if (body) {
                      var json = parseJson(body);
                      callback(null, json);
                  } else {
                      var error = "(" + err + ") ERROR bei Abfrage von: " + url;
                      log(error, "warn"); 
                      callback(error, null);
                  }
              });
          }
          
          
          var url = 'http://192.168.2.211/solar_api/v1/GetPowerFlowRealtimeData.fcgi';
          
          function main() {
              readJson(url, function(err,json) {
                  if(!err) {
                      myJson = json;
                      //console.log(myJson.Body.Data.Site.P_Load);            
                      //setState(idP_Akku   ,myJson.Body.Data.Site.P_Akku);
                      setState(idP_Grid   ,myJson.Body.Data.Site.P_Grid);
                      //setState(idP_Load   ,myJson.Body.Data.Site.P_Load);
                      //setState(idP_PV     ,myJson.Body.Data.Site.P_PV);
                  } else {
                      log("Fehler beim Auslesen des JSON. Keine Daten erhalten.","warn");
                      myJson = {};
                  }
              });
          }
          
          //schedule("*/10 * * * *", function () { // alle 10 Minuten die Werte abfragen
          //    main();
          //});
          
          //alle 10 sec abfragen
          setInterval(main, 10000);
          // Beim Skriptstart die Werte abfragen
          setTimeout(main,500);
          
          
          

          P_Load und P_PV sind auskommentiret da dort Warnungen kommen !?
          Gruß Rudi

          paul53 2 Replies Last reply Reply Quote 0
          • paul53
            paul53 @rudiradi last edited by

            @rudiradi sagte: da dort Warnungen kommen !?

            Schau mal in den Tab "Protokolle", um mehr über die Warnungen zu erfahren.

            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @rudiradi last edited by paul53

              @rudiradi sagte: Das ist mein modifizierter Script zum auslesen der JSON Daten:

              Weshalb verschachtelst Du so Funktionen?
              Ich habe mal den Teil ab Zeile 48 vereinfacht:

              const url = 'http://192.168.2.211/solar_api/v1/GetPowerFlowRealtimeData.fcgi';
               
              function main() {
                  request(url, function (err, state, body) {
                      let site = null;
                      if(!err && body) {
                          site = JSON.parse(body).Body.Data.Site;
                      } else {
                          let error = "(" + err + ") ERROR bei Abfrage von: " + url;
                          log(error, "warn"); 
                      }
                      if(site) {
                          //log(site.P_Load);            
                          //setState(idP_Akku   ,site.P_Akku, true);
                          setState(idP_Grid   ,site.P_Grid, true);
                          setState(idP_Load   ,site.P_Load, true);
                          setState(idP_PV     ,site.P_PV, true);
                      }
                  });
              }
               
              schedule("* * * * *", main); // jede Minute die Werte abfragen
               
              // Beim Skriptstart die Werte abfragen
              setTimeout(main,500);
              
              R 2 Replies Last reply Reply Quote 0
              • R
                rudiradi @paul53 last edited by

                @paul53
                Vielen Dank für die schnelle Antwort. Bin ein paar Tage im Urlaub und werde es dann testen und mich melden. Gruß Rudi

                1 Reply Last reply Reply Quote 0
                • R
                  rudiradi @paul53 last edited by

                  @paul53
                  Hallo,
                  Ich habe den vereinfachten script ausprobiert. Liest alle Werte aus mit Warnungen bei den gleichen 2 Werten (s.o.)
                  Geht wirklich einfacher 🙂 Habe den Script selbst hier aus dem Forum:
                  https://forum.iobroker.net/topic/2294/fronius-symo-hybrid-über-javaskript-auslesen-json/6

                  Hier die Protokolle dazu: (damit kann ich nichts anfangen)

                  javascript.0
                  	2021-11-15 19:16:01.483	warn	at processTicksAndRejections (internal/process/task_queues.js:84:21)
                  javascript.0
                  	2021-11-15 19:16:01.483	warn	at endReadableNT (_stream_readable.js:1241:12)
                  javascript.0
                  	2021-11-15 19:16:01.483	warn	at IncomingMessage.EventEmitter.emit (domain.js:483:12)
                  javascript.0
                  	2021-11-15 19:16:01.483	warn	at IncomingMessage.emit (events.js:326:22)
                  javascript.0
                  	2021-11-15 19:16:01.483	warn	at Object.onceWrapper (events.js:420:28)
                  javascript.0
                  	2021-11-15 19:16:01.483	warn	at IncomingMessage.<anonymous> (/opt/iobroker/node_modules/request/request.js:1076:12)
                  javascript.0
                  	2021-11-15 19:16:01.483	warn	at Request.EventEmitter.emit (domain.js:483:12)
                  javascript.0
                  	2021-11-15 19:16:01.483	warn	at Request.emit (events.js:314:20)
                  javascript.0
                  	2021-11-15 19:16:01.483	warn	at Request.<anonymous> (/opt/iobroker/node_modules/request/request.js:1154:10)
                  javascript.0
                  	2021-11-15 19:16:01.483	warn	at Request.EventEmitter.emit (domain.js:483:12)
                  javascript.0
                  	2021-11-15 19:16:01.483	warn	at Request.emit (events.js:314:20)
                  javascript.0
                  	2021-11-15 19:16:01.483	warn	at Request.self.callback (/opt/iobroker/node_modules/request/request.js:185:22)
                  javascript.0
                  	2021-11-15 19:16:01.482	warn	at Request._callback (/opt/iobroker/node_modules/iobroker.javascript/lib/request.js:27:17)
                  javascript.0
                  	2021-11-15 19:16:01.482	warn	at script.js.common.fronius_auslesen_2:64:13
                  javascript.0
                  	2021-11-15 19:16:01.482	warn	at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1439:20)
                  javascript.0
                  	2021-11-15 19:16:01.482	warn	You are assigning a number to the state "javascript.0.Fronius_Symo_Hybrid.P_PV" which expects a Energie total. Please fix your code to use a Energie total or change the state type to number. This warning might become an error in future versions.
                  javascript.0
                  	2021-11-15 19:16:01.482	warn	at processTicksAndRejections (internal/process/task_queues.js:84:21)
                  javascript.0
                  	2021-11-15 19:16:01.482	warn	at endReadableNT (_stream_readable.js:1241:12)
                  javascript.0
                  	2021-11-15 19:16:01.482	warn	at IncomingMessage.EventEmitter.emit (domain.js:483:12)
                  javascript.0
                  	2021-11-15 19:16:01.481	warn	at IncomingMessage.emit (events.js:326:22)
                  javascript.0
                  	2021-11-15 19:16:01.481	warn	at Object.onceWrapper (events.js:420:28)
                  javascript.0
                  	2021-11-15 19:16:01.481	warn	at IncomingMessage.<anonymous> (/opt/iobroker/node_modules/request/request.js:1076:12)
                  javascript.0
                  	2021-11-15 19:16:01.481	warn	at Request.EventEmitter.emit (domain.js:483:12)
                  javascript.0
                  	2021-11-15 19:16:01.481	warn	at Request.emit (events.js:314:20)
                  javascript.0
                  	2021-11-15 19:16:01.481	warn	at Request.<anonymous> (/opt/iobroker/node_modules/request/request.js:1154:10)
                  javascript.0
                  	2021-11-15 19:16:01.481	warn	at Request.EventEmitter.emit (domain.js:483:12)
                  javascript.0
                  	2021-11-15 19:16:01.481	warn	at Request.emit (events.js:314:20)
                  javascript.0
                  	2021-11-15 19:16:01.481	warn	at Request.self.callback (/opt/iobroker/node_modules/request/request.js:185:22)
                  javascript.0
                  	2021-11-15 19:16:01.481	warn	at Request._callback (/opt/iobroker/node_modules/iobroker.javascript/lib/request.js:27:17)
                  javascript.0
                  	2021-11-15 19:16:01.481	warn	at script.js.common.fronius_auslesen_2:63:13
                  javascript.0
                  	2021-11-15 19:16:01.481	warn	at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1439:20)
                  javascript.0
                  	2021-11-15 19:16:01.480	warn	You are assigning a number to the state "javascript.0.Fronius_Symo_Hybrid.P_Load" which expects a Energie Jahr. Please fix your code to use a Energie Jahr or change the state type to number. This warning might become an error in future versions.
                  

                  Vielen Dank für Hilfe Gruß Rudi

                  paul53 Homoran 2 Replies Last reply Reply Quote 0
                  • paul53
                    paul53 @rudiradi last edited by paul53

                    @rudiradi sagte::

                    warn	You are assigning a number to the state "javascript.0.Fronius_Symo_Hybrid.P_Load" which expects a Energie Jahr.
                    

                    common.type = "Energie Jahr" ist ungültig!

                    R 1 Reply Last reply Reply Quote 1
                    • Homoran
                      Homoran Global Moderator Administrators @rudiradi last edited by

                      @rudiradi sagte in JSON parse Warnung beim auslesen vom Fronius Symo Gen24:

                      damit kann ich nichts anfangen

                      da steht

                      @rudiradi sagte in JSON parse Warnung beim auslesen vom Fronius Symo Gen24:

                      You are assigning a number to the state "javascript.0.Fronius_Symo_Hybrid.P_Load" which expects a Energie Jahr

                      was ist das denn für ein Typ?

                      1 Reply Last reply Reply Quote 0
                      • R
                        rudiradi @paul53 last edited by

                        @paul53
                        Daqnke,Danke das wars!

                        Der Fehler lag in meinen Objekten:
                        Zeile 5 und 12

                        {
                          "common": {
                            "name": "Leistung Haus",
                            "desc": "Leistung Haus",
                            "type": "number",
                            "role": "value",
                            "unit": "W"
                          },
                          "native": {
                            "name": "Leistung Haus",
                            "desc": "Leistung Haus",
                            "type": "number",
                            "role": "value",
                            "unit": "W"
                          },
                          "type": "state",
                          "_id": "javascript.0.Fronius_Symo_Hybrid.P_Load",
                          "acl": {
                            "object": 1636,
                            "state": 1636,
                            "owner": "system.user.admin",
                            "ownerGroup": "system.group.administrator"
                          },
                          "from": "system.adapter.admin.0",
                          "user": "system.user.admin",
                          "ts": 1637005033310
                        }
                        
                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        481
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        javascript
                        3
                        10
                        464
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo