Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Fronius Symo Hybrid über Javaskript auslesen (Json)

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Fronius Symo Hybrid über Javaskript auslesen (Json)

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      SolarElch last edited by

      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 Reply Last reply Reply Quote 0
      • ruhr70
        ruhr70 last edited by

        @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 = {};
            }
        });
        
        
        1 Reply Last reply Reply Quote 1
        • S
          SolarElch last edited by

          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 Reply Last reply Reply Quote 0
          • ruhr70
            ruhr70 last edited by

            @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);
            
            
            1 Reply Last reply Reply Quote 0
            • S
              SolarElch last edited by

              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 Reply Last reply Reply Quote 0
              • S
                SolarElch last edited by

                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 Reply Last reply Reply Quote 0
                • ruhr70
                  ruhr70 last edited by

                  @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);
                  
                  
                  1 Reply Last reply Reply Quote 0
                  • E
                    eastcoast last edited by

                    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 Reply Last reply Reply Quote 0
                    • painkillerde
                      painkillerde last edited by

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

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

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

                        1 Reply Last reply Reply Quote 0
                        • painkillerde
                          painkillerde last edited by

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

                          1 Reply Last reply Reply Quote 0
                          • M
                            moebius last edited by

                            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 Reply Last reply Reply Quote 0
                            • ldittmar
                              ldittmar Developer last edited by

                              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 Reply Last reply Reply Quote -1
                              • First post
                                Last post

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              661
                              Online

                              31.7k
                              Users

                              79.8k
                              Topics

                              1.3m
                              Posts

                              7
                              13
                              6558
                              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