Solutronic Wechselrichter abfragen (HTTPMOD)

Begonnen von Forstling, 20 Mai 2023, 21:08:49

Vorheriges Thema - Nächstes Thema

Forstling

Hallo

Ich habe einen relativ alten Wechselrichter, von dem ich gern ein paar Daten hätte.

Auf den Wechselrichter kann man über HTTP zugreifen. Ich würde gern die Leistung und noch ein paar weitere Daten abfragen.
Im Log kommt folgendes an:
2023.05.20 20:14:27 4: Wechselrichter_alt2: GetUpdate called (update)
2023.05.20 20:14:27 4: Wechselrichter_alt2: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 10.0 sec at 20:14:37.701, interval 10
2023.05.20 20:14:27 5: Wechselrichter_alt2: AddToQueue adds type update to URL http://192.168.178.10/p3.html, no data, no headers, retry 0, initial queue len: 0
2023.05.20 20:14:27 5: Wechselrichter_alt2: HandleSendQueue called from AddToSendQueue, qlen = 1
2023.05.20 20:14:27 4: Wechselrichter_alt2: HandleSendQueue sends update with timeout 2 to http://192.168.178.10/p3.html, No Data, No Header
2023.05.20 20:14:27 5: Wechselrichter_alt2: ReadCallback called from __ANON__
2023.05.20 20:14:27 4: Wechselrichter_alt2: Read callback: request type was update retry 0,
header: HTTP/1.0 200 OK
Content-Type: text/html, body length 2557
2023.05.20 20:14:27 5: Wechselrichter_alt2: Read callback: body
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Solutronic AG Solarwechselrichter </title></head><body text="#FFFF00" bgcolor="#FF6633" link="#0000EE" vlink="#551A8B" alink="#FF0000"><DIV style="font-family:sans-serif"<b><i><font color="#FFFFFF" size="+3"><img src="http://www.solutronic.de/files/mini_logo.png" width="234" height="58" alt="Solutronic AG"></font></i>Webserver für SOLPLUS   </b><hr>
<TABLE border=0 cellSpacing=0 cellPadding=3><tr><td valign="top" rowspan="2"><tr><a href=index.html>Grundmen�</a> - <a href=p1.html>Eingang/Ausgang</a> - <a href=p2.html>Wechselrichter</a> - <font color="#50000B"><i> Ertrags�berwachung/Anlagendaten</i></font> - <a href=p4.html>Sensorik</a>   </tr><br><hr><tr><a href=p5.html>Ger�te-/Leistungskonfiguration</a> - <a href=p7.html>Sicherheit</a> - <a href=p6.html>Kommunikation</a> - <a href=p8.html> Datenlogger</a> - <a href=p9.html>Ertragskontrolle/Sensor-Konfiguration</a> - <a href=p11.html>Optionen/�berwachung</a> - <a href=p10.html>Ausgangs-Steuerung</a> - <a href=p12.html>Datensicherung</a></tr></TABLE><hr>
<TABLE border=3 cellSpacing=0 cellPadding=3><tr><td><TABLE border=3 cellPadding=3><TR><TD>Energie Tag</TD><TD>11.272 kWh</TD></TR><TR><TD>Energie Woche</TD><TD> 34 kWh</TD></TR><TR><TD>Energie Monat</TD><TD> 153 kWh</TD></TR><TR><TD>Energie Jahr</TD><TD>  195 kWh</TD></TR><TR><TD>Energie Gesamt</TD><TD> 36098 kWh</TD></TR><TR><TD>Euro-Betrag Heute</TD><TD>    2.16 €</TD></TR><TR><TD>Euro-Betrag Gesamt</TD><TD>  6945 €</TD></TR><TR><TD>Leistung Sensor</TD><TD>     0 W</TD></TR><TR><TD>Sensor-Energie Tag</TD><TD>      0 kWh</TD></TR><TR><TD>Sensor-Energie Gesamt</TD><TD>     0 kWh</TD></TR><TR><TD>S0-Zähler Leistung</TD><TD>     0 W</TD></TR><TR><TD>S0-Zähler Energie Tag</TD><TD>     0.000 kWh</TD></TR><TR><TD>S0-Zähler Energie</TD><TD>        0 kWh</TD></TR><TR><TD>S0-Zähler Pulse Heute</TD><TD>        0</TD></TR><TR><TD>S0-Zähler Puls</TD><TD>        0</TD></TR><TR><TD>De-Icing Energie Tag</TD><TD> 0.000 kWh</TD></TR><TR><TD>De-Icing Energie Gesamt</TD><TD>    0 kWh</TD></TR><TR><TD>BM-Zähler Leistungsreduktion</TD><TD>      0 min</TD></TR></TABLE></td><td valign="top"><TABLE border=3 cellPadding=3><TR><TD>Leistung AC Anlage</TD><TD>     0 W</TD></TR><TR><TD>Energie der Anlage Heute</TD><TD> 11272 Wh</TD></TR><TR><TD>Energie Gesamt Anlage</TD><TD> 36098 kWh</TD></TR><TR><TD>CO2-Ersparnis Gesamt</TD><TD> 27073 kg</TD></TR></TABLE></DIV></body></html>
2023.05.20 20:14:27 4: Wechselrichter_alt2: BodyDecode is not decoding the response body (charset not found, bodyDecode defaults to none)
2023.05.20 20:14:27 5: Wechselrichter_alt2: GetCookies is looking for Cookies
2023.05.20 20:14:27 5: Wechselrichter_alt2: ExtractSid called, context reading, num unknown
2023.05.20 20:14:27 4: Wechselrichter_alt2: checking for redirects, code=200, ignore=0
2023.05.20 20:14:27 4: Wechselrichter_alt2: no redirects to handle
2023.05.20 20:14:27 5: Wechselrichter_alt2: Read callback sets LAST_REQUEST to update
2023.05.20 20:14:27 5: Wechselrichter_alt2: CheckAuth decided no authentication required
2023.05.20 20:14:27 5: Wechselrichter_alt2: Read starts parsing response to update with defined readings:
2023.05.20 20:14:27 4: Wechselrichter_alt2: Read response to update didn't match any Reading
2023.05.20 20:14:27 5: Wechselrichter_alt2: HandleSendQueue called from ReadCallback, qlen = 0
2023.05.20 20:14:27 5: Wechselrichter_alt2: HandleSendQueue found no usable entry in queue

Mich interessieren:
Energie Gesamt</TD><TD> 36098 kWh
oder
Leistung AC Anlage</TD><TD>     0 W

Aktuell sieht meine Config sieht derzeit noch so aus.
defmod Wechselrichter_alt2 HTTPMOD http://192.168.178.10/p3.html 10
attr Wechselrichter_alt2 DbLogExclude .*
attr Wechselrichter_alt2 room PV
attr Wechselrichter_alt2 verbose 0


Im Browser sieht es aus wie auf dem Bild im Anhang.
weiß jemand wie ich die Daten auslesen kann?

Forstling

Hallo

aktuell sieht es so aus als würde mein FHEM die Werte nicht richtig erkennen. Es zeigt immer nur 1 als reading an.

Die Rohdefinition sieht jetzt so aus:
defmod Wechselrichter_alt2 HTTPMOD http://192.168.178.10/p3.html 10
attr Wechselrichter_alt2 DbLogExclude .*
attr Wechselrichter_alt2 bodyEncode utf8
attr Wechselrichter_alt2 reading01Name Leistung AC Anlage
attr Wechselrichter_alt2 reading01Regex Anlage Heute</TD><TD>
attr Wechselrichter_alt2 reading02Name Energie Gesamt
attr Wechselrichter_alt2 reading02Regex Energie Gesamt</TD><TD>
attr Wechselrichter_alt2 room PV
attr Wechselrichter_alt2 showBody 1
attr Wechselrichter_alt2 verbose 0

im Logfiel sieht es so aus:
2023.05.23 19:08:06 4: Wechselrichter_alt2: GetUpdate called (update)
2023.05.23 19:08:06 4: Wechselrichter_alt2: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 10.0 sec at 19:08:16.468, interval 10
2023.05.23 19:08:06 5: Wechselrichter_alt2: AddToQueue adds type update to URL http://192.168.178.10/p3.html, no data, no headers, retry 0, initial queue len: 0
2023.05.23 19:08:06 5: Wechselrichter_alt2: HandleSendQueue called from AddToSendQueue, qlen = 1
2023.05.23 19:08:06 4: Wechselrichter_alt2: HandleSendQueue sends update with timeout 2 to http://192.168.178.10/p3.html, No Data, No Header
2023.05.23 19:08:06 5: Wechselrichter_alt2: ReadCallback called from __ANON__
2023.05.23 19:08:06 4: Wechselrichter_alt2: Read callback: request type was update retry 0,
header: HTTP/1.0 200 OK
Content-Type: text/html, body length 2557
2023.05.23 19:08:06 5: Wechselrichter_alt2: Read callback: body
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Solutronic AG Solarwechselrichter </title></head><body text="#FFFF00" bgcolor="#FF6633" link="#0000EE" vlink="#551A8B" alink="#FF0000"><DIV style="font-family:sans-serif"<b><i><font color="#FFFFFF" size="+3"><img src="http://www.solutronic.de/files/mini_logo.png" width="234" height="58" alt="Solutronic AG"></font></i>Webserver für SOLPLUS   </b><hr>
<TABLE border=0 cellSpacing=0 cellPadding=3><tr><td valign="top" rowspan="2"><tr><a href=index.html>Grundmen�</a> - <a href=p1.html>Eingang/Ausgang</a> - <a href=p2.html>Wechselrichter</a> - <font color="#50000B"><i> Ertrags�berwachung/Anlagendaten</i></font> - <a href=p4.html>Sensorik</a>   </tr><br><hr><tr><a href=p5.html>Ger�te-/Leistungskonfiguration</a> - <a href=p7.html>Sicherheit</a> - <a href=p6.html>Kommunikation</a> - <a href=p8.html> Datenlogger</a> - <a href=p9.html>Ertragskontrolle/Sensor-Konfiguration</a> - <a href=p11.html>Optionen/�berwachung</a> - <a href=p10.html>Ausgangs-Steuerung</a> - <a href=p12.html>Datensicherung</a></tr></TABLE><hr>
<TABLE border=3 cellSpacing=0 cellPadding=3><tr><td><TABLE border=3 cellPadding=3><TR><TD>Energie Tag</TD><TD> 2.173 kWh</TD></TR><TR><TD>Energie Woche</TD><TD> 12 kWh</TD></TR><TR><TD>Energie Monat</TD><TD> 177 kWh</TD></TR><TR><TD>Energie Jahr</TD><TD>  218 kWh</TD></TR><TR><TD>Energie Gesamt</TD><TD> 36122 kWh</TD></TR><TR><TD>Euro-Betrag Heute</TD><TD>    0.41 €</TD></TR><TR><TD>Euro-Betrag Gesamt</TD><TD>  6949 €</TD></TR><TR><TD>Leistung Sensor</TD><TD>     0 W</TD></TR><TR><TD>Sensor-Energie Tag</TD><TD>      0 kWh</TD></TR><TR><TD>Sensor-Energie Gesamt</TD><TD>     0 kWh</TD></TR><TR><TD>S0-Zähler Leistung</TD><TD>     0 W</TD></TR><TR><TD>S0-Zähler Energie Tag</TD><TD>     0.000 kWh</TD></TR><TR><TD>S0-Zähler Energie</TD><TD>        0 kWh</TD></TR><TR><TD>S0-Zähler Pulse Heute</TD><TD>        0</TD></TR><TR><TD>S0-Zähler Puls</TD><TD>        0</TD></TR><TR><TD>De-Icing Energie Tag</TD><TD> 0.000 kWh</TD></TR><TR><TD>De-Icing Energie Gesamt</TD><TD>    0 kWh</TD></TR><TR><TD>BM-Zähler Leistungsreduktion</TD><TD>      0 min</TD></TR></TABLE></td><td valign="top"><TABLE border=3 cellPadding=3><TR><TD>Leistung AC Anlage</TD><TD>     0 W</TD></TR><TR><TD>Energie der Anlage Heute</TD><TD>  2173 Wh</TD></TR><TR><TD>Energie Gesamt Anlage</TD><TD> 36122 kWh</TD></TR><TR><TD>CO2-Ersparnis Gesamt</TD><TD> 27091 kg</TD></TR></TABLE></DIV></body></html>
2023.05.23 19:08:06 4: Wechselrichter_alt2: BodyDecode is decoding the response body as utf8 but charset header is not found
2023.05.23 19:08:06 5: Wechselrichter_alt2: GetCookies is looking for Cookies
2023.05.23 19:08:06 5: Wechselrichter_alt2: ExtractSid called, context reading, num unknown
2023.05.23 19:08:06 4: Wechselrichter_alt2: checking for redirects, code=200, ignore=0
2023.05.23 19:08:06 4: Wechselrichter_alt2: no redirects to handle
2023.05.23 19:08:06 5: Wechselrichter_alt2: Read callback sets LAST_REQUEST to update
2023.05.23 19:08:06 5: Wechselrichter_alt2: CheckAuth decided no authentication required
2023.05.23 19:08:06 5: Wechselrichter_alt2: Read starts parsing response to update with defined readings: 01,02
2023.05.23 19:08:06 5: Wechselrichter_alt2: ExtractReading Leistung AC Anlage with regex /(?^:Anlage Heute</TD><TD>)/...
2023.05.23 19:08:06 5: Wechselrichter_alt2: FormatReading is encoding the reading value as utf-8 because no encoding was specified and the response body charset was unknown or decoded
2023.05.23 19:08:06 5: Wechselrichter_alt2: ExtractReading for reading01-1 sets Leistung AC Anlage to 1
2023.05.23 19:08:06 5: Wechselrichter_alt2: ExtractReading value as hex is 31
2023.05.23 19:08:06 5: Wechselrichter_alt2: ExtractReading Energie Gesamt with regex /(?^:Energie Gesamt</TD><TD>)/...
2023.05.23 19:08:06 5: Wechselrichter_alt2: FormatReading is encoding the reading value as utf-8 because no encoding was specified and the response body charset was unknown or decoded
2023.05.23 19:08:06 5: Wechselrichter_alt2: ExtractReading for reading02-1 sets Energie Gesamt to 1
2023.05.23 19:08:06 5: Wechselrichter_alt2: ExtractReading value as hex is 31
2023.05.23 19:08:06 4: Wechselrichter_alt2: Read response matched 2, unmatch 0 Reading(s)
2023.05.23 19:08:06 5: Wechselrichter_alt2: Read response to update matched Leistung AC Anlage Energie Gesamt
2023.05.23 19:08:06 5: Wechselrichter_alt2: HandleSendQueue called from ReadCallback, qlen = 0
2023.05.23 19:08:06 5: Wechselrichter_alt2: HandleSendQueue found no usable entry in queue
2023.05.23 19:08:08 5: Wechselrichter_alt2: attr Wechselrichter_alt2 verbose 0

Kan mir jemand weiter helfen.

ch.eick

#2
Moin,
Deine regex ist nicht richtig.

Hier mal ein Muster, getestet auf regex101.com
attr Wechselrichter_alt2 reading01Regex Anlage Heute<\/TD><TD> +([\d]+) Wh.*Energie Gesamt Anlage
Zur Erklärung der regex:
- suche "Anlage Heute<\/TD><TD>"
- danach können 1 oder mehrere Blanks kommen
- in der Gruppe lese 1 oder mehrere Dezimal Ziffern

Jetzt kommt eins Deiner Probleme, denn nach diesem Wert können noch ander Werte kommen, weshalb Du die reges eindeutig stoppen musst.

- es kommt ein Blank
- gefolgt von Wh
- danach beliebige Zeichen
- und eindeutig "Energie Gesamt Anlage" , was die regex dann eindeutig beendet.

Sollte anstelle von "Wh" dort auch "kWh" stehen können, dann müsste das noch variabel geändert werden.

Dann noch der zweite Wert, der mit Deinem String aber mehrfach vorkommen könnte.
Deshalb wird er exact bei <TD> begonnen und mit "Euro-Betrag Heute" beendet.
Auch das Wh oder kWh ist mit k* erledigt.
<TD>Energie Gesamt<\/TD><TD> +([\d]+) k*Wh.*Euro-Betrag Heute

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Forstling

Danke für die Erklärung.
Das mit den regex hatte ich vorher nicht verstanden. Bisher hatte ich glück das ich mir das irgengwoher kopieren konnte.

Jetzt funktioniert es und ich bekomme alle DAten aus dem Text die ich brauche. (und mehr.)