Hallo zusammen,
nun hab ich schon einige Beispiele zum XML auslesen gefunden und versucht, leider ohne Erfolg.
Ich will meinen Wechselrichter auslesen und dieser liefert die folgende XML Datei
http://10.68.0.44/measurements.xml
<?xml version="1.0" encoding="UTF-8"?>
-<root>
-<Device DateTime="2017-05-30T22:16:26" IpAddress="10.68.0.44" NetBiosName="INV0055XXXXXXX" BusAddress="1" Serial="7527XXXCCCCDDDD" Type="Inverter" Name="SF-WR-5503">
-<Measurements>
<Measurement Type="AC_Voltage1" Unit="V" Value="233.419"/>
<Measurement Type="AC_Voltage2" Unit="V" Value="234.959"/>
<Measurement Type="AC_Voltage3" Unit="V" Value="235.651"/>
<Measurement Type="AC_Frequency1" Unit="Hz" Value="49.983"/>
<Measurement Type="AC_Frequency2" Unit="Hz" Value="49.983"/>
<Measurement Type="AC_Frequency3" Unit="Hz" Value="49.985"/>
<Measurement Type="DC_Voltage" Unit="V" Value="0.100"/>
<Measurement Type="Temp" Unit="°C" Value="34.270"/>
</Measurements>
</Device>
</root>
es befinden sich unter Tages auch noch die AC_Power usw unter den Daten, aber alle im gleichen Format.
Das Einbinden in FHEM habe ich mit HTTPMOD gemacht und es liefert mir folgendes Ergebnis
TYPE HTTPMOD
addr http://10.68.0.144:80
buf HTTP/1.1 200 OK Content-Type: application/xml Cache-Control: No-Cache <?xml version='1.0' encoding='UTF-8'?><root><Device Name='SF-WR-5503' Type='Inverter' Serial='752794AB005' BusAddress='1' NetBiosName='INV00' IpAddress='10.68.0.44' DateTime='2017-05-30T22:02:10'><Measurements><Measurement Value='233.140' Unit='V' Type='AC_Voltage1'/><Measurement Value='234.777' Unit='V' Type='AC_Voltage2'/><Measurement Value='235.107' Unit='V' Type='AC_Voltage3'/><Measurement Value='50.018' Unit='Hz' Type='AC_Frequency1'/><Measurement Value='50.016' Unit='Hz' Type='AC_Frequency2'/><Measurement Value='50.016' Unit='Hz' Type='AC_Frequency3'/><Measurement Value='0.200' Unit='V' Type='DC_Voltage'/><Measurement Value='34.600' Unit='°C' Type='Temp'/></Measurements></Device></root>
code 200
conn
data
displayurl http://10.68.0.144/measurements.xml
soweit hab ich es hinbekommen, nur wie geht es weiter?
Ich will gerne einen bzw. 2-3 Werte auslesen und ev. ein Diagramm der Tagesleistung erzeugen.
oder den Leistungswert in Abhängigkeit von Datum/Temperatur für die RolloSteuerung verwenden......
ich würde mich über jede Hilfe freuen.
Danke
Robert
Zitatnur wie geht es weiter?
Mit reading[0-9]+Name und reading[0-9]+Regex, die Werte auslesen.
attr myHttpMod reading01Name AlternativeCurrentVoltage1
attr myHttpMod reading01Regex AC_Voltage1\" Unit=\"V\" Value=\"([\.\d]+)
attr myHttpMod reading02Name DirectCurrent
attr myHttpMod reading02Regex DC_Voltage\" Unit=\"V\" Value=\"([\.\d]+)
Es ist mir nicht klar, ob dein HTTPMOD die Textdelimiter " oder ' nutzt. Ggf. entspr. anpassen
Hallo amenomade,
danke für deine Hilfe
ich habe nun folgende attr eingetragen:
define PV_WR HTTPMOD http://10.68.0.144/measurements.xml 60
attr PV_WR userattr reading01Name reading01Regex reading02Name reading02Regex readingsName_AC_Power
attr PV_WR reading01Name AC_Power
attr PV_WR reading01Regex AC_Power\' Unit=\'W\' Value=\'([\.\d]+)
die aktuelle XML liefert folgendes, auszug aus dem list
CHANGED
DEF http://10.68.0.44/measurements.xml 60
Interval 60
LASTSEND 1496211235.57907
MainURL http://10.68.0.44/measurements.xml
ModuleVersion 3.3.11 - 8.5.2017
NAME PV_WR
NR 172
STATE ???
TRIGGERTIME 1496211295.57777
TRIGGERTIME_FMT 2017-05-31 08:14:55
TYPE HTTPMOD
addr http://10.68.0.44:80
buf HTTP/1.1 200 OK
Content-Type: application/xml
Cache-Control: No-Cache
<?xml version='1.0' encoding='UTF-8'?><root><Device Name='SF-WR-5503' Type='Inverter' Serial='752794' BusAddress='1' NetBiosName='INV09' IpAddress='10.68.0.44' DateTime='2017-05-31T07:49:54'><Measurements><Measurement Value='232.685' Unit='V' Type='AC_Voltage1'/><Measurement Value='233.261' Unit='V' Type='AC_Voltage2'/><Measurement Value='233.908' Unit='V' Type='AC_Voltage3'/><Measurement Value='1.231' Unit='A' Type='AC_Current1'/><Measurement Value='1.213' Unit='A' Type='AC_Current2'/><Measurement Value='1.214' Unit='A' Type='AC_Current3'/><Measurement Value='849.669' Unit='W' Type='AC_Power'/><Measurement Value='286.478' Unit='W' Type='AC_Power1'/><Measurement Value='283.167' Unit='W' Type='AC_Power2'/><Measurement Value='283.575' Unit='W' Type='AC_Power3'/><Measurement Value='49.995' Unit='Hz' Type='AC_Frequency1'/><Measurement Value='50.019' Unit='Hz' Type='AC_Frequency2'/><Measurement Value='50.018' Unit='Hz' Type='AC_Frequency3'/><Measurement Value='506.500' Unit='V' Type='DC_Voltage'/><Measurement Value='1.711' Unit='A' Type='DC_Current'/><Measurement Value='866.621' Unit='W' Type='DC_Power'/><Measurement Value='49.930' Unit='°C' Type='Temp'/></Measurements></Device></root>
code 200
conn
data
displayurl http://10.68.0.44/measurements.xml
header
host 10.68.0.44
httpheader HTTP/1.1 200 OK
Content-Type: application/xml
Cache-Control: No-Cache
httpversion 1.0
hu_blocking 0
hu_filecount 10
hu_portSfx
ignoreredirects 0
loglevel 4
path /measurements.xml
protocol http
redirects 0
timeout 2
url http://10.68.0.44/measurements.xml
value 0
QUEUE:
Readings:
Request:
data
header
ignoreredirects 0
retryCount 0
type update
url http://10.68.0.44/measurements.xml
value 0
Sslargs:
Attributes:
reading01Name AC_Power
reading01Regex AC_Power\' Unit=\'W\' Value=\'([\.\d]+)
reading02Name AlternativeCurrentVoltage1
reading02Regex AC_Voltage1\' Unit=\'V\' Value=\'([\.\d]+)
readingsName_AC_Power AC_Power
room 8.1.Aussen,9.1.Geräte,9.9.System
userattr reading01Name reading01Regex reading02Name reading02Regex readingsName_AC_Power
es kommen keine Fehlermeldungen aber auch keine Werte?
ich bin was FHEM angeht doch noch ein Anfänger, leider.
kannst du mir bitte eine Codezeile für meinen Fall erstellen, den Rest sollte ich hoffentlich dann selbstständig hin bekommen :(
Danke
AC_Voltage1\'\/><Measurement Value=\'([\.\d]+)
Du kannst deine Regex auf dieser Seite testen: https://regex101.com/
Trag deine XML Daten in TEST STRING ein, und die Regex in REGULAR EXPRESSION.
Dann kannst Du gucken, wie er matcht und was er extrahiert.
Die obere Regex matcht
ZitatAC_Voltage1'/><Measurement Value='
und extrahiert dann die nachfolgende Zahlen oder Punkte.
Wenn Du deine Maus durch die Regex bewegst, wird jede Einzelheit erklärt
Bildschirmkopie
Danke amenomade
funktioniert!