NEWS
Datenpunkt aus xml
-
@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); } } }); }); });
-
Hallo paul53, ich bin es noch einmal.
Mein Script schaut seit damals so aus, und lief ohne Probleme. Jetzt bekomme ich seit einiger Zeit diese Warnungen, es wurde aber an beiden Systemen nichts geändert. Ausser die standart updates am IOB bzw raspberry.
Was sagen mir die Warnungen, bzw. wir bekomme ich diese wieder weg.
In der besagten XML sind Daten vorhanden.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); } } }); }); });
09:19:58.061 info javascript.0 (93977) Stop script script.js.common.PV 09:19:58.106 info javascript.0 (93977) Start javascript script.js.common.PV 09:19:58.186 info javascript.0 (93977) script.js.common.PV: registered 0 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions 09:20:00.040 warn javascript.0 (93977) at script.js.common.PV:22:22 09:20:00.043 warn javascript.0 (93977) at script.js.common.PV:11:20 09:21:36.990 warn javascript.0 (93977) at script.js.common.PV:22:22 09:21:36.992 warn javascript.0 (93977) at script.js.common.PV:11:20 09:22:00.038 warn javascript.0 (93977) at script.js.common.PV:22:22 09:22:00.040 warn javascript.0 (93977) at script.js.common.PV:11:20 09:23:00.043 warn javascript.0 (93977) at script.js.common.PV:22:22 09:23:00.044 warn javascript.0 (93977) at script.js.common.PV:11:20 09:23:00.093 warn javascript.0 (93977) at script.js.common.PV:22:22 09:23:00.101 warn javascript.0 (93977) at script.js.common.PV:11:20 09:24:00.063 warn javascript.0 (93977) at script.js.common.PV:22:22 09:24:00.066 warn javascript.0 (93977) at script.js.common.PV:11:20 09:25:00.052 warn javascript.0 (93977) at script.js.common.PV:22:22 09:25:00.055 warn javascript.0 (93977) at script.js.common.PV:11:20
<root> <Device Name="SF-WR-5503" Type="Inverter" Serial="752794xxxxxxxxx10009" BusAddress="1" NetBiosName="INV005565810009" IpAddress="10.68.0.85" DateTime="2023-05-08T09:38:36"> <Measurements> <Measurement Value="235.405" Unit="V" Type="AC_Voltage1"/> <Measurement Value="236.821" Unit="V" Type="AC_Voltage2"/> <Measurement Value="236.344" Unit="V" Type="AC_Voltage3"/> <Measurement Value="3.397" Unit="A" Type="AC_Current1"/> <Measurement Value="3.356" Unit="A" Type="AC_Current2"/> <Measurement Value="3.354" Unit="A" Type="AC_Current3"/> <Measurement Value="2390.684" Unit="W" Type="AC_Power"/> <Measurement Value="798.457" Unit="W" Type="AC_Power1"/> <Measurement Value="794.152" Unit="W" Type="AC_Power2"/> <Measurement Value="792.340" Unit="W" Type="AC_Power3"/> <Measurement Value="50.013" Unit="Hz" Type="AC_Frequency1"/> <Measurement Value="50.008" Unit="Hz" Type="AC_Frequency2"/> <Measurement Value="50.016" Unit="Hz" Type="AC_Frequency3"/> <Measurement Value="512.000" Unit="V" Type="DC_Voltage"/> <Measurement Value="4.762" Unit="A" Type="DC_Current"/> <Measurement Value="2438.144" Unit="W" Type="DC_Power"/> <Measurement Value="38.340" Unit="°C" Type="Temp"/> </Measurements> </Device> </root>
-
@australien
Zu den Warnungen erhält man im Tab "Protokolle" weitere Informationen. So kann man damit nichts anfangen.