HTTPMOD für Regenwassertank

Begonnen von JTK, 24 Mai 2025, 20:36:15

Vorheriges Thema - Nächstes Thema

JTK

Hallo zusammen,

ich kämpfe seit einiger Zeit verzweifelt mit HTTPMOD. Ich möchte damit dem Füllstand meines Regenwassertanks auslesen.

So sehen meine bisherigen Versuche aus:
defmod Regenwassertank HTTPMOD http://192.168.178.8/ 43200
attr Regenwassertank enableControlSet 1
attr Regenwassertank enableCookies 1
attr Regenwassertank handleRedirects 1
attr Regenwassertank httpVersion 1.0
attr Regenwassertank reading01Name Rewa_Liter
attr Regenwassertank reading01Regex Regenwasser<.td>\n<td class=B align=right>.([\d]+)
attr Regenwassertank room HTTPMOD,Keller,Technik,Test
attr Regenwassertank showBody 1
attr Regenwassertank stateFormat Rewa_Liter
attr Regenwassertank verbose 5

setstate Regenwassertank Rewa_Liter

Ich bekomme auch folgendes Ergebnis
Internals
.LASTSEND
1748111430.56209
.LastUpdate
1748111430.56196
.TRIGGERTIME
1748154630.56196
.getList
.setList
interval reread:noArg stop:noArg start:noArg clearCookies:noArg upgradeAttributes:noArg storeKeyValue
.updateReadingList
1
.updateRequestHash
1
BUSY
0
DEF
http://192.168.178.8/ 43200
FUUID
65ff0740-f33f-3e5d-49a0-07b0f3690ef2417d
Interval
43200
MainURL
http://192.168.178.8/
ModuleVersion
4.2.0 - 11.8.2023
NAME
Regenwassertank
NOTIFYDEV
global
NR
59
NTFY_ORDER
50-Regenwassertank
STATE
Rewa_Liter
TYPE
HTTPMOD
eventCount
18
httpbody
<html>
<head>
<title>unter Terrasse</title>
<style>
BODY{font-family:Arial;color:black;background-color:grey}
h2{color:navy}
td{font-size:11pt;white-space:nowrap}
.B{font-weight:bold;color:navy}
.RED{font-weight:bold;color:red}
</style>
</head>

<body>
<table border=4 align=center bgcolor=silver>
<tr>
<td>
<table width=100%>
<tr>
<td align=left><h2>GOK / Tecson</h2>
</td>
<td align=right valign=top><form action=Config><input name=x type=submit value=Config />
</form>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=8>
<tr>
<td class=B>Betreiber:</td>
<td>Klein</td>
</tr>
<tr>
<td class=B>Standort:</td>
<td>unter Terrasse</td>
</tr>
<tr>
<td class=B>Ger&auml;te-ID:</td>
<td>2-115</td>
</tr>
</table>

<p></p>

<table cellspacing=5 cellpadding=8>
<tr>
<td>Tank-Nr.</td>
<td>Bezeichnung</td>
<td align=right>Bestand</td>
<td>in %</td>
<td align=right>Tankgr&ouml;&szlig;e</td>
<td align=right>Freiraum</td>

</tr>
<tr>
<td><hr />
</td>
<td><hr />
</td>
<td><hr />
</td>
<td><hr />
</td>
<td><hr />
</td>
<td><hr />
</td>

</tr>

<tr>
<td>Tank 1:</td>
<td>Regenwasser</td>
<td class=B align=right> 795 L</td>
<td class=B align=right>26 %</td>
<td align=right>3.000 L</td>
<td align=right>2.205 L</td>

</tr>


</table>

<p></p>

<table cellspacing=5 cellpadding=8>


<tr>
<td>Relaisausgang:</td>
<td>Aus</td>
</tr>

</table>

</td>
</tr>
</table>
</body>
</html>
value

Nun möchte ich gerne die 795 Liter als Ergebnis angezeigt bekommen. Mit regex101 funktioniert der Regex-Eintrag und es wird als Group1 die Literzahl angezeigt. Aber leider bekomme ich die anscheinend nicht in die Variabel Rewa_Liter. Was mache ich falsch?

Viele Grüße
Thomas

Guybrush

Regenwasser\D+(\d+)\sL

ungetestet aber müsste gehen

JTK

Super, funktioniert. Herzlichen Dank

JTK

Entschuldigt die erneute Nachfrage:
Die Lösung von Guybrush hat Ende Mai hervorragend funktioniert. In FHEM und auch auf der regex101-Testseite. Und jetzt geht es nicht mehr. Da sich an der gelesenen Webseite (Webserver eines Tankmesssystems) eigentlich nichts geändert haben kann, bleibt mir nur der Verdacht, daß ich mir was mit einem FHEM Update eingefangen habe (hatte ich vor ein paar Tagen gemacht, weil ich mich mal mit ESP32 und MQTT beschäftigen wollte).

Ich habe mal auf Verbose 5 gestellt und bekomme diese Infos
2025.06.09 09:18:43 4: Regenwassertank: GetUpdate called (update)
2025.06.09 09:18:43 4: Regenwassertank: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 60.0 sec at 09:19:43.082, interval 60
2025.06.09 09:18:43 5: Regenwassertank: AddToQueue adds type update to URL http://192.168.178.8/, no data, no headers, retry 0, initial queue len: 0
2025.06.09 09:18:43 5: Regenwassertank: HandleSendQueue called from AddToSendQueue, qlen = 1
2025.06.09 09:18:43 5: Regenwassertank: no separator for multiple values (Context update, unknown)
2025.06.09 09:18:43 4: Regenwassertank: HandleSendQueue sends update with timeout 2 to http://192.168.178.8/, No Data, No Header
2025.06.09 09:18:43 5: Regenwassertank: ReadCallback called from __ANON__
2025.06.09 09:18:43 4: Regenwassertank: Read callback: request type was update retry 0, header: HTTP/1.0 200 OK, body length 1472
2025.06.09 09:18:43 5: Regenwassertank: Read callback: body <html> <head> <title>unter Terrasse</title> <style> BODY{font-family:Arial;color:black;background-color:grey} h2{color:navy} td{font-size:11pt;white-space:nowrap} .B{font-weight:bold;color:navy} .RED{font-weight:bold;color:red} </style> </head> <body> <table border=4 align=center bgcolor=silver> <tr> <td> <table width=100%> <tr> <td align=left><h2>GOK / Tecson</h2> </td> <td align=right valign=top><form action=Config><input name=x type=submit value=Config /> </form> </td> </tr> </table> <table cellspacing=5 cellpadding=8> <tr> <td class=B>Betreiber:</td> <td>Klein</td> </tr> <tr> <td class=B>Standort:</td> <td>unter Terrasse</td> </tr> <tr> <td class=B>Ger&auml;te-ID:</td> <td>2-115</td> </tr> </table> <p></p> <table cellspacing=5 cellpadding=8> <tr> <td>Tank-Nr.</td> <td>Bezeichnung</td> <td align=right>Bestand</td> <td>in %</td> <td align=right>Tankgr&ouml;&szlig;e</td> <td align=right>Freiraum</td> </tr> <tr> <td><hr /> </td> <td><hr /> </td> <td><hr /> </td> <td><hr /> </td> <td><hr /> </td> <td><hr /> </td> </tr> <tr> <td>Tank 1:</td> <td>Regenwasser</td> <td class=B align=right>2.995 L</td> <td class=B align=right>100 %</td> <td align=right>3.000 L</td> <td align=right> 5 L</td> </tr> </table> <p></p> <table cellspacing=5 cellpadding=8> <tr> <td>Relaisausgang:</td> <td>Aus</td> </tr> </table> </td> </tr> </table> </body> </html>
2025.06.09 09:18:43 4: Regenwassertank: BodyDecode is not decoding the response body (charset not found, bodyDecode defaults to none)
2025.06.09 09:18:43 5: Regenwassertank: GetCookies is looking for Cookies
2025.06.09 09:18:43 5: Regenwassertank: ExtractSid called, context reading, num unknown
2025.06.09 09:18:43 4: Regenwassertank: checking for redirects, code=200, ignore=0
2025.06.09 09:18:43 4: Regenwassertank: no redirects to handle
2025.06.09 09:18:43 5: Regenwassertank: Read callback sets LAST_REQUEST to update
2025.06.09 09:18:43 5: Regenwassertank: CheckAuth decided no authentication required
2025.06.09 09:18:43 5: Regenwassertank: Read starts parsing response to update with defined readings: 01
2025.06.09 09:18:43 5: Regenwassertank: ExtractReading reading01 with regex /(?^:Regenwasser\D+(\d+)\sL\D+(\d+)\s%)/...
2025.06.09 09:18:43 5: Regenwassertank: ExtractReading reading01 did not match
2025.06.09 09:18:43 4: Regenwassertank: Read response to update didn't match any Reading
2025.06.09 09:18:43 5: Regenwassertank: HandleSendQueue called from ReadCallback, qlen = 0
2025.06.09 09:18:43 5: Regenwassertank: HandleSendQueue found no usable entry in queue

Zum einen scheint wohl was mit dem BodyDecode nicht zu stimmen, zum anderen geht die vorgeschlagene Regex nicht mehr. Erstaunlicherweise auf einmal auch auf der regex101-Seite nicht mehr.

Ich bin etwas verwirrt. Hat einer eine Idee.

Viele Grüße
Thomas

Guybrush

/(?^:Regenwasser\D+(\d+)\sL\D+(\d+)\s%)/
das ist wohl der grund. die regex ist eine ganz andere?

JTK

Also das /(?^: vor Regenwasser steht nicht in der Regex und der Slash am Ende auch nicht. Wo kommen die her.
Außerdem funktioniert ja Dein Vorschlag von Ende Mai auch nicht mehr, damals hat er perfekt funktioniert und ich konnte sogar mit Deiner Systematik den zweiten Wert für die Prozentzahl auslesen. Aber jetzt gehen beide auch nicht mehr auf der Regex101 Webseite??

Ich habe den komischen Verdacht, dass es was mit der Meldung "BodyDecode is not decoding the response body (charset not found, bodyDecode defaults to none)" zu tun haben könnte. Vielleicht habe ich da was globales zerschossen. Habe aber keine Ahnung, was.

Guybrush

das ist der Tausenderpunkt, der da nun drin ist.

dann musst du die regex ändern auf
Regenwasser\D+([0-9\.]+)\sL

JTK

#7
Ok, Du warst schneller wie ich. Mir ist auch gerade der Tausender-Punkt aufgefallen. Ich wollte gerade danach fragen.

Edit: funktioniert so wieder!
Erklärung für später Suchende: Also lag es nicht an FHEM, sondern daran, daß es geregnet hat und der Wert über Tausend gestiegen ist und die Tankwebseite einen Tausenderpunkt eingefügt hat.
Danke Guybrush für die Hilfe