Hi,
ich versuche gerade eine Website von einem Wiesemann&Theiss Thermometer auszulesen. Aber ich komme dabei nicht weiter.
Der Code:
define Servertemp HTTPMOD http://192.200.100.90/User.htm 600
attr Servertemp readingsName_Temp STemp
attr Servertemp readingsRegex_Temp <td class="bgAnLRed">Sensor)
attr Servertemp room System
attr Servertemp stateFormat STemp
attr Dieselpreis timeout 5
Das List:
Internals:
CHANGED
DEF http://192.200.100.90/User.htm 600
Interval 600
NAME Servertemp
NR 60
STATE STemp
TYPE HTTPMOD
addr http://192.200.100.90:80
buf HTTP/1.0 200 OK
Date: Mon, 21 Jul 2014 13:28:57 UTC
Last-Modified: Mon, 21 Jul 2014 13:28:56 UTC
Expires: Mon, 21 Jul 2014 13:28:57 UTC
Content-Length: 2808
Content-Type: text/html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="style.css" type="text/css">
<title>USERUP</title>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="600" align="center">
<tr><td colspan="3" align="center" class="size5"><b>User.htm</b></td></tr>
<tr><td colspan="3" align="center" class="size5"><b>Serverraum</b></td></tr>
<tr><td colspan="3" align="center" class="size4"> </td></tr>
<tr><td colspan="3"> </td></tr>
<tr><td colspan="3" align="right"><p>last update: Mo, KW30,<br>21.07.2014 15:28:57 * (UTC +02)</p></td></tr>
<tr>
<td colspan="3" align="center">
<table border="2">
<tr>
<th><a href="info.htm?Ili=0&Ref=user.htm?Vpos=11669&DTb=0&">Sensor 1</a></th>
</tr>
<tr>
<td class="bgAnLRed">27,6 �C</td>
</tr>
<tr>
<th align="center">ΔT</th>
</tr>
<tr>
<td align="center" > 0,0 �C/min</td>
</tr>
</table></td>
</tr>
<tr>
<td align="center" colspan="3"> </td>
</tr>
<tr>
<td colspan="3" align="center" class="size3"><b>Data Logger</b></td>
</tr>
<tr>
<td colspan="3" align="center">
<table border="1">
<tr><td>
<form action="log.htm" method="POST" >
<table border="0" cellpadding="5%">
<tr>
<td align="center"><b>Ausgabe Datalogger</b></td>
</tr>
<tr>
<td align="center"><select name="DTb" size="1"><option selected value="4"> 60 Min</option></select></td>
</tr>
<tr>
<td align="center">
<input type="hidden" name="B2" value=" OK "><input type="submit" name="B4" value=" OK ">
</td>
</tr>
</table></form>
</td>
<td>
<form action="thermo.csv" method="POST" >
<table border="0" cellpadding="5%">
<tr>
<td align="center"><b>Download Excelformat</b></td>
</tr>
<tr>
<td align="center"><select name="DTb" size="1"><option selected value="4"> 60 Min</option></select></td>
</tr>
<tr>
<td align="center">
<input type="hidden" name="B2" value=" OK "><input type="submit" name="B4" value=" OK ">
</td>
</tr>
</table></form>
</td></tr>
</table>
</td>
</tr>
<tr><td align="center" colspan="3"><br><br><form action="user.htm" method="GET" ><input type="hidden" name="DTb" value="0"><input type="hidden" name="Vpos" value="11669"><input type="hidden" name="B2" value="Reload"><input type="submit" name="B4" value="Reload"></form></td></tr>
<tr><td align="center" colspan="3"><br><br><a href="index.htm" target="_top">zurück zur Web-Thermograph Homepage</a></td></tr>
</table>
</body>
</html>
code 200
conn
displayurl http://192.200.100.90/User.htm
host 192.200.100.90
loglevel 4
path /User.htm
protocol http
redirects 0
timeout 2
url http://192.200.100.90/User.htm
Readings:
Attributes:
readingsName_Temp STemp
readingsRegex_Temp <td class="bgAnLRed">STemp[^0-9]+([0-9\.]+)
room System
stateFormat STemp
timeout 5
Es soll die Temperatur angezeigt werden
versuche das:
attr Servertemp readingsRegex_Temp <td class="bgAnLRed">(.*)</td>
ok,
funktioniert fast ;)
Es wird nun
27,6 �C
angezeigt. Das Fragezeichen steht anscheinend für das Gradzeichen. Wie bekomme ich das noch weg ?
du hast doch sicherlich bemerkt, dass der text der durch "(.*)" ausgeblendet wird, in dein reading übernommen wird. wenn du weniger in deinem reading haben willst, musst du weniger ausblenden.
<td class="bgAnLRed">(.*) �C</td>
jetzt bekommst du nur den wert. die einheiten fügst du dann selber nach deinem geschmack zur "anzeige" hinzu.
attr Servertemp stateFormat meine_temperatur:STemp °C
Das funktioniert bei mir nicht. Es wird dann
meine_temperatur:27,7 �C °C
angezeigt
attr Servertemp readingsRegex_Temp <td class="bgAnLRed">(.*) �C</td>
Hallo,
da du 3 Stellen in deinem Reading haben willst kannst du ja auch (...) verwenden, oder nicht?
Wenn allerdings das Komma als ein Zeichen zählt musst du natürlich 4 Punkte machen.
Versuchs doch einfach mal.
Grüsse
versuch es mal so: <td class="bgAnLRed">.*([\d.]*).*</td>
gruss
andre
hattest du denn auch 600 sekunden nach der änderung auf ein neues reading gewartet? ich glaube nicht. ;)
Ich hatte gewartet. Habe es nun aber auf 60 Sekunden gesetzt
Fhem kann das � Zeichen nicht verarbeiten. Beide Versionen von oben ergeben:
HTTPMOD: Response didn't match Reading(s) STemp
Servertemp müsste mit einer Art Stringoperation bearbeitet werden so wie lstrg(4). Aber leider kenne ich zu wenig Perl um dies zu realisieren.
Die Funktion wäre :
{
$Zeichen[$i] = substr($Satz,$i,1);
}
Aber wie das einbauen ?????????????????????????????????????
Hallo,
Eine Nachbearbeitung der Werte kann man mit ReadingsExpr machen.
Ist leider im Wiki noch nicht drin.
attr Servertemp readingsExpr_Temp substr($val, 1, 3)
oder ähnlich.
Naheliegender wäre es aber die Regex richtig hinzubiegen.
Die bisher genannten Beispiele sollten eigentlich funktionieren.
Gruß
Stefan
Die folgende Funktion brachte den Erfolg
attr Servertemp readingsExpr_Temp substr($val, 0, 4)
Danke