Skip to content

Commit

Permalink
Merge pull request #32 from nielstron/feature_neg_values
Browse files Browse the repository at this point in the history
Correctly handle negative values
  • Loading branch information
nielstron committed Jan 8, 2021
2 parents 2563656 + ad6a3e0 commit 11ca9e3
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 15 deletions.
19 changes: 12 additions & 7 deletions pyblnet/blnet_web.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,16 +198,20 @@ def read_analog_values(self):

# search for data by regular expression
match_iter = re.finditer(
r"(?P<id>\d+):&nbsp;(?P<name>.+)\n(&nbsp;){3,6}(?P<value>-?\d+,\d+) (?P<unit_of_measurement>.+?) &nbsp;&nbsp;PAR?",
r"(?P<id>\d+):&nbsp;(?P<name>.+)\n(&nbsp;){3,6}(?P<value>(-&nbsp;)?\d+,\d+) (?P<unit_of_measurement>.+?) &nbsp;&nbsp;PAR?",
data_raw)
# parse a dict of the match and save them all in a list
for match in match_iter:
match_dict = match.groupdict()
# convert html entities to unicode characters
for key in match_dict.keys():
match_dict[key] = html.unescape(match_dict[key])
# also replace decimal "," by "."
match_dict[key] = match_dict[key].replace(",", ".")
for key, value in match_dict.items():
# replace &nbsp; by " " since it is not unescaped as expected
value = value.replace("&nbsp;", " ")
if key == "value":
# for values
# also replace decimal "," by "." and remove "&nbsp;" completely
value = value.replace(",", ".").replace(" ", "")
match_dict[key] = html.unescape(value)
# and append formatted dict
data.append(match_dict)
return data
Expand Down Expand Up @@ -247,8 +251,9 @@ def read_digital_values(self):
for match in match_iter:
match_dict = match.groupdict()
# convert html entities to unicode characters
for key in match_dict.keys():
match_dict[key] = html.unescape(match_dict[key])
for key, value in match_dict.items():
value = value.replace("&nbsp;", " ")
match_dict[key] = html.unescape(value)
# and append formatted dict
data.append(match_dict)
return data
Expand Down
2 changes: 1 addition & 1 deletion pyblnet/tests/test_structure/580500.htm
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><meta http-equiv="expires" content="0"> <title>UVR1611 / Knoten 1</title> <style type="text/css"> body{background-color:#000000;font-family:"Courier New", Courier, monospace; margin:0px;} #left{background-color:#DDDDDD;position:absolute;left:0px;top:30px;bottom:20px;width:160px;padding:5px;}#head{background-color:#0000FF;color:#FFFF00;font-weight:bold;font-size:large;text-align:center;position:absolute;left:0px;top:0px;height:30px;right:0px;}#footer{background-color:#FFFF00;color:#000000;text-align:center;position:absolute;left:0px;bottom:0px;height:20px;right:0px;}#center{position:absolute;left:170px;top:30px;bottom:20px;right:0px;} .c{margin:15px auto;text-align:left; width:430px;}.ze{background-color:#CCCCCC;width:100%; border-color:#FFFFFF;border-style:solid;border-width:thin;padding:3px;}.cen{text-align:center;width:100%;} .cen1{height:100%;position:absolute;min-height:600px;}.ueber{position:relative;height:100%;width:100%;max-width:800px;margin:auto;text-align:left;} ul#nav {width: 160px;margin: 0;padding: 0px;} ul#nav li {list-style: none;margin: 0px; padding: 0;} ul#nav a, .ll a {display:block;padding: 3px;text-decoration: none;font-weight: bold;color: #0000CC; background-color: #cccccc;border: 1px solid black;border-left-color: white; border-top-color: white;} ul#nav a:hover, .ll a:hover {border-color: white;border-left-color: black; border-top-color: black;color: white; background-color: #999999;}.ull{position:relative;left:-30px;width:140px; font-size:12px;} .b{font-weight:bold;text-decoration:none;}.bo{border-bottom:medium #FFFFFF solid;}.bs{border-bottom:thin #FFFFFF solid;}.pf a{text-decoration:none;color:#007755;}.gsm{width:15px;height:25px;bottom:0px;font-size:0px;position:absolute;}.dfk{color:#0000ff;}.ea td{vertical-align:top;} .r{color:#FF0000;}.g{color:#00FF00;}.bgb{background-color:#0000CC;color:#FFFF00;} .men {} ul#nav li ul {display: none;}ul#nav li:hover ul {display: block;} #if{position:absolute;width:100%;height:100%;border:none;}.rp{text-decoration:none; color:#007755;} .bf{color:#FFFFFF; background-color:#000000; padding: 0 0px}.nul{text-decoration: none; color:#000000;} </style><script type="text/javascript">function getHttpRequest(id){var xmlhttp = null;if (window.XMLHttpRequest)xmlhttp = new XMLHttpRequest();else if (window.ActiveXObject) xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");xmlhttp.open("GET", "par.htm?blp="+id+"&123"+parseInt(Math.random()*9999), true);xmlhttp.onreadystatechange = function(){if(xmlhttp.readyState != 4)$(id).innerHTML = \'&#x231B\'; if(xmlhttp.readyState == 4 && xmlhttp.status == 200)$(id).innerHTML = xmlhttp.responseText; };xmlhttp.send(null);}function $(id) {return document.getElementById(id);}</script>\x00</head><body><form name="blw" method="GET"><div class="cen"><div class="c"><div class="ze cen bgb"> <span class="r b">1 </span><span class="g b">2 </span><span class="r b">3 </span><span class="r b">4 </span><span class="r b">5 </span><span class="r b">6 </span><span class="r b">7 </span><span class="r b">&#x261A;10 </span><br><span class="men">EINGAENGE<br></span> </div><div class="ze cen"><div class="c" style="width:21em;"> &nbsp;1:&nbsp;TKollektor<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5,3 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C01.htm\'"><=</button></span><br>&nbsp;2:&nbsp;TSP.oben<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;46,3 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C02.htm\'"><=</button></span><br>&nbsp;3:&nbsp;TSP.unten<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;53,1 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C03.htm\'"><=</button></span><br>&nbsp;4:&nbsp;THeizkr.VL<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;44,8 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C04.htm\'"><=</button></span><br>&nbsp;5:&nbsp;Temp.Aussen<br>&nbsp;&nbsp;&nbsp;&nbsp;-72,3 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C05.htm\'"><=</button></span><br>&nbsp;6:&nbsp;Temp.Raum<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24,6 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C06.htm\'"><=</button></span><br>&nbsp;7:&nbsp;T&nbsp;Kaminofen<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20,9 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C07.htm\'"><=</button></span><br>&nbsp;8:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C08.htm\'"><=</button></span><br>&nbsp;9:&nbsp;TZirku.RL<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;36,6 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C09.htm\'"><=</button></span><br>10:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C0A.htm\'"><=</button></span><br>11:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C0B.htm\'"><=</button></span><br>12:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C0C.htm\'"><=</button></span><br>13:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C0D.htm\'"><=</button></span><br>14:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C0E.htm\'"><=</button></span><br>15:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C0F.htm\'"><=</button></span><br>16:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C10.htm\'"><=</button></span></div></div><div class="ze cen"><div class="c" style="width:370px"> <span class="ll" style="width:150px; display:inline-block; text-align:center;" ><a href="580500.htm" target="centerframe">aktualisieren</a></span><span class="ll" style="width:100px; display:inline-block; text-align:center;"> <a href="580000.htm" target="centerframe">MEN&Uuml;</a></span><span style="width:100px; display:inline-block;text-align:center;" class="ll"> <a href="javascript:history.back()" target="centerframe">zur&uuml;ck</a></span><br><br> </div></div></div></div></form></body></html>
<html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><meta http-equiv="expires" content="0"> <title>UVR1611 / Knoten 1</title> <style type="text/css"> body{background-color:#000000;font-family:"Courier New", Courier, monospace; margin:0px;} #left{background-color:#DDDDDD;position:absolute;left:0px;top:30px;bottom:20px;width:160px;padding:5px;}#head{background-color:#0000FF;color:#FFFF00;font-weight:bold;font-size:large;text-align:center;position:absolute;left:0px;top:0px;height:30px;right:0px;}#footer{background-color:#FFFF00;color:#000000;text-align:center;position:absolute;left:0px;bottom:0px;height:20px;right:0px;}#center{position:absolute;left:170px;top:30px;bottom:20px;right:0px;} .c{margin:15px auto;text-align:left; width:430px;}.ze{background-color:#CCCCCC;width:100%; border-color:#FFFFFF;border-style:solid;border-width:thin;padding:3px;}.cen{text-align:center;width:100%;} .cen1{height:100%;position:absolute;min-height:600px;}.ueber{position:relative;height:100%;width:100%;max-width:800px;margin:auto;text-align:left;} ul#nav {width: 160px;margin: 0;padding: 0px;} ul#nav li {list-style: none;margin: 0px; padding: 0;} ul#nav a, .ll a {display:block;padding: 3px;text-decoration: none;font-weight: bold;color: #0000CC; background-color: #cccccc;border: 1px solid black;border-left-color: white; border-top-color: white;} ul#nav a:hover, .ll a:hover {border-color: white;border-left-color: black; border-top-color: black;color: white; background-color: #999999;}.ull{position:relative;left:-30px;width:140px; font-size:12px;} .b{font-weight:bold;text-decoration:none;}.bo{border-bottom:medium #FFFFFF solid;}.bs{border-bottom:thin #FFFFFF solid;}.pf a{text-decoration:none;color:#007755;}.gsm{width:15px;height:25px;bottom:0px;font-size:0px;position:absolute;}.dfk{color:#0000ff;}.ea td{vertical-align:top;} .r{color:#FF0000;}.g{color:#00FF00;}.bgb{background-color:#0000CC;color:#FFFF00;} .men {} ul#nav li ul {display: none;}ul#nav li:hover ul {display: block;} #if{position:absolute;width:100%;height:100%;border:none;}.rp{text-decoration:none; color:#007755;} .bf{color:#FFFFFF; background-color:#000000; padding: 0 0px}.nul{text-decoration: none; color:#000000;} </style><script type="text/javascript">function getHttpRequest(id){var xmlhttp = null;if (window.XMLHttpRequest)xmlhttp = new XMLHttpRequest();else if (window.ActiveXObject) xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");xmlhttp.open("GET", "par.htm?blp="+id+"&123"+parseInt(Math.random()*9999), true);xmlhttp.onreadystatechange = function(){if(xmlhttp.readyState != 4)$(id).innerHTML = \'&#x231B\'; if(xmlhttp.readyState == 4 && xmlhttp.status == 200)$(id).innerHTML = xmlhttp.responseText; };xmlhttp.send(null);}function $(id) {return document.getElementById(id);}</script>\x00</head><body><form name="blw" method="GET"><div class="cen"><div class="c"><div class="ze cen bgb"> <span class="r b">1 </span><span class="g b">2 </span><span class="r b">3 </span><span class="r b">4 </span><span class="r b">5 </span><span class="r b">6 </span><span class="r b">7 </span><span class="r b">&#x261A;10 </span><br><span class="men">EINGAENGE<br></span> </div><div class="ze cen"><div class="c" style="width:21em;"> &nbsp;1:&nbsp;TKollektor<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5,3 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C01.htm\'"><=</button></span><br>&nbsp;2:&nbsp;TSP.oben<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;46,3 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C02.htm\'"><=</button></span><br>&nbsp;3:&nbsp;TSP.unten<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;53,1 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C03.htm\'"><=</button></span><br>&nbsp;4:&nbsp;THeizkr.VL<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;44,8 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C04.htm\'"><=</button></span><br>&nbsp;5:&nbsp;Temp.Aussen<br>&nbsp;&nbsp;&nbsp;-&nbsp;72,3 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C05.htm\'"><=</button></span><br>&nbsp;6:&nbsp;Temp.Raum<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24,6 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C06.htm\'"><=</button></span><br>&nbsp;7:&nbsp;T&nbsp;Kaminofen<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20,9 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C07.htm\'"><=</button></span><br>&nbsp;8:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C08.htm\'"><=</button></span><br>&nbsp;9:&nbsp;TZirku.RL<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;36,6 &deg;C &nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C09.htm\'"><=</button></span><br>10:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C0A.htm\'"><=</button></span><br>11:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C0B.htm\'"><=</button></span><br>12:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C0C.htm\'"><=</button></span><br>13:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C0D.htm\'"><=</button></span><br>14:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C0E.htm\'"><=</button></span><br>15:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C0F.htm\'"><=</button></span><br>16:&nbsp;&nbsp;&nbsp;-----<br>&nbsp;&nbsp;&nbsp;&nbsp;unbenutzt&nbsp;&nbsp;PAR?<span class="pf"><button type="button" onclick="document.location.href=\'580C10.htm\'"><=</button></span></div></div><div class="ze cen"><div class="c" style="width:370px"> <span class="ll" style="width:150px; display:inline-block; text-align:center;" ><a href="580500.htm" target="centerframe">aktualisieren</a></span><span class="ll" style="width:100px; display:inline-block; text-align:center;"> <a href="580000.htm" target="centerframe">MEN&Uuml;</a></span><span style="width:100px; display:inline-block;text-align:center;" class="ll"> <a href="javascript:history.back()" target="centerframe">zur&uuml;ck</a></span><br><br> </div></div></div></div></form></body></html>
14 changes: 7 additions & 7 deletions pyblnet/tests/web_raw/web_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
'unit_of_measurement': '°C',
'value': '24.6'},
7: {'id': '7',
'name': 'T\xa0Kaminofen',
'name': 'T Kaminofen',
'unit_of_measurement': '°C',
'value': '20.9'},
9: {'id': '9',
Expand All @@ -48,7 +48,7 @@
'value': 'AUS'},
7: {'id': '7',
'mode': 'AUTO',
'name': 'P\xa0Kaminofen',
'name': 'P Kaminofen',
'value': 'EIN'},
10: {'id': '10',
'mode': 'HAND',
Expand Down Expand Up @@ -92,7 +92,7 @@
},
7: {
'id': '7',
'name': 'T\xa0Kaminofen',
'name': 'T Kaminofen',
'value': '55.8',
'unit_of_measurement': '°C'
},
Expand Down Expand Up @@ -130,7 +130,7 @@
},
7: {
'id': '7',
'name': 'P\xa0Kaminofen',
'name': 'P Kaminofen',
'mode': 'AUTO',
'value': 'EIN'
},
Expand Down Expand Up @@ -159,7 +159,7 @@
'value': '-72.3'},
{'id': '6', 'name': 'Temp.Raum', 'unit_of_measurement': '°C', 'value': '24.6'},
{'id': '7',
'name': 'T\xa0Kaminofen',
'name': 'T Kaminofen',
'unit_of_measurement': '°C',
'value': '20.9'},
{'id': '9', 'name': 'TZirku.RL', 'unit_of_measurement': '°C', 'value': '36.6'}]
Expand Down Expand Up @@ -196,7 +196,7 @@
},
{
'id': '7',
'name': 'T\xa0Kaminofen',
'name': 'T Kaminofen',
'unit_of_measurement': '°C',
'value': '55.8'
},
Expand Down Expand Up @@ -230,7 +230,7 @@
}, {
'id': '7',
'mode': 'AUTO',
'name': 'P\xa0Kaminofen',
'name': 'P Kaminofen',
'value': 'EIN'
}, {
'id': '10',
Expand Down

0 comments on commit 11ca9e3

Please sign in to comment.