NEWS
Funktion zum auslesen der Leistungsdaten SMA WEBBOX
-
Hallo
Ich würde gerne aus den folgenden JSON String die Daten wie Tagesertrag auslesen. Wie muss die Funktion aussehen damit ich den Tagesertrag bekomme ?
{ "result": { "overview": [ { "meta": "GriPwr", "name": "Leistung", "unit": "W", "value": "0" }, { "meta": "GriEgyTdy", "name": "Tagesertrag", "unit": "kWh", "value": "29.667" }, { "meta": "GriEgyTot", "name": "Gesamtertrag", "unit": "kWh", "value": "28361.134" }, { "meta": "OpStt", "name": "Zustand", "value": "Ok, Ok, Ok" }, { "meta": "Msg", "name": "Meldung", "value": "" } ] }, "format": "JSON", "proc": "GetPlantOverview", "version": "1.0", "id": "1" }
-
Wie muss die Funktion aussehen damit ich den Tagesertrag bekomme ? `
var obj = { "result": { "overview": [ { "meta": "GriPwr", "name": "Leistung", "unit": "W", "value": "0" }, { "meta": "GriEgyTdy", "name": "Tagesertrag", "unit": "kWh", "value": "29.667" }, { "meta": "GriEgyTot", "name": "Gesamtertrag", "unit": "kWh", "value": "28361.134" }, { "meta": "OpStt", "name": "Zustand", "value": "Ok, Ok, Ok" }, { "meta": "Msg", "name": "Meldung", "value": "" } ] }, "format": "JSON", "proc": "GetPlantOverview", "version": "1.0", "id": "1" }; log(obj.result.overview[1].value); // Wert für Tagesertrag = 29.667
Log:
` > 22:08:04.937 [info] javascript.1 Start javascript script.js.common.Tests22:08:04.937 [info] javascript.1 script.js.common.Tests: 29.667
22:08:04.937 [info] javascript.1 script.js.common.Tests: registered 0 subscriptions and 0 schedules `
-
Danke für die schnelle Antwort.
Ich meinte eine node-red Funktion.
1330_unbenannt.png -
Ich wollte die Objektstruktur besser sichtbar machen.
Von node-red habe ich keine Ahnung. Vielleicht so ?
return { payload: msg.payload.result.overview[1].value };
oder so ?
return msg.result.overview[1].value ;
oder, da die Ausgabe "msg.payload" ist, so ?
return { payload: msg.result.overview[1].value };
Ich hoffe, dass eine der Varianten funktioniert
-
Hallo,
Eine kleine Änderung ist notwendig:
msg.payload=msg.payload.result.overview [1].value;
return msg;
Gesendet von meinem SM-G900F mit Tapatalk
-
msg.payload=msg.payload.result.overview [1].value;
return msg; `
Das sollte identisch zu meinem ersten Vorschlag sein. -
Praktisch ja, rein formell nein. Zu einem korrekten Message Objekt gehören per Definition mindestens die Attribute payload und topic, auch wenn diese leer sind.
Gesendet von meinem SM-G900F mit Tapatalk
-
Zu einem korrekten Message Objekt gehören per Definition mindestens die Attribute payload und topic, auch wenn diese leer sind. `
Danke für die Information. -
Hat super funktioniert
hier die Lösung
msg1 = {};
msg1.payload = msg.payload.result.overview[0].value + " " + msg.payload.result.overview[0].unit;
msg2 = {};
msg2.payload = msg.payload.result.overview[1].value + " " + msg.payload.result.overview[1].unit;
msg3 = {};
msg3.payload = msg.payload.result.overview[2].value + " " + msg.payload.result.overview[2].unit ;
return [msg1,msg2,msg3];
mir ist noch unklar wie die Funktion aussehen müsste wenn der folgende String abgefragt wird.
{"result":{"devices":[{"channels":[{"meta":"Ipv","name":"DC Strom Eingang","unit":"A","value":"0"},{"meta":"Upv-Ist","name":"DC Spannung Eingang","unit":"V","value":"0"},{"meta":"WindVel m/s","name":"Windgeschwindigkeit","unit":"m/s","value":"2.4"},{"meta":"TmpAmb C","name":"Au\u00DFentemperatur","unit":"\u00B0C","value":"20.3"},{"meta":"IntSolIrr","name":"Einstrahlung","unit":"W/m^2","value":"75"},{"meta":"Fac","name":"Netzfrequenz","unit":"Hz","value":"0"},{"meta":"Iac-Ist","name":"Netzstrom","unit":"A","value":"0"},{"meta":"Pac","name":"Leistung","unit":"W","value":"0"},{"meta":"Riso","name":"Isolationswiderstand","unit":"Ohm","value":"0"},{"meta":"TmpMdul C","name":"Modultemperatur","unit":"\u00B0C","value":"22.3"},{"meta":"h-On","name":"Einspeisezeit","unit":"h","value":"0"},{"meta":"h-Total","name":"Betriebszeit","unit":"h","value":"0"},{"meta":"E-Total","name":"Gesamtertrag","unit":"kWh","value":"0"},{"meta":"Netz-Ein","name":"Anzahl Netzzuschaltungen","value":"0"}],"key":"0088:0000725b"}]},"format":"JSON","proc":"GetProcessData","version":"1.0","id":"1"}
-
Gib das json objekt doch mal hier in das Formular ein:
Dann wird es richtig formatiert und man sieht die Ebenen und Arrays für den Zugriff auf die Attribute.
Gesendet von meinem SM-G900F mit Tapatalk
-
Danke für den Tip.
es sind 2 Arrays wie fragt man die dann ab ? Ich würde dann gerne die Modultemperatur auslesen.
{
"result": {
"devices": [
{
"channels": [
{
"meta": "Ipv",
"name": "DC Strom Eingang",
"unit": "A",
"value": "0"
},
{
"meta": "Upv-Ist",
"name": "DC Spannung Eingang",
"unit": "V",
"value": "0"
},
{
"meta": "WindVel m/s",
"name": "Windgeschwindigkeit",
"unit": "m/s",
"value": "2.4"
},
{
"meta": "TmpAmb C",
"name": "Au\u00dfentemperatur",
"unit": "\u00b0C",
"value": "20.3"
},
{
"meta": "IntSolIrr",
"name": "Einstrahlung",
"unit": "W/m^2",
"value": "75"
},
{
"meta": "Fac",
"name": "Netzfrequenz",
"unit": "Hz",
"value": "0"
},
{
"meta": "Iac-Ist",
"name": "Netzstrom",
"unit": "A",
"value": "0"
},
{
"meta": "Pac",
"name": "Leistung",
"unit": "W",
"value": "0"
},
{
"meta": "Riso",
"name": "Isolationswiderstand",
"unit": "Ohm",
"value": "0"
},
{
"meta": "TmpMdul C",
"name": "Modultemperatur",
"unit": "\u00b0C",
"value": "22.3"
},
{
"meta": "h-On",
"name": "Einspeisezeit",
"unit": "h",
"value": "0"
},
{
"meta": "h-Total",
"name": "Betriebszeit",
"unit": "h",
"value": "0"
},
{
"meta": "E-Total",
"name": "Gesamtertrag",
"unit": "kWh",
"value": "0"
},
{
"meta": "Netz-Ein",
"name": "Anzahl Netzzuschaltungen",
"value": "0"
}
],
"key": "0088:0000725b"
}
]
},
"format": "JSON",
"proc": "GetProcessData",
"version": "1.0",
"id": "1"
}
-
Einfach durchhangeln. Z. B.
msg.payload.result.devices[0].channels [0].value
Wenn nur die Werte und Einheiten interessant sind, bleibt das erste Array konstant auf 0. Die Anzahl der Einträge im zweiten Array bekommt man mit msg.payload.result.devices[0].channels.length.
Jetzt kommt es drauf an, was mit den Werten passieren soll.
Gesendet von meinem GT-N8000 mit Tapatalk
-
Gib das json objekt doch mal hier in das Formular ein:
Dann wird es richtig formatiert und man sieht die Ebenen und Arrays für den Zugriff auf die Attribute.
Gesendet von meinem SM-G900F mit Tapatalk `
Ich benutze https://jsonformatter.org/json-pretty-print und https://codebeautify.org/jsonviewer
-
hast du es gelöst… ich bekomme leider noch nicht mal eine Rückmeldung von der Webbox, wäre schön wenn du mir da helfen könntest.
Danke
Danke für den Tip.
es sind 2 Arrays wie fragt man die dann ab ? Ich würde dann gerne die Modultemperatur auslesen.
{
"result": {
"devices": [
{
"channels": [
{
"meta": "Ipv",
"name": "DC Strom Eingang",
"unit": "A",
"value": "0"
},
{
"meta": "Upv-Ist",
"name": "DC Spannung Eingang",
"unit": "V",
"value": "0"
},
{
"meta": "WindVel m/s",
"name": "Windgeschwindigkeit",
"unit": "m/s",
"value": "2.4"
},
{
"meta": "TmpAmb C",
"name": "Au\u00dfentemperatur",
"unit": "\u00b0C",
"value": "20.3"
},
{
"meta": "IntSolIrr",
"name": "Einstrahlung",
"unit": "W/m^2",
"value": "75"
},
{
"meta": "Fac",
"name": "Netzfrequenz",
"unit": "Hz",
"value": "0"
},
{
"meta": "Iac-Ist",
"name": "Netzstrom",
"unit": "A",
"value": "0"
},
{
"meta": "Pac",
"name": "Leistung",
"unit": "W",
"value": "0"
},
{
"meta": "Riso",
"name": "Isolationswiderstand",
"unit": "Ohm",
"value": "0"
},
{
"meta": "TmpMdul C",
"name": "Modultemperatur",
"unit": "\u00b0C",
"value": "22.3"
},
{
"meta": "h-On",
"name": "Einspeisezeit",
"unit": "h",
"value": "0"
},
{
"meta": "h-Total",
"name": "Betriebszeit",
"unit": "h",
"value": "0"
},
{
"meta": "E-Total",
"name": "Gesamtertrag",
"unit": "kWh",
"value": "0"
},
{
"meta": "Netz-Ein",
"name": "Anzahl Netzzuschaltungen",
"value": "0"
}
],
"key": "0088:0000725b"
}
]
},
"format": "JSON",
"proc": "GetProcessData",
"version": "1.0",
"id": "1"
} `