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

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Fronius Symo Hybrid über Javaskript auslesen (Json)

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.3k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.6k

Fronius Symo Hybrid über Javaskript auslesen (Json)

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
13 Beiträge 7 Kommentatoren 7.0k Aufrufe
  • Ä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.
  • S Offline
    S Offline
    SolarElch
    schrieb am zuletzt editiert von
    #1

    Guten Abend,

    zu Ostern habe ich mein scheitern zum Thema Modbus hier im Forum dokumentiert.

    Der WechselRichter hat mit dem SW-Versionsstand eine Macke an der Ecke (lt. Support).

    Anschließend habe ich mehrere Wege verfolgt, jetzt bin ich der Meinung das die Übung mit JavaSkript erledigt werden könnte?

    über folgende URL:

    10.0.0.6/solar_api/v1/GetInverterRealtimeData.cgi?Scope=System

    bekomme ich folgende vier Werte zurück, kann mir der IOBroker diese auslesen, anzeigen und wegspeichern?

    {
    	"Head" : {
    		"RequestArguments" : {
    			"DataCollection" : "",
    			"Scope" : "System"
    		},
    		"Status" : {
    			"Code" : 0,
    			"Reason" : "",
    			"UserMessage" : ""
    		},
    		"Timestamp" : "2016-04-06T19:56:37+02:00"
    	},
    	"Body" : {
    		"Data" : {
    			"PAC" : {
    				"Unit" : "W",
    				"Values" : {
    					"1" : 0
    				}
    			},
    			"DAY_ENERGY" : {
    				"Unit" : "Wh",
    				"Values" : {
    					"1" : 23834
    				}
    			},
    			"YEAR_ENERGY" : {
    				"Unit" : "Wh",
    				"Values" : {
    					"1" : 390751
    				}
    			},
    			"TOTAL_ENERGY" : {
    				"Unit" : "Wh",
    				"Values" : {
    					"1" : 391336
    				}
    			}
    		}
    	}
    }
    
    

    kann mir BITTE jemand helfen!!!

    Danke für Eure Unterstützung!

    lg SolarElch

    1 Antwort Letzte Antwort
    0
    • ruhr70R Offline
      ruhr70R Offline
      ruhr70
      schrieb am zuletzt editiert von
      #2

      @SolarElch:

      bekomme ich folgende vier Werte zurück, kann mir der IOBroker diese auslesen, anzeigen und wegspeichern? `

      probier mal:

      
      var request = require("request");
      
      var myJson;
      
      var pfad = "Fronius_Symo_Hybrid.";
      
      var idDAY_ENERGY        = pfad + "ENERGY_DAY";
      var idPAC               = pfad + "PAC";
      var idYEAR_ENERGY       = pfad + "ENERGY_YEAR";
      var idTOTAL_ENERGY      = pfad + "ENERGY_TOTAL";
      
      createState(idDAY_ENERGY, 0, {
          name: 'Energie Tag',
          desc: 'Energie Tag',
          type: 'number',
          role: 'value',
          unit: 'Wh'
      });
      
      createState(idPAC, 0, {
          name: 'Leistung',
          desc: 'Leistung',
          type: 'number',
          role: 'value',
          unit: 'W'
      });
      
      createState(idYEAR_ENERGY, 0, {
          name: 'Energie Jahr',
          desc: 'Leistung',
          type: 'Energie Jahr',
          role: 'value',
          unit: 'Wh'
      });
      
      createState(idTOTAL_ENERGY, 0, {
          name: 'Energie Total',
          desc: 'Leistung',
          type: 'Energie total',
          role: 'value',
          unit: 'Wh'
      });
      
      function parseJson(text) {
          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://10.0.0.6/solar_api/v1/GetInverterRealtimeData.cgi?Scope=System';
      
      readJson(url, function(err,json) {
          if(!err) {
              myJson = json;
              //log(myJson.LocationList.StopLocation[0].name);
              log("DAY_ENERGY: "      + myJSON.Body.Data.DAY_ENERGY.Values[1],"info");
              log("PAC: "             + myJSON.Body.Data.PAC.Values[1],"info");
              log("YEAR_ENERGY: "     + myJSON.Body.Data.YEAR_ENERGY.Values[1],"info");
              log("TOTAL_ENERGY: "    + myJSON.Body.Data.TOTAL_ENERGY.Values[1],"info");
              setState(idDAY_ENERGY   ,myJSON.Body.Data.DAY_ENERGY.Values[1]);
              setState(idPAC          ,myJSON.Body.Data.PAC.Values[1]);
              setState(idYEAR_ENERGY  ,myJSON.Body.Data.YEAR_ENERGY.Values[1]);
              setState(idTOTAL_ENERGY ,myJSON.Body.Data.TOTAL_ENERGY.Values[1]);
          } else {
              log("Fehler beim Auslesen des JSON. Keine Daten erhalten.","warn");
              myJson = {};
          }
      });
      
      

      Adapter: Fritzbox, Unify Circuit
      Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

      1 Antwort Letzte Antwort
      1
      • S Offline
        S Offline
        SolarElch
        schrieb am zuletzt editiert von
        #3

        Guten Abend ruhr70!

        so nah war ich meinem Ziel noch nicht!!!!

        es ist zum greifen nahe…

        dachte schon ich muss auf eine andere Plattform ausweichen...!!!

        JS ist so etwas von nicht meine Welt... DANKE, DANKE, DANKE!!!!

        anbei der der Auszug aus dem Log:

        ReferenceError: myJSON is not defined at script.js.Fronius.HausStrom.Skript1:79:35 at Request._callback (script.js.Fronius.HausStrom.Skript1:63:13) at Request.self.callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:199:22) at Request.EventEmitter.emit (events.js:98:17) at Request. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1036:10) at Request.EventEmitter.emit (events.js:117:20) at IncomingMessage. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:963:12) at IncomingMessage.EventEmitter.emit (events.js:117:20) at _stream_readable.js:920:16 at process._tickCallback (node.js:415:13)

        sehe die Werte schon im VIS...

        das ist alles sooooo spannend...

        lg SolarElch

        1 Antwort Letzte Antwort
        0
        • ruhr70R Offline
          ruhr70R Offline
          ruhr70
          schrieb am zuletzt editiert von
          #4

          @SolarElch:

          sehe die Werte schon im VIS… `

          Du dürftest aber nur die nackten Datenpunkte ohne Inhalt gesehen haben oder?

          Ich hatte da leider einenTippfehler (myJSON statt myJson) drin. Danke fürs log.

          Neue Version. Fragt nun zum Anfang die Werte einmal ab und dann alle 10 Minuten.

          var request = require("request");
          
          var myJson = {};
          
          var pfad = "Fronius_Symo_Hybrid.";
          
          var idDAY_ENERGY        = pfad + "ENERGY_DAY";
          var idPAC               = pfad + "PAC";
          var idYEAR_ENERGY       = pfad + "ENERGY_YEAR";
          var idTOTAL_ENERGY      = pfad + "ENERGY_TOTAL";
          
          createState(idDAY_ENERGY, 0, {
              name: 'Energie Tag',
              desc: 'Energie Tag',
              type: 'number',
              role: 'value',
              unit: 'Wh'
          });
          
          createState(idPAC, 0, {
              name: 'Leistung',
              desc: 'Leistung',
              type: 'number',
              role: 'value',
              unit: 'W'
          });
          
          createState(idYEAR_ENERGY, 0, {
              name: 'Energie Jahr',
              desc: 'Leistung',
              type: 'Energie Jahr',
              role: 'value',
              unit: 'Wh'
          });
          
          createState(idTOTAL_ENERGY, 0, {
              name: 'Energie Total',
              desc: 'Leistung',
              type: 'Energie total',
              role: 'value',
              unit: 'Wh'
          });
          
          function parseJson(text) {
              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://10.0.0.6/solar_api/v1/GetInverterRealtimeData.cgi?Scope=System';
          
          function main() {
              readJson(url, function(err,json) {
                  if(!err) {
                      myJson = json;
                      log("DAY_ENERGY: "      + myJson.Body.Data.DAY_ENERGY.Values[1],"info");
                      log("PAC: "             + myJson.Body.Data.PAC.Values[1],"info");
                      log("YEAR_ENERGY: "     + myJson.Body.Data.YEAR_ENERGY.Values[1],"info");
                      log("TOTAL_ENERGY: "    + myJson.Body.Data.TOTAL_ENERGY.Values[1],"info");
                      setState(idDAY_ENERGY   ,myJson.Body.Data.DAY_ENERGY.Values[1]);
                      setState(idPAC          ,myJson.Body.Data.PAC.Values[1]);
                      setState(idYEAR_ENERGY  ,myJson.Body.Data.YEAR_ENERGY.Values[1]);
                      setState(idTOTAL_ENERGY ,myJson.Body.Data.TOTAL_ENERGY.Values[1]);
                  } else {
                      log("Fehler beim Auslesen des JSON. Keine Daten erhalten.","warn");
                      myJson = {};
                  }
              });
          }
          
          schedule("*/10 * * * *", function () { // alle 10 Minuten die Werte abfragen
              main();
          });
          
          // Beim Skriptstart die Werte abfragen
          setTimeout(main,500);
          
          

          Adapter: Fritzbox, Unify Circuit
          Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

          1 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            SolarElch
            schrieb am zuletzt editiert von
            #5

            Servus ruhr70,

            konnte es heute gar nicht mehr abwarten von der firma nach hause zu kommen.

            ES FUNKTIONIERT!!!!

            jetzt noch ein diagramm (wegen der optik ;) und die daten in eine sql db hinein (das werde ich über ein shell skript erledigen :)

            kopiere mir dss skript dann noch einmal damit ich auch das smart meter auslesen kann….

            7" display mit rahmen für den raspi ist schon bestellt, darstellung der werte für die frau ;)

            ps.: ist das ok für dich wenn ich diesen beitrag im pv forum verlinke, das werden sicher einige pv anlagen betreiber mit kuss verwenden.

            du hast schon jetzt 186 views... das skript wird sicher der hit!!!!

            Danke die noch einmal!!!!

            lg SolarElch

            1 Antwort Letzte Antwort
            0
            • S Offline
              S Offline
              SolarElch
              schrieb am zuletzt editiert von
              #6

              Guten Abend ruhr70,

              könne nochmal deine Unterstützung brauchen wenn du so nett bist…. :)

              habe dein Skript wie folgt umgebaut:

              var request = require("request");
              
              var myJson = {};
              
              var pfad = "Fronius_SmartMeter";
              
              var idEnergyReal_WAC_Sum_Produced      = pfad + "EnergyReal_WAC_Sum_Produced";
              var idEnergyReal_WAC_Sum_Consumed      = pfad + "EnergyReal_WAC_Sum_Consumed";
              var idEnergyReal_WAC_Plus_Absolute     = pfad + "EnergyReal_WAC_Plus_Absolute";
              var idEnergyReal_WAC_Minus_Absolute    = pfad + "EnergyReal_WAC_Minus_Absolute";
              
              createState(idEnergyReal_WAC_Sum_Produced, 0, {
                  name: 'Sum Produced',
                  desc: 'Sum Produced',
                  type: 'number',
                  role: 'value',
                  unit: 'Wh'
              });
              
              createState(idEnergyReal_WAC_Sum_Consumed, 0, {
                  name: 'Sum Consumed',
                  desc: 'Sum Consumed',
                  type: 'number',
                  role: 'value',
                  unit: 'Wh'
              });
              
              createState(idEnergyReal_WAC_Plus_Absolute, 0, {
                  name: 'WAC Plus',
                  desc: 'WAC Plus',
                  type: 'number',
                  role: 'value',
                  unit: 'Wh'
              });
              
              createState(idEnergyReal_WAC_Minus_Absolute, 0, {
                  name: 'WAC Minus',
                  desc: 'WAC Minus',
                  type: 'number',
                  role: 'value',
                  unit: 'Wh'
              });
              
              function parseJson(text) {
                  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://10.0.0.6/solar_api/v1/GetMeterRealtimeData.cgi?Scope=Device&DeviceId=0';
              
              function main() {
                  readJson(url, function(err,json) {
                      if(!err) {
                          myJson = json;
                          log("EnergyReal_WAC_Sum_Produced: "      + myJson.Body.Data.EnergyReal_WAC_Sum_Produced.Values[1],"info");
                          log("EnergyReal_WAC_Sum_Consumed: "      + myJson.Body.Data.EnergyReal_WAC_Sum_Consumed.Values[1],"info");
                          log("EnergyReal_WAC_Plus_Absolute: "     + myJson.Body.Data.EnergyReal_WAC_Plus_Absolute.Values[1],"info");
                          log("EnergyReal_WAC_Minus_Absolute: "    + myJson.Body.Data.EnergyReal_WAC_Minus_Absolute.Values[1],"info");
                          setState(idEnergyReal_WAC_Sum_Produced   ,myJson.Body.Data.EnergyReal_WAC_Sum_Produced.Values[1]);
                          setState(idEnergyReal_WAC_Sum_Consumed   ,myJson.Body.Data.EnergyReal_WAC_Sum_Consumed.Values[1]);
                          setState(idEnergyReal_WAC_Plus_Absolute  ,myJson.Body.Data.EnergyReal_WAC_Plus_Absolute.Values[1]);
                          setState(idEnergyReal_WAC_Minus_Absolute ,myJson.Body.Data.EnergyReal_WAC_Minus_Absolute.Values[1]);
                      } else {
                          log("Fehler beim Auslesen des JSON. Keine Daten erhalten.","warn");
                          myJson = {};
                      }
                  });
              }
              
              schedule("*/15 * * * *", function () { // alle 15 Minuten die Werte abfragen
                  main();
              });
              
              // Beim Skriptstart die Werte abfragen
              setTimeout(main,500);
              
              damit ich dann diesen String auslesen kann:
              
              {
              	"Head" : {
              		"RequestArguments" : {
              			"DeviceClass" : "Meter",
              			"DeviceId" : "0",
              			"Scope" : "Device"
              		},
              		"Status" : {
              			"Code" : 0,
              			"Reason" : "",
              			"UserMessage" : ""
              		},
              		"Timestamp" : "2016-04-14T22:20:20+02:00"
              	},
              	"Body" : {
              		"Data" : {
              			"Details" : {
              				"Serial" : "15520147",
              				"Model" : "Fronius SmartMeter",
              				"Manufacturer" : "Fronius"
              			},
              			"TimeStamp" : 1460665219,
              			"Enable" : 1,
              			"Visible" : 1,
              			"PowerReal_P_Sum" : 7345.59,
              			"Meter_Location_Current" : 0,
              			"PowerReal_P_Phase_1" : 3272.18,
              			"PowerReal_P_Phase_2" : 2110.06,
              			"PowerReal_P_Phase_3" : 1963.35,
              			"PowerReactive_Q_Sum" : -96.62,
              			"PowerReactive_Q_Phase_1" : -71.61,
              			"PowerReactive_Q_Phase_2" : 38.35,
              			"PowerReactive_Q_Phase_3" : -63.36,
              			"Current_AC_Phase_1" : 14.174,
              			"Current_AC_Phase_2" : 9.031,
              			"Current_AC_Phase_3" : 8.433,
              			"Voltage_AC_Phase_1" : 231.2,
              			"Voltage_AC_Phase_2" : 233.8,
              			"Voltage_AC_Phase_3" : 233,
              			"Voltage_AC_PhaseToPhase_12" : 402.7,
              			"Voltage_AC_PhaseToPhase_23" : 404.3,
              			"Voltage_AC_PhaseToPhase_31" : 402,
              			"Frequency_Phase_Average" : 50,
              			"PowerApparent_S_Sum" : 7346,
              			"PowerFactor_Sum" : 0.99,
              			"PowerFactor_Phase_1" : 0.99,
              			"PowerFactor_Phase_2" : 1,
              			"PowerFactor_Phase_3" : 0.99,
              			"EnergyReal_WAC_Sum_Produced" : 345066,
              			"EnergyReal_WAC_Sum_Consumed" : 1113042,
              			"EnergyReactive_VArAC_Sum_Produced" : 769590,
              			"EnergyReactive_VArAC_Sum_Consumed" : 603290,
              			"EnergyReal_WAC_Plus_Absolute" : 1113042,
              			"EnergyReal_WAC_Minus_Absolute" : 345066
              		}
              	}
              }
              
              im Log steht dann aber:
              
              22:27:40.471	[info]	javascript.0 Start javascript script.js.Fronius.HausStrom.Fronius_SmartMeter
              22:27:40.472	[info]	javascript.0 script.js.Fronius.HausStrom.Fronius_SmartMeter: registered 0 subscriptions and 1 schedule
              22:27:41.597	[error]	TypeError: Cannot read property '1' of undefined at script.js.Fronius.HausStrom.Fronius_SmartMeter:75:107 at Request._callback (script.js.Fronius.HausStrom.Fronius_SmartMeter:59:13) at Request.self.callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:199:22) at Request.EventEmitter.emit (events.js:98:17) at Request. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1036:10) at Request.EventEmitter.emit (events.js:117:20) at IncomingMessage. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:963:12) at IncomingMessage.EventEmitter.emit (events.js:117:20) at _stream_readable.js:920:16 at process._tickCallback (node.js:415:13)
              
              

              Danke!!! dir SolarElch

              1 Antwort Letzte Antwort
              0
              • ruhr70R Offline
                ruhr70R Offline
                ruhr70
                schrieb am zuletzt editiert von
                #7

                @SolarElch:

                            log("EnergyReal_WAC_Sum_Produced: "      + myJson.Body.Data.EnergyReal_WAC_Sum_Produced.Values[1],"info");
                            log("EnergyReal_WAC_Sum_Consumed: "      + myJson.Body.Data.EnergyReal_WAC_Sum_Consumed.Values[1],"info");
                            log("EnergyReal_WAC_Plus_Absolute: "     + myJson.Body.Data.EnergyReal_WAC_Plus_Absolute.Values[1],"info");
                            log("EnergyReal_WAC_Minus_Absolute: "    + myJson.Body.Data.EnergyReal_WAC_Minus_Absolute.Values[1],"info");
                setState(idEnergyReal_WAC_Sum_Produced ,myJson.Body.Data.EnergyReal_WAC_Sum_Produced.Values[1]);
                setState(idEnergyReal_WAC_Sum_Consumed ,myJson.Body.Data.EnergyReal_WAC_Sum_Consumed.Values[1]);
                setState(idEnergyReal_WAC_Plus_Absolute ,myJson.Body.Data.EnergyReal_WAC_Plus_Absolute.Values[1]);
                setState(idEnergyReal_WAC_Minus_Absolute ,myJson.Body.Data.EnergyReal_WAC_Minus_Absolute.Values[1]);
                
                ```` `  
                

                Nach dem Aufbau Deines JSON ist das .Values[1] am Ende zu viel. Das kommt im JSON nicht vor.

                Probier mal so:

                log("EnergyReal_WAC_Sum_Produced: " + myJson.Body.Data.EnergyReal_WAC_Sum_Produced,"info");
                log("EnergyReal_WAC_Sum_Consumed: " + myJson.Body.Data.EnergyReal_WAC_Sum_Consumed,"info");
                log("EnergyReal_WAC_Plus_Absolute: " + myJson.Body.Data.EnergyReal_WAC_Plus_Absolute,"info");
                log("EnergyReal_WAC_Minus_Absolute: " + myJson.Body.Data.EnergyReal_WAC_Minus_Absolute,"info");
                setState(idEnergyReal_WAC_Sum_Produced ,myJson.Body.Data.EnergyReal_WAC_Sum_Produced);
                setState(idEnergyReal_WAC_Sum_Consumed ,myJson.Body.Data.EnergyReal_WAC_Sum_Consumed);
                setState(idEnergyReal_WAC_Plus_Absolute ,myJson.Body.Data.EnergyReal_WAC_Plus_Absolute);
                setState(idEnergyReal_WAC_Minus_Absolute ,myJson.Body.Data.EnergyReal_WAC_Minus_Absolute);
                
                

                Adapter: Fritzbox, Unify Circuit
                Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                1 Antwort Letzte Antwort
                0
                • E Offline
                  E Offline
                  eastcoast
                  schrieb am zuletzt editiert von
                  #8

                  Hallo,

                  ich habe das Script modifiziert und erweitert.

                  Dies liest nun alle 5 Minuten die wichtigsten Daten von einem Fronius Symo mit Smart Meter.

                  Bei Verwendung einfach nur die IP Adresse anpassen.

                  Hier der Code:

                  ! var urlInverter = 'http://192.168.1.123/solar_api/v1/GetInverterRealtimeData.cgi?Scope=System'; var urlMeter = 'http://192.168.1.123/solar_api/v1/GetMeterRealtimeData.cgi?Scope=System'; ! var path = "froniusSymo."; var pathInverter = "inverter."; var pathMeter = "meter."; ! var idInverterCode = path + pathInverter + "Code"; var idPAC = path + pathInverter + "PAC"; var idDAY_ENERGY = path + pathInverter + "DAY_ENERGY"; var idYEAR_ENERGY = path + pathInverter + "YEAR_ENERGY"; var idTOTAL_ENERGY = path + pathInverter + "TOTAL_ENERGY"; var idMeterCode = path + pathMeter + "Code"; var idPowerRealPsum = path + pathMeter + "PowerReal_P_Sum"; var idPowerRealPphase1 = path + pathMeter + "PowerReal_P_Phase_1"; var idPowerRealPphase2 = path + pathMeter + "PowerReal_P_Phase_2"; var idPowerRealPphase3 = path + pathMeter + "PowerReal_P_Phase_3"; var idCurrentAcPhase1 = path + pathMeter + "Current_AC_Phase_1"; var idCurrentAcPhase2 = path + pathMeter + "Current_AC_Phase_2"; var idCurrentAcPhase3 = path + pathMeter + "Current_AC_Phase_3"; var idVoltageAcPhase1 = path + pathMeter + "Voltage_AC_Phase_1"; var idVoltageAcPhase2 = path + pathMeter + "Voltage_AC_Phase_2"; var idVoltageAcPhase3 = path + pathMeter + "Voltage_AC_Phase_3"; var idEnergyRealWacSumProd = path + pathMeter + "EnergyReal_WAC_Sum_Produced"; var idEnergyRealWacSumCons = path + pathMeter + "EnergyReal_WAC_Sum_Consumed"; ! createState(idInverterCode, 0, { name: 'Inverter request status code', desc: 'Indicates if the request went OK or gives a hint about what went wrong', type: 'number', role: 'value' }); ! createState(idPAC, 0, { name: 'Inverter AC power', desc: 'Actual AC power', type: 'number', role: 'value', unit: 'W' }); ! createState(idDAY_ENERGY, 0, { name: 'Inverter day energy', desc: 'Energy generated on current day', type: 'number', role: 'value', unit: 'Wh' }); ! createState(idYEAR_ENERGY, 0, { name: 'Inverter year energy', desc: 'Energy generated in current year', type: 'number', role: 'value', unit: 'Wh' }); ! createState(idTOTAL_ENERGY, 0, { name: 'Inverter overall energy', desc: 'Energy generated overall', type: 'number', role: 'value', unit: 'Wh' }); ! createState(idMeterCode, 0, { name: 'Meter request status code', desc: 'Indicates if the request went OK or gives a hint about what went wrong', type: 'number', role: 'value' }); ! createState(idPowerRealPsum, 0, { name: 'Meter consumption', desc: 'Actual consumption of power', type: 'number', role: 'value', unit: 'W' }); ! createState(idPowerRealPphase1, 0, { name: 'Meter consumption on phase 1', desc: 'Actual consumption of power on phase 1', type: 'number', role: 'value', unit: 'W' }); ! createState(idPowerRealPphase2, 0, { name: 'Meter consumption on phase 2', desc: 'Actual consumption of power on phase 2', type: 'number', role: 'value', unit: 'W' }); ! createState(idPowerRealPphase3, 0, { name: 'Meter consumption on phase 3', desc: 'Actual consumption of power on phase 3', type: 'number', role: 'value', unit: 'W' }); ! createState(idCurrentAcPhase1, 0, { name: 'Meter current on phase 1', desc: 'Actual AC current on phase 1', type: 'number', role: 'value', unit: 'A' }); ! createState(idCurrentAcPhase2, 0, { name: 'Meter current on phase 2', desc: 'Actual AC current on phase 2', type: 'number', role: 'value', unit: 'A' }); createState(idCurrentAcPhase3, 0, { name: 'Meter current on phase 3', desc: 'Actual AC current on phase 3', type: 'number', role: 'value', unit: 'A' }); ! createState(idVoltageAcPhase1, 0, { name: 'Meter voltage on phase 1', desc: 'Actual AC voltage on phase 1', type: 'number', role: 'value', unit: 'V' }); ! createState(idVoltageAcPhase2, 0, { name: 'Meter voltage on phase 2', desc: 'Actual AC voltage on phase 2', type: 'number', role: 'value', unit: 'V' }); createState(idVoltageAcPhase3, 0, { name: 'Meter voltage on phase 3', desc: 'Actual AC voltage on phase 3', type: 'number', role: 'value', unit: 'V' }); ! createState(idEnergyRealWacSumProd, 0, { name: 'Meter sum of energy produced', desc: 'Sum of real energy produced', type: 'number', role: 'value', unit: 'Wh' }); ! createState(idEnergyRealWacSumCons, 0, { name: 'Meter sum of energy consumed', desc: 'Sum of real energy consumed', type: 'number', role: 'value', unit: 'Wh' }); ! var request = require("request"); var myJson = {}; ! function parseJson(text) { 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 request from: " + url; log(error, "warn"); callback(error, null); } }); } ! function main() { readJson(urlInverter, function(err,json) { if(!err) { myJson = json; log("Code: " + myJson.Head.Status.Code,"info"); log("PAC: " + myJson.Body.Data.PAC.Values[1],"info"); log("DAY_ENERGY: " + myJson.Body.Data.DAY_ENERGY.Values[1],"info"); log("YEAR_ENERGY: " + myJson.Body.Data.YEAR_ENERGY.Values[1],"info"); log("TOTAL_ENERGY: " + myJson.Body.Data.TOTAL_ENERGY.Values[1],"info"); setState(idInverterCode ,parseInt(myJson.Head.Status.Code)); setState(idPAC ,parseInt(myJson.Body.Data.PAC.Values[1])); setState(idDAY_ENERGY ,parseInt(myJson.Body.Data.DAY_ENERGY.Values[1])); setState(idYEAR_ENERGY ,parseInt(myJson.Body.Data.YEAR_ENERGY.Values[1])); setState(idTOTAL_ENERGY ,parseInt(myJson.Body.Data.TOTAL_ENERGY.Values[1])); } else { log("Error reading JSON from Fronius inverter. No data!","warn"); myJson = {}; } }); readJson(urlMeter, function(err,json) { if(!err) { myJson = json; log("Code: " + myJson.Head.Status.Code,"info"); log("PowerReal_P_Sum: " + myJson.Body.Data[0].PowerReal_P_Sum,"info"); log("PowerReal_P_Phase_1: " + myJson.Body.Data[0].PowerReal_P_Phase_1,"info"); log("PowerReal_P_Phase_2: " + myJson.Body.Data[0].PowerReal_P_Phase_2,"info"); log("PowerReal_P_Phase_3: " + myJson.Body.Data[0].PowerReal_P_Phase_3,"info"); log("Current_AC_Phase_1: " + myJson.Body.Data[0].Current_AC_Phase_1,"info"); log("Current_AC_Phase_2: " + myJson.Body.Data[0].Current_AC_Phase_2,"info"); log("Current_AC_Phase_3: " + myJson.Body.Data[0].Current_AC_Phase_3,"info"); log("Voltage_AC_Phase_1: " + myJson.Body.Data[0].Voltage_AC_Phase_1,"info"); log("Voltage_AC_Phase_2: " + myJson.Body.Data[0].Voltage_AC_Phase_2,"info"); log("Voltage_AC_Phase_3: " + myJson.Body.Data[0].Voltage_AC_Phase_3,"info"); log("EnergyReal_WAC_Sum_Produced: " + myJson.Body.Data[0].EnergyReal_WAC_Sum_Produced,"info"); log("EnergyReal_WAC_Sum_Consumed: " + myJson.Body.Data[0].EnergyReal_WAC_Sum_Consumed,"info"); setState(idMeterCode ,parseInt(myJson.Head.Status.Code)); setState(idPowerRealPsum ,parseInt(myJson.Body.Data[0].PowerReal_P_Sum)); setState(idPowerRealPphase1 ,parseInt(myJson.Body.Data[0].PowerReal_P_Phase_1)); setState(idPowerRealPphase2 ,parseInt(myJson.Body.Data[0].PowerReal_P_Phase_2)); setState(idPowerRealPphase3 ,parseInt(myJson.Body.Data[0].PowerReal_P_Phase_3)); setState(idCurrentAcPhase1 ,parseInt(myJson.Body.Data[0].Current_AC_Phase_1)); setState(idCurrentAcPhase2 ,parseInt(myJson.Body.Data[0].Current_AC_Phase_2)); setState(idCurrentAcPhase3 ,parseInt(myJson.Body.Data[0].Current_AC_Phase_3)); setState(idVoltageAcPhase1 ,parseInt(myJson.Body.Data[0].Voltage_AC_Phase_1)); setState(idVoltageAcPhase2 ,parseInt(myJson.Body.Data[0].Voltage_AC_Phase_2)); setState(idVoltageAcPhase3 ,parseInt(myJson.Body.Data[0].Voltage_AC_Phase_3)); setState(idEnergyRealWacSumProd ,parseInt(myJson.Body.Data[0].EnergyReal_WAC_Sum_Produced)); setState(idEnergyRealWacSumCons ,parseInt(myJson.Body.Data[0].EnergyReal_WAC_Sum_Consumed)); } else { log("Error reading JSON from Fronius Smart Meter. No data!","warn"); myJson = {}; } }); } ! schedule("*/5 * * * *", function () { // poll every 5 minutes main(); }); ! // poll values at startup setTimeout(main,500); !

                  1 Antwort Letzte Antwort
                  0
                  • painkillerdeP Offline
                    painkillerdeP Offline
                    painkillerde
                    schrieb am zuletzt editiert von
                    #9

                    @eastcoast:

                    Hallo,

                    ich habe das Script modifiziert und erweitert.

                    Dies liest nun alle 5 Minuten die wichtigsten Daten von einem Fronius Symo mit Smart Meter.

                    Bei Verwendung einfach nur die IP Adresse anpassen.

                    Hier der Code:

                    ! var urlInverter = 'http://192.168.1.123/solar_api/v1/GetInverterRealtimeData.cgi?Scope=System'; var urlMeter = 'http://192.168.1.123/solar_api/v1/GetMeterRealtimeData.cgi?Scope=System'; ! var path = "froniusSymo."; var pathInverter = "inverter."; var pathMeter = "meter."; ! var idInverterCode = path + pathInverter + "Code"; var idPAC = path + pathInverter + "PAC"; var idDAY_ENERGY = path + pathInverter + "DAY_ENERGY"; var idYEAR_ENERGY = path + pathInverter + "YEAR_ENERGY"; var idTOTAL_ENERGY = path + pathInverter + "TOTAL_ENERGY"; var idMeterCode = path + pathMeter + "Code"; var idPowerRealPsum = path + pathMeter + "PowerReal_P_Sum"; var idPowerRealPphase1 = path + pathMeter + "PowerReal_P_Phase_1"; var idPowerRealPphase2 = path + pathMeter + "PowerReal_P_Phase_2"; var idPowerRealPphase3 = path + pathMeter + "PowerReal_P_Phase_3"; var idCurrentAcPhase1 = path + pathMeter + "Current_AC_Phase_1"; var idCurrentAcPhase2 = path + pathMeter + "Current_AC_Phase_2"; var idCurrentAcPhase3 = path + pathMeter + "Current_AC_Phase_3"; var idVoltageAcPhase1 = path + pathMeter + "Voltage_AC_Phase_1"; var idVoltageAcPhase2 = path + pathMeter + "Voltage_AC_Phase_2"; var idVoltageAcPhase3 = path + pathMeter + "Voltage_AC_Phase_3"; var idEnergyRealWacSumProd = path + pathMeter + "EnergyReal_WAC_Sum_Produced"; var idEnergyRealWacSumCons = path + pathMeter + "EnergyReal_WAC_Sum_Consumed"; ! createState(idInverterCode, 0, { name: 'Inverter request status code', desc: 'Indicates if the request went OK or gives a hint about what went wrong', type: 'number', role: 'value' }); ! createState(idPAC, 0, { name: 'Inverter AC power', desc: 'Actual AC power', type: 'number', role: 'value', unit: 'W' }); ! createState(idDAY_ENERGY, 0, { name: 'Inverter day energy', desc: 'Energy generated on current day', type: 'number', role: 'value', unit: 'Wh' }); ! createState(idYEAR_ENERGY, 0, { name: 'Inverter year energy', desc: 'Energy generated in current year', type: 'number', role: 'value', unit: 'Wh' }); ! createState(idTOTAL_ENERGY, 0, { name: 'Inverter overall energy', desc: 'Energy generated overall', type: 'number', role: 'value', unit: 'Wh' }); ! createState(idMeterCode, 0, { name: 'Meter request status code', desc: 'Indicates if the request went OK or gives a hint about what went wrong', type: 'number', role: 'value' }); ! createState(idPowerRealPsum, 0, { name: 'Meter consumption', desc: 'Actual consumption of power', type: 'number', role: 'value', unit: 'W' }); ! createState(idPowerRealPphase1, 0, { name: 'Meter consumption on phase 1', desc: 'Actual consumption of power on phase 1', type: 'number', role: 'value', unit: 'W' }); ! createState(idPowerRealPphase2, 0, { name: 'Meter consumption on phase 2', desc: 'Actual consumption of power on phase 2', type: 'number', role: 'value', unit: 'W' }); ! createState(idPowerRealPphase3, 0, { name: 'Meter consumption on phase 3', desc: 'Actual consumption of power on phase 3', type: 'number', role: 'value', unit: 'W' }); ! createState(idCurrentAcPhase1, 0, { name: 'Meter current on phase 1', desc: 'Actual AC current on phase 1', type: 'number', role: 'value', unit: 'A' }); ! createState(idCurrentAcPhase2, 0, { name: 'Meter current on phase 2', desc: 'Actual AC current on phase 2', type: 'number', role: 'value', unit: 'A' }); createState(idCurrentAcPhase3, 0, { name: 'Meter current on phase 3', desc: 'Actual AC current on phase 3', type: 'number', role: 'value', unit: 'A' }); ! createState(idVoltageAcPhase1, 0, { name: 'Meter voltage on phase 1', desc: 'Actual AC voltage on phase 1', type: 'number', role: 'value', unit: 'V' }); ! createState(idVoltageAcPhase2, 0, { name: 'Meter voltage on phase 2', desc: 'Actual AC voltage on phase 2', type: 'number', role: 'value', unit: 'V' }); createState(idVoltageAcPhase3, 0, { name: 'Meter voltage on phase 3', desc: 'Actual AC voltage on phase 3', type: 'number', role: 'value', unit: 'V' }); ! createState(idEnergyRealWacSumProd, 0, { name: 'Meter sum of energy produced', desc: 'Sum of real energy produced', type: 'number', role: 'value', unit: 'Wh' }); ! createState(idEnergyRealWacSumCons, 0, { name: 'Meter sum of energy consumed', desc: 'Sum of real energy consumed', type: 'number', role: 'value', unit: 'Wh' }); ! var request = require("request"); var myJson = {}; ! function parseJson(text) { 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 request from: " + url; log(error, "warn"); callback(error, null); } }); } ! function main() { readJson(urlInverter, function(err,json) { if(!err) { myJson = json; log("Code: " + myJson.Head.Status.Code,"info"); log("PAC: " + myJson.Body.Data.PAC.Values[1],"info"); log("DAY_ENERGY: " + myJson.Body.Data.DAY_ENERGY.Values[1],"info"); log("YEAR_ENERGY: " + myJson.Body.Data.YEAR_ENERGY.Values[1],"info"); log("TOTAL_ENERGY: " + myJson.Body.Data.TOTAL_ENERGY.Values[1],"info"); setState(idInverterCode ,parseInt(myJson.Head.Status.Code)); setState(idPAC ,parseInt(myJson.Body.Data.PAC.Values[1])); setState(idDAY_ENERGY ,parseInt(myJson.Body.Data.DAY_ENERGY.Values[1])); setState(idYEAR_ENERGY ,parseInt(myJson.Body.Data.YEAR_ENERGY.Values[1])); setState(idTOTAL_ENERGY ,parseInt(myJson.Body.Data.TOTAL_ENERGY.Values[1])); } else { log("Error reading JSON from Fronius inverter. No data!","warn"); myJson = {}; } }); readJson(urlMeter, function(err,json) { if(!err) { myJson = json; log("Code: " + myJson.Head.Status.Code,"info"); log("PowerReal_P_Sum: " + myJson.Body.Data[0].PowerReal_P_Sum,"info"); log("PowerReal_P_Phase_1: " + myJson.Body.Data[0].PowerReal_P_Phase_1,"info"); log("PowerReal_P_Phase_2: " + myJson.Body.Data[0].PowerReal_P_Phase_2,"info"); log("PowerReal_P_Phase_3: " + myJson.Body.Data[0].PowerReal_P_Phase_3,"info"); log("Current_AC_Phase_1: " + myJson.Body.Data[0].Current_AC_Phase_1,"info"); log("Current_AC_Phase_2: " + myJson.Body.Data[0].Current_AC_Phase_2,"info"); log("Current_AC_Phase_3: " + myJson.Body.Data[0].Current_AC_Phase_3,"info"); log("Voltage_AC_Phase_1: " + myJson.Body.Data[0].Voltage_AC_Phase_1,"info"); log("Voltage_AC_Phase_2: " + myJson.Body.Data[0].Voltage_AC_Phase_2,"info"); log("Voltage_AC_Phase_3: " + myJson.Body.Data[0].Voltage_AC_Phase_3,"info"); log("EnergyReal_WAC_Sum_Produced: " + myJson.Body.Data[0].EnergyReal_WAC_Sum_Produced,"info"); log("EnergyReal_WAC_Sum_Consumed: " + myJson.Body.Data[0].EnergyReal_WAC_Sum_Consumed,"info"); setState(idMeterCode ,parseInt(myJson.Head.Status.Code)); setState(idPowerRealPsum ,parseInt(myJson.Body.Data[0].PowerReal_P_Sum)); setState(idPowerRealPphase1 ,parseInt(myJson.Body.Data[0].PowerReal_P_Phase_1)); setState(idPowerRealPphase2 ,parseInt(myJson.Body.Data[0].PowerReal_P_Phase_2)); setState(idPowerRealPphase3 ,parseInt(myJson.Body.Data[0].PowerReal_P_Phase_3)); setState(idCurrentAcPhase1 ,parseInt(myJson.Body.Data[0].Current_AC_Phase_1)); setState(idCurrentAcPhase2 ,parseInt(myJson.Body.Data[0].Current_AC_Phase_2)); setState(idCurrentAcPhase3 ,parseInt(myJson.Body.Data[0].Current_AC_Phase_3)); setState(idVoltageAcPhase1 ,parseInt(myJson.Body.Data[0].Voltage_AC_Phase_1)); setState(idVoltageAcPhase2 ,parseInt(myJson.Body.Data[0].Voltage_AC_Phase_2)); setState(idVoltageAcPhase3 ,parseInt(myJson.Body.Data[0].Voltage_AC_Phase_3)); setState(idEnergyRealWacSumProd ,parseInt(myJson.Body.Data[0].EnergyReal_WAC_Sum_Produced)); setState(idEnergyRealWacSumCons ,parseInt(myJson.Body.Data[0].EnergyReal_WAC_Sum_Consumed)); } else { log("Error reading JSON from Fronius Smart Meter. No data!","warn"); myJson = {}; } }); } ! schedule("*/5 * * * *", function () { // poll every 5 minutes main(); }); ! // poll values at startup setTimeout(main,500); ! `

                    Hi,

                    habe dei Script mit meinem Fronius Symo 7.x probiert aber er hat bei den Meterwerten ein Problem:

                    javascript.0 TypeError: Cannot read property 'PowerReal_P_Sum' of undefined at script.js.Fronius.PVBruchsal:217:70 at Request._callback (script.js.Fronius.PVBruchsal:185:13) at Request.self.callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:186:22) at emitTwo (events.js:87:13) at Request.emit (events.js:172:7) at Request. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1081:10) at emitOne (events.js:77:13) at Request.emit (events.js:169:7) at IncomingMessage. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1001:12) at IncomingMessage.g (events.js:260:16)

                    Meine json ist allerdings auch nicht so ausführlich wie die des Hybrid.

                    PowerReal_P_Sum ist allerdings vorhanden!

                    Was könnte das Problem sein?

                    {
                    	"Head" : {
                    		"RequestArguments" : {
                    			"DeviceClass" : "Meter",
                    			"DeviceId" : "1",
                    			"Scope" : "Device"
                    		},
                    		"Status" : {
                    			"Code" : 0,
                    			"Reason" : "",
                    			"UserMessage" : ""
                    		},
                    		"Timestamp" : "2017-02-22T12:28:12+01:00"
                    	},
                    	"Body" : {
                    		"Data" : {
                    			"Details" : {
                    				"Serial" : "n.a.",
                    				"Model" : "S0 Meter at inverter 1",
                    				"Manufacturer" : "Fronius"
                    			},
                    			"TimeStamp" : 1487762891,
                    			"Enable" : 1,
                    			"Visible" : 1,
                    			"PowerReal_P_Sum" : -291.238569,
                    			"Meter_Location_Current" : 1,
                    			"EnergyReal_WAC_Minus_Relative" : 24
                    		}
                    	}
                    }
                    

                    Danke!

                    Grüße Daniel

                    ioBroker auf Qnap TS-251A 8GB (Docker), Homamatic CCU2 + ca 50 Geräte (Aktoren, Sender, Sensoren), Alexa Echo, Alexa Echo Dot, Vu+ Duo2, Logitech Harmony Elite, Fronius Wechselrichter, Viessman Heizung + vControl

                    <…

                    1 Antwort Letzte Antwort
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #10

                      @painkillerde:

                      Was könnte das Problem sein? `
                      Dein JSON enthält kein Array, da nur wenige Daten. Bitte ändern:

                      myJson.Body.Data[0].PowerReal_P_Sum --> myJson.Body.Data.PowerReal_P_Sum
                      

                      Alle anderen auskommentieren oder löschen, da nicht vorhanden.

                      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

                      1 Antwort Letzte Antwort
                      0
                      • painkillerdeP Offline
                        painkillerdeP Offline
                        painkillerde
                        schrieb am zuletzt editiert von
                        #11

                        @paul53:

                        @painkillerde:

                        Was könnte das Problem sein? `
                        Dein JSON enthält kein Array, da nur wenige Daten. Bitte ändern:

                        myJson.Body.Data[0].PowerReal_P_Sum --> myJson.Body.Data.PowerReal_P_Sum
                        

                        Alle anderen auskommentieren oder löschen, da nicht vorhanden. `

                        Gerade hatte ichs gefunden ;)

                        aber Danke!!

                        hier dann der fertige Code für alle Fronius Symo Besitzer!!

                        ! ````
                        var urlInverter = 'http://192.168.1.1/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData';
                        var urlMeter = 'http://192.168.1.1/solar_api/v1/GetMeterRealtimeData.cgi?Scope=Device&DeviceId=1';
                        ! var path = "froniusSymo.";
                        var pathInverter = "inverter.";
                        var pathMeter = "meter.";
                        ! var idInverterCode = path + pathInverter + "Code";
                        var idPAC = path + pathInverter + "PAC";
                        var idDAY_ENERGY = path + pathInverter + "DAY_ENERGY";
                        var idYEAR_ENERGY = path + pathInverter + "YEAR_ENERGY";
                        var idTOTAL_ENERGY = path + pathInverter + "TOTAL_ENERGY";
                        var idMeterCode = path + pathMeter + "Code";
                        var idPowerRealPsum = path + pathMeter + "PowerReal_P_Sum";
                        ! createState(idInverterCode, 0, {
                        name: 'Inverter request status code',
                        desc: 'Indicates if the request went OK or gives a hint about what went wrong',
                        type: 'number',
                        role: 'value'
                        });
                        ! createState(idPAC, 0, {
                        name: 'Inverter AC power',
                        desc: 'Actual AC power',
                        type: 'number',
                        role: 'value',
                        unit: 'W'
                        });
                        ! createState(idDAY_ENERGY, 0, {
                        name: 'Inverter day energy',
                        desc: 'Energy generated on current day',
                        type: 'number',
                        role: 'value',
                        unit: 'Wh'
                        });
                        ! createState(idYEAR_ENERGY, 0, {
                        name: 'Inverter year energy',
                        desc: 'Energy generated in current year',
                        type: 'number',
                        role: 'value',
                        unit: 'Wh'
                        });
                        ! createState(idTOTAL_ENERGY, 0, {
                        name: 'Inverter overall energy',
                        desc: 'Energy generated overall',
                        type: 'number',
                        role: 'value',
                        unit: 'Wh'
                        });
                        ! createState(idMeterCode, 0, {
                        name: 'Meter request status code',
                        desc: 'Indicates if the request went OK or gives a hint about what went wrong',
                        type: 'number',
                        role: 'value'
                        });
                        ! createState(idPowerRealPsum, 0, {
                        name: 'Meter consumption',
                        desc: 'Actual consumption of power',
                        type: 'number',
                        role: 'value',
                        unit: 'W'
                        });
                        ! var request = require("request");
                        var myJson = {};
                        ! function parseJson(text) {
                        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 request from: " + url;
                        log(error, "warn");
                        callback(error, null);
                        }
                        });
                        }
                        ! function main() {
                        readJson(urlInverter, function(err,json) {
                        if(!err) {
                        myJson = json;
                        log("Code: " + myJson.Head.Status.Code,"info");
                        log("PAC: " + myJson.Body.Data.PAC.Values[1],"info");
                        log("DAY_ENERGY: " + myJson.Body.Data.DAY_ENERGY.Values[1],"info");
                        log("YEAR_ENERGY: " + myJson.Body.Data.YEAR_ENERGY.Values[1],"info");
                        log("TOTAL_ENERGY: " + myJson.Body.Data.TOTAL_ENERGY.Values[1],"info");
                        setState(idInverterCode ,parseInt(myJson.Head.Status.Code));
                        setState(idPAC ,parseInt(myJson.Body.Data.PAC.Values[1]));
                        setState(idDAY_ENERGY ,parseInt(myJson.Body.Data.DAY_ENERGY.Values[1]));
                        setState(idYEAR_ENERGY ,parseInt(myJson.Body.Data.YEAR_ENERGY.Values[1]));
                        setState(idTOTAL_ENERGY ,parseInt(myJson.Body.Data.TOTAL_ENERGY.Values[1]));
                        } else {
                        log("Error reading JSON from Fronius inverter. No data!","warn");
                        myJson = {};
                        }
                        });
                        readJson(urlMeter, function(err,json) {
                        if(!err) {
                        myJson = json;
                        log("Code: " + myJson.Head.Status.Code,"info");
                        log("PowerReal_P_Sum: " + myJson.Body.Data.PowerReal_P_Sum,"info");
                        setState(idMeterCode ,parseInt(myJson.Head.Status.Code));
                        setState(idPowerRealPsum ,parseInt(myJson.Body.Data.PowerReal_P_Sum));
                        } else {
                        log("Error reading JSON from Fronius Smart Meter. No data!","warn");
                        myJson = {};
                        }
                        });
                        }
                        ! schedule("*/5 * * * *", function () { // poll every 5 minutes
                        main();
                        });
                        ! // poll values at startup
                        setTimeout(main,500);

                        Grüße Daniel

                        ioBroker auf Qnap TS-251A 8GB (Docker), Homamatic CCU2 + ca 50 Geräte (Aktoren, Sender, Sensoren), Alexa Echo, Alexa Echo Dot, Vu+ Duo2, Logitech Harmony Elite, Fronius Wechselrichter, Viessman Heizung + vControl

                        <…

                        1 Antwort Letzte Antwort
                        0
                        • M Offline
                          M Offline
                          moebius
                          schrieb am zuletzt editiert von
                          #12

                          Ein flow zum Transfer der Inverterdaten nach InfluxDB

                          ! [
                          ! {
                          ! "id": "2a7e3123.ad03ae",
                          ! "type": "tab",
                          ! "label": "Read fronius"
                          ! },
                          ! {
                          ! "id": "fd6b509c.77443",
                          ! "type": "inject",
                          ! "z": "2a7e3123.ad03ae",
                          ! "name": "Tick",
                          ! "topic": "",
                          ! "payload": "",
                          ! "payloadType": "date",
                          ! "repeat": "",
                          ! "crontab": "*/1 4-22 * * *",
                          ! "once": false,
                          ! "x": 288,
                          ! "y": 212,
                          ! "wires": [
                          ! [
                          ! "22d2788d.d27808"
                          ! ]
                          ! ]
                          ! },
                          ! {
                          ! "id": "22d2788d.d27808",
                          ! "type": "http request",
                          ! "z": "2a7e3123.ad03ae",
                          ! "name": "Read Fronius data",
                          ! "method": "GET",
                          ! "url": "http://192.168.4.181/solar_api/v1/GetIn … verterData",
                          ! "tls": "",
                          ! "x": 473,
                          ! "y": 238,
                          ! "wires": [
                          ! [
                          ! "9686437.4938ec"
                          ! ]
                          ! ]
                          ! },
                          ! {
                          ! "id": "9686437.4938ec",
                          ! "type": "json",
                          ! "z": "2a7e3123.ad03ae",
                          ! "name": "",
                          ! "x": 585,
                          ! "y": 296,
                          ! "wires": [
                          ! [
                          ! "bb4056ca.6f3138"
                          ! ]
                          ! ]
                          ! },
                          ! {
                          ! "id": "bb4056ca.6f3138",
                          ! "type": "switch",
                          ! "z": "2a7e3123.ad03ae",
                          ! "name": "Check Error Code",
                          ! "property": "payload.Body.Data.DeviceStatus.ErrorCode",
                          ! "propertyType": "msg",
                          ! "rules": [
                          ! {
                          ! "t": "eq",
                          ! "v": "0",
                          ! "vt": "num"
                          ! }
                          ! ],
                          ! "checkall": "true",
                          ! "outputs": 1,
                          ! "x": 680,
                          ! "y": 350,
                          ! "wires": [
                          ! [
                          ! "29bf8fb4.dba5"
                          ! ]
                          ! ]
                          ! },
                          ! {
                          ! "id": "c2c27a4e.27dc28",
                          ! "type": "catch",
                          ! "z": "2a7e3123.ad03ae",
                          ! "name": "",
                          ! "scope": null,
                          ! "x": 315,
                          ! "y": 387,
                          ! "wires": [
                          ! []
                          ! ]
                          ! },
                          ! {
                          ! "id": "29bf8fb4.dba5",
                          ! "type": "function",
                          ! "z": "2a7e3123.ad03ae",
                          ! "name": "Split attributes",
                          ! "func": "\nvar newmsg = {};\nnewmsg.topic = msg.topic;\nnewmsg.payload = {};\n\nvar src = msg.payload.Body.Data;\nfor (var key in src) {\n newmsg.payload[key] = src[key]\n}\nreturn newmsg;",
                          ! "outputs": 1,
                          ! "noerr": 0,
                          ! "x": 808,
                          ! "y": 414,
                          ! "wires": [
                          ! [
                          ! "dbda39b3.e5aa38"
                          ! ]
                          ! ]
                          ! },
                          ! {
                          ! "id": "dbda39b3.e5aa38",
                          ! "type": "function",
                          ! "z": "2a7e3123.ad03ae",
                          ! "name": "Prepare for influx",
                          ! "func": "\nvar newmsg = {};\nnewmsg.topic = msg.topic;\nvar vals = {};\n\nvar src = msg.payload;\nfor (var key in src) {\n if(typeof src[key].Value != "undefined")\n vals[key] = src[key].Value\n}\nnewmsg.payload = vals\nreturn newmsg;",
                          ! "outputs": 1,
                          ! "noerr": 0,
                          ! "x": 914,
                          ! "y": 489,
                          ! "wires": [
                          ! [
                          ! "aff49a5e.3ee358"
                          ! ]
                          ! ]
                          ! },
                          ! {
                          ! "id": "aff49a5e.3ee358",
                          ! "type": "influxdb out",
                          ! "z": "2a7e3123.ad03ae",
                          ! "influxdb": "d898da53.9e89f8",
                          ! "name": "",
                          ! "measurement": "pv",
                          ! "x": 1087,
                          ! "y": 559,
                          ! "wires": []
                          ! },
                          ! {
                          ! "id": "d898da53.9e89f8",
                          ! "type": "influxdb",
                          ! "z": "",
                          ! "hostname": "127.0.0.1",
                          ! "port": "8086",
                          ! "protocol": "http",
                          ! "database": "infra",
                          ! "name": ""
                          ! }
                          ! ]
                          1803_clipboard08.jpg

                          1 Antwort Letzte Antwort
                          0
                          • ldittmarL Offline
                            ldittmarL Offline
                            ldittmar
                            Developer
                            schrieb am zuletzt editiert von
                            #13

                            Hallo,

                            ich bin gerade dabei den Adapter für den Fronius Wechselrichter zu machen und hätte z.Z. eine Frage: kann mir jemand sagen was "EnergyReal_WAC_Minus_Relative" sein soll? Und am Besten mit Einheit :-) Danke!!

                            Grüße,

                            ldittmar

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


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            782

                            Online

                            32.5k

                            Benutzer

                            81.7k

                            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