NEWS
Datenpunkt aus xml
-
jetz kommt Leben ins Geschehen
20:19:52.202 info javascript.0 (6486) Stop script script.js.common.PV 20:38:16.280 info javascript.0 (6486) Stop script script.js.common.PV 20:38:17.819 info javascript.0 (6486) Start javascript script.js.common.PV 20:38:17.856 info javascript.0 (6486) script.js.common.PV: registered 0 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions 20:39:07.644 info javascript.0 (6486) script.js.common.PV: {'root':{'Device':[{'$':{'Name':'SF-WR-5503','Type':'Inverter','Serial':'752794AB005565810009','BusAddress':'1','NetBiosName':'INV005565810009','IpAddress':'10.68.0.85','DateTime':'2022-11-14T20:38:18'},'Measurements':[{'Measurement':[{'$':{'Value':'233.046','Unit':'V','Type':'AC_Voltage1'}},{'$':{'Value':'235.306','Unit':'V','Type':'AC_Voltage2'}},{'$':{'Value':'234.911','Unit':'V','Type':'AC_Voltage3'}},{'$':{'Value':'50.002','Unit':'Hz','Type':'AC_Frequency1'}},{'$':{'Value':'50.006','Unit':'Hz','Type':'AC_Frequency2'}},{'$':{'Value':'50.003','Unit':'Hz','Type':'AC_Frequency3'}},{'$':{'Value':'0.000','Unit':'V','Type':'DC_Voltage'}},{'$':{'Value':'21.260','Unit':'°C','Type':'Temp'}}]}]}]}} 20:40:00.071 info javascript.0 (6486) script.js.common.PV: {'root':{'Device':[{'$':{'Name':'SF-WR-5503','Type':'Inverter','Serial':'752794AB005565810009','BusAddress':'1','NetBiosName':'INV005565810009','IpAddress':'10.68.0.85','DateTime':'2022-11-14T20:39:10'},'Measurements':[{'Measurement':[{'$':{'Value':'233.334','Unit':'V','Type':'AC_Voltage1'}},{'$':{'Value':'235.452','Unit':'V','Type':'AC_Voltage2'}},{'$':{'Value':'235.217','Unit':'V','Type':'AC_Voltage3'}},{'$':{'Value':'50.015','Unit':'Hz','Type':'AC_Frequency1'}},{'$':{'Value':'50.024','Unit':'Hz','Type':'AC_Frequency2'}},{'$':{'Value':'50.008','Unit':'Hz','Type':'AC_Frequency3'}},{'$':{'Value':'0.000','Unit':'V','Type':'DC_Voltage'}},{'$':{'Value':'21.250','Unit':'°C','Type':'Temp'}}]}]}]}}
nur wir teile ich die Daten nun Datenpunkten zu?
-
@australien sagte in Datenpunkt aus xml:
die Daten nun Datenpunkten zu?
Ersetze log(obj) durch
const messung = obj.root.Device[0].Measurements[0].Measurement; for(let obj of messung) { log(obj.$.Type + ': ' + parseFloat(obj.$.Value) + ' ' + obj.$.Unit); // setState('0_userdata.0.SolarFrontier.' + obj.$.Type, parseFloat(obj.$.Value), true); }
Erstelle vorher die 8 Datenpunkte vom Typ "number" unter "0_userdata.0".
Log:
20:59:41.099 info javascript.1 (2579) script.js.common.Neuer_Test: AC_Voltage1: 233.046 V 20:59:41.100 info javascript.1 (2579) script.js.common.Neuer_Test: AC_Voltage2: 235.306 V 20:59:41.100 info javascript.1 (2579) script.js.common.Neuer_Test: AC_Voltage3: 234.911 V 20:59:41.100 info javascript.1 (2579) script.js.common.Neuer_Test: AC_Frequency1: 50.002 Hz 20:59:41.100 info javascript.1 (2579) script.js.common.Neuer_Test: AC_Frequency2: 50.006 Hz 20:59:41.100 info javascript.1 (2579) script.js.common.Neuer_Test: AC_Frequency3: 50.003 Hz 20:59:41.100 info javascript.1 (2579) script.js.common.Neuer_Test: DC_Voltage: 0 V 20:59:41.100 info javascript.1 (2579) script.js.common.Neuer_Test: Temp: 21.26 °C
-
@paul53 wieso sind im obj nur 8 Werte?
die xml enthält 17 -
@homoran sagte: die xml enthält 17
Dann müssen die übrigen wohl in einem anderen Array-Element enthalten sein. Ich schau mal.
-
alle in <Measurements>
<root> <Device Name="SF-WR-5503" Type="Inverter" Serial="752794Axxxxxxx" BusAddress="1" NetBiosName="INV005565810009" IpAddress="10.68.0.85" DateTime="2022-11-14T14:34:49"> <Measurements> <Measurement Value="232.511" Unit="V" Type="AC_Voltage1"/> <Measurement Value="234.392" Unit="V" Type="AC_Voltage2"/> <Measurement Value="234.739" Unit="V" Type="AC_Voltage3"/> <Measurement Value="0.188" Unit="A" Type="AC_Current1"/> <Measurement Value="0.186" Unit="A" Type="AC_Current2"/> <Measurement Value="0.182" Unit="A" Type="AC_Current3"/> <Measurement Value="83.355" Unit="W" Type="AC_Power"/> <Measurement Value="30.510" Unit="W" Type="AC_Power1"/> <Measurement Value="28.707" Unit="W" Type="AC_Power2"/> <Measurement Value="27.966" Unit="W" Type="AC_Power3"/> <Measurement Value="49.997" Unit="Hz" Type="AC_Frequency1"/> <Measurement Value="50.005" Unit="Hz" Type="AC_Frequency2"/> <Measurement Value="50.001" Unit="Hz" Type="AC_Frequency3"/> <Measurement Value="435.600" Unit="V" Type="DC_Voltage"/> <Measurement Value="0.195" Unit="A" Type="DC_Current"/> <Measurement Value="84.942" Unit="W" Type="DC_Power"/> <Measurement Value="39.610" Unit="°C" Type="Temp"/> </Measurements> </Device> </root>
-
@homoran
Das Ergebnis (Log) von xml2js lieferte nur die 8 Werte. -
super, danke euch beiden!
-
@paul53 das ist ja das Problem
ich habe so etwas auch bei meinem Kostal, allerdings muss ich da in derAPI due gewünschten Parameter abfragen. das ist anscheinend auf eine maximale Anzahl je Abfrage limitiert.
Vielleicht ist die Zeichenanzahl begrenzt@australien wie bist du denn an das vollständige xml Dokument gekommen?
-
@australien
Kann es sein, dass nachts keine Stromstärke- und Leistungswerte geliefert werden? -
@paul53 guter Ansatz!
-
mit Nachts ist mir klar, ich werd mir das morgen unter Tags noch anschauen, falls kein Nebel ist
Danke Euch beiden nochmals!!
-
@paul53
@australien
was ist denn die DC Voltage, wenn nicht die Panel Spannung?und
@homoran sagte in Datenpunkt aus xml:
@australien wie bist du denn an das vollständige xml Dokument gekommen?
-
Guten Morgen,
Nebel, aber liefert etwas, somit sind wieder alle 17 Datenpunkte vorhanden.<Measurements> <Measurement Value="234.225" Unit="V" Type="AC_Voltage1"/> <Measurement Value="236.033" Unit="V" Type="AC_Voltage2"/> <Measurement Value="235.065" Unit="V" Type="AC_Voltage3"/> <Measurement Value="0.144" Unit="A" Type="AC_Current1"/> <Measurement Value="0.155" Unit="A" Type="AC_Current2"/> <Measurement Value="0.147" Unit="A" Type="AC_Current3"/> <Measurement Value="6.654" Unit="W" Type="AC_Power"/> <Measurement Value="6.163" Unit="W" Type="AC_Power1"/> <Measurement Value="2.353" Unit="W" Type="AC_Power2"/> <Measurement Value="2.135" Unit="W" Type="AC_Power3"/> <Measurement Value="49.951" Unit="Hz" Type="AC_Frequency1"/> <Measurement Value="49.957" Unit="Hz" Type="AC_Frequency2"/> <Measurement Value="49.958" Unit="Hz" Type="AC_Frequency3"/> <Measurement Value="382.300" Unit="V" Type="DC_Voltage"/> <Measurement Value="0.017" Unit="A" Type="DC_Current"/> <Measurement Value="6.499" Unit="W" Type="DC_Power"/> <Measurement Value="36.550" Unit="°C" Type="Temp"/> </Measurements>
@Homoran hatte ich vor 6 Jahren bei der Installation der Anlage erfragt. Es waren sogar 3 xml Seiten, nur die anderen beiden waren nicht brauchbar, weiß die auch nicht mehr.
-
@australien sagte: alle 17 Datenpunkte vorhanden.
Dann erstelle die restlichen Datenpunkte und erweitere um eine Abfrage.
const messung = obj.root.Device[0].Measurements[0].Measurement; if(messung.length == 17) { for(let obj of messung) { setState('0_userdata.0.SolarFrontier.' + obj.$.Type, parseFloat(obj.$.Value), true); } }
-
@paul53
Datenpunkte hab ich bereits erstellt und werden auch geschrieben - mit dem alten script.
Worin besteht der unterschied? -
@australien sagte: Worin besteht der unterschied?
Dass mit der zusätzlichen Abfrage nachts nichts geschrieben wird.
-
@paul53
Nachts sind die Werte der Leistung aber sowieso 0 und somit ist es doch auch egal. -
@australien sagte in Datenpunkt aus xml:
@paul53
Nachts sind die Werte der Leistung aber sowieso 0 und somit ist es doch auch egal.eben nicht!
Nachts g7bt das xml gar nichts zum auswerten zurück
-
@australien sagte: ist es doch auch egal.
Ja, ist es, wenn die Werte nicht historisiert werden.
-
@paul53
Ok, das passiert ja noch nicht, will aber natürlich in naher Zukunft die Daten speichern.Sollte also die Abrage auf das ganze xml ausgeweitet werden, auch wenn weniger Daten vorhanden sind.
Die letzten gültigen Datenpunkte der Leistung sind alle mit dem Wert 0 befüllt, was ja auch passen würde.Die ganze Abrage macht ja sowieso nur Sinn, solange Sonne scheint, also eigentlich ein CRON mit Astronomischer Tag würde das ganze einschränken.
so in etwa
const parser = require('xml2js').parseString; const url = 'http://10.68.0.85/measurements.xml'; schedule('{"time":{"start":"sunrise","end":"sunset","mode":"minutes","interval":1},"period":{"days":1}}', function() { request(url, function(error, response, result) { if(!error) parser(result, function(err, obj) { if(!err) { //log(obj); // Ausgabe posten! const messung = obj.root.Device[0].Measurements[0].Measurement; for(let obj of messung) { //log(obj.$.Type + ': ' + parseFloat(obj.$.Value) + ' ' + obj.$.Unit); setState('0_userdata.0.SolarFrontier.' + obj.$.Type, parseFloat(obj.$.Value), true); } } }); }); });