Ich habe folgende readingRegex Definition
attr DL2 reading11Name T_11
attr DL2 reading11Regex field_index\" : 10,[ \n\t]+"raw_value"[ : \n\t\d.*,]+"value"[ : \t\"]+([\d\.]+)
attr resoltemp valueFormat {T_11 => "%.1f °C"}
Die positiven Werte werden ohne Probleme eingelesen.
Sobald der Temperaturwert unter 0°C fällt wird die Temperatur nur mehr mit 0.0°C ausgegeben.
Wo muss ich eine Änderung durchführen um auch negative Werte einlesen zu können?
Hatte mal das selbe Problem bei Minusgraden und Klimalogg.
Gibt dazu auch einen Eintrag im Forum: https://forum.fhem.de/index.php?topic=35477.0 (https://forum.fhem.de/index.php?topic=35477.0)
Deine Lösung sollte eigentlich einfach:([\d\.-]+)
sein.
Grüße
Ich habe bei meinen ESP's diese Regex im Einsatz: Temp[\t]+([+-]?\d*\.\d+)
Damit funktionieren auch die negativen Werte.
Ich habe beide Vorschäge getestet, aber weder das eine noch das andere bewirkte eine Änderung.
field_index\" : 10,[ \n\t]+"raw_value"[ : \n\t\d.*,]+"value"[ : \t\"]+([+-]?\d*\.\d+)
oder
field_index\" : 10,[ \n\t]+"raw_value"[ : \n\t\d.*,]+"value"[ : \t\"]+([\d\.-]+)
Hi Chris,
im html-code steht bei mir z.B. das:
bla <b>Temperatur</b></font></td> <td valign="bottom" bgcolor="#E5E5E5"> <font face="Verdana" size="2">Aktuell: 5,2 °C</font></td> blubb
Regex:
(?s)>Temperatur<.*?\:\s*(-?[\d,]+)
Zum Weiterverarbeiten wandele ich danach das Komma im HTTPMOD-Device noch in einen Punkt um.
Gruß
Andreas
Das hat leider auch nicht funktioniert.
field_index\" : 10,[ \n\t]+"raw_value"[ : \n\t\d.*,]+"value"[ : \t\"]+(-?[\d.]+)
Nach wie vor werden keine negativen Werte übernommen.
Hallo Chris,
interessant wäre, welchen html-Output Dein Device liefert.
Ich hatte mal ein ähnliches Problem mit meiner Photovoltaikanlage, weiter runter als 0 °C konnte ich nicht auslesen. Das Problem war, dass vor der Gradzahl immer ein Leerzeichen ist, was bei positiven Werten ja kein Problem darstellt, bei negativen aber schon.
Beispiel aus meinem html-Code:
... Temperatur PV-Modul</TD><TD> 5 °C ... [+5 °C: kein "+", aber Leerzeichen zwischen ">" und "5"]
... Temperatur PV-Modul</TD><TD>- 5 °C ... [-5 °C: Leerzeichen zwischen "-" und "5"]
Nach langem Probieren mit regulären Ausdrücken bin ich über eine Methode bei HTTPMOD gestossen: "readingxxRecombineExpr"
Ich lese nun das optionale "-" und die (positive) Zahl separat aus, was zu zwei Werten führt: "Temperatur_PV-Modul_C-1" und "Temperatur_PV-Modul_C-2"
Diese beiden werden durch "reading02RecombineExpr" wieder zu "Temperatur_PV-Modul_C" zusammengeführt. Ich brauche an dieser Stelle einen String "%s", aber ein "%.1f" sollte auch klappen.
attr SP35_4 reading02Format %s °C
attr SP35_4 reading02Name Temperatur_PV-Modul_C
attr SP35_4 reading02RecombineExpr join "", @matchlist
attr SP35_4 reading02Regex Temperatur PV-Modul</TD><TD>(-?)[\s]*([\d]+)
Viele Grüße,
Nik
So sieht der Output des DL2 aus.
HTTP/1.0 200 OK Content-Type: text/plain Set-Cookie: resol-dlx-session=2FF5169D430C5870B5600A964EA5C72E;
path=/ Connection: close Date: Mon, 16 Jan 2017 07:09:48 GMT Server: lighttpd/1.4.28 { "language" : "de",
"headers" : [
{ "id" : "00_0010_7311_0100",
"description" : "VBus 0: DeltaSol M [Regler]",
"channel" : 0, "destination_address" : 16,
"source_address" : 29457, "protocol_version" : 16,
"command" : 256, "info" : 0,
"destination_name" : "DFA",
"source_name" : "DeltaSol M [Regler]",
"fields" : [
{ "id" : "000_2_0", "name" : "Temperatur Sensor 1", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "002_2_0", "name" : "Temperatur Sensor 2", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "004_2_0", "name" : "Temperatur Sensor 3", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "006_2_0", "name" : "Temperatur Sensor 4", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "008_2_0", "name" : "Temperatur Sensor 5", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "010_2_0", "name" : "Temperatur Sensor 6", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "012_2_0", "name" : "Temperatur Sensor 7", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "014_2_0", "name" : "Temperatur Sensor 8", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "016_2_0", "name" : "Temperatur Sensor 9", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "018_2_0", "name" : "Temperatur Sensor 10", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "020_2_0", "name" : "Temperatur Sensor 11", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "022_2_0", "name" : "Temperatur Sensor 12", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "024_2_0", "name" : "Einstrahlung", "unit" : " W/m\u00B2", "unit_code" : "WattsPerSquareMeter" },
{ "id" : "028_4_0", "name" : "Impulseingang 1", "unit" : "", "unit_code" : "None" },
{ "id" : "032_4_0", "name" : "Impulseingang 2", "unit" : "", "unit_code" : "None" },
{ "id" : "036_2_0", "name" : "Sensorbruchmaske", "unit" : "", "unit_code" : "None" },
{ "id" : "038_2_0", "name" : "Sensorkurzschlussmaske", "unit" : "", "unit_code" : "None" },
{ "id" : "040_2_0", "name" : "Sensorbenutzungsmaske", "unit" : "", "unit_code" : "None" },
{ "id" : "044_1_0", "name" : "Drehzahl Relais 1", "unit" : "%", "unit_code" : "Percent" },
{ "id" : "045_1_0", "name" : "Drehzahl Relais 2", "unit" : "%", "unit_code" : "Percent" },
{ "id" : "046_1_0", "name" : "Drehzahl Relais 3", "unit" : "%", "unit_code" : "Percent" },
{ "id" : "047_1_0", "name" : "Drehzahl Relais 4", "unit" : "%", "unit_code" : "Percent" },
{ "id" : "048_1_0", "name" : "Drehzahl Relais 5", "unit" : "%", "unit_code" : "Percent" },
{ "id" : "049_1_0", "name" : "Drehzahl Relais 6", "unit" : "%", "unit_code" : "Percent" },
{ "id" : "050_1_0", "name" : "Drehzahl Relais 7", "unit" : "%", "unit_code" : "Percent" },
{ "id" : "051_1_0", "name" : "Drehzahl Relais 8", "unit" : "%", "unit_code" : "Percent" },
{ "id" : "052_1_0", "name" : "Drehzahl Relais 9", "unit" : "%", "unit_code" : "Percent" },
{ "id" : "058_2_0", "name" : "Relaisbenutzungsmaske", "unit" : "", "unit_code" : "None" },
{ "id" : "060_2_0", "name" : "Fehlermaske", "unit" : "", "unit_code" : "None" },
{ "id" : "062_2_0", "name" : "Warnungsmaske", "unit" : "", "unit_code" : "None" },
{ "id" : "064_2_0", "name" : "Reglerversion", "unit" : "", "unit_code" : "None" },
{ "id" : "066_2_0", "name" : "Systemzeit", "unit" : "", "unit_code" : "None" } ] },
{ "id" : "00_0010_7316_0100",
"description" : "VBus 0: DeltaSol M [WMZ1]", "channel" : 0,
"destination_address" : 16, "source_address" : 29462,
"protocol_version" : 16,
"command" : 256, "info" : 0,
"destination_name" : "DFA", "source_name" : "DeltaSol M [WMZ1]",
"fields" : [
{ "id" : "000_2_0", "name" : "Vorlauftemperatur", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "002_2_0", "name" : "R\u00FCcklauftemperatur", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "004_2_0", "name" : "Volumenstrom", "unit" : " l/h", "unit_code" : "LitersPerHour" },
{ "id" : "006_2_0", "name" : "W\u00E4rme", "unit" : " Wh", "unit_code" : "WattHours" } ] },
{ "id" : "00_0010_7317_0100", "description" : "VBus 0: DeltaSol M [WMZ2]",
"channel" : 0,
"destination_address" : 16,
"source_address" : 29463,
"protocol_version" : 16,
"command" : 256, "info" : 0,
"destination_name" : "DFA",
"source_name" : "DeltaSol M [WMZ2]",
"fields" : [
{ "id" : "000_2_0", "name" : "Vorlauftemperatur", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "002_2_0", "name" : "R\u00FCcklauftemperatur", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "004_2_0", "name" : "Volumenstrom", "unit" : " l/h", "unit_code" : "LitersPerHour" },
{ "id" : "006_2_0", "name" : "W\u00E4rme", "unit" : " Wh", "unit_code" : "WattHours" } ] } ],
"headerset_stats" : { "headerset_count" : 1, "min_timestamp" : 1484550588.447000, "max_timestamp" : 1484550588.447000 },
"headersets" : [ { "timestamp" : 1484550589.447000,
"packets" : [
{ "header_index" : 0, "timestamp" : 1484550587.127000,
"field_values" : [
{ "field_index" : 0, "raw_value" : -2.700000, "value" : "-2.7" },
{ "field_index" : 1, "raw_value" : 18.500000, "value" : "18.5" },
{ "field_index" : 2, "raw_value" : 30.800000, "value" : "30.8" },
{ "field_index" : 3, "raw_value" : 50.500000, "value" : "50.5" },
{ "field_index" : 4, "raw_value" : 5.100000, "value" : "5.1" },
{ "field_index" : 5, "raw_value" : 50.900000, "value" : "50.9" },
{ "field_index" : 6, "raw_value" : 55.300000, "value" : "55.3" },
{ "field_index" : 7, "raw_value" : 27.000000, "value" : "27.0" },
{ "field_index" : 8, "raw_value" : 19.200000, "value" : "19.2" },
{ "field_index" : 9, "raw_value" : 17.600000, "value" : "17.6" },
{ "field_index" : 10, "raw_value" : -1.300000, "value" : "-1.3" },
{ "field_index" : 11, "raw_value" : 60.500000, "value" : "60.5" },
{ "field_index" : 12, "raw_value" : 5.000000, "value" : "5" },
{ "field_index" : 13, "raw_value" : 49629.000000, "value" : "49629" },
{ "field_index" : 14, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 15, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 16, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 17, "raw_value" : 4095.000000, "value" : "4095" },
{ "field_index" : 18, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 19, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 20, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 21, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 22, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 23, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 24, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 25, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 26, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 27, "raw_value" : 509.000000, "value" : "509" },
{ "field_index" : 28, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 29, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 30, "raw_value" : 2561.000000, "value" : "2561" },
{ "field_index" : 31, "raw_value" : 549.000000, "value" : "09:09" } ] },
{ "header_index" : 1, "timestamp" : 1484550587.340000,
"field_values" : [
{ "field_index" : 0, "raw_value" : 19.200000, "value" : "19.2" },
{ "field_index" : 1, "raw_value" : 17.600000, "value" : "17.6" },
{ "field_index" : 2, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 3, "raw_value" : 75144433.000000, "value" : "75144433" } ] },
{ "header_index" : 2, "timestamp" : 1484550587.560000,
"field_values" : [
{ "field_index" : 0, "raw_value" : 19.200000, "value" : "19.2" },
{ "field_index" : 1, "raw_value" : 5.100000, "value" : "5.1" },
{ "field_index" : 2, "raw_value" : 0.000000, "value" : "0" },
{ "field_index" : 3, "raw_value" : 6255910.000000, "value" : "6255910" } ] } ] } ] }
Hauptsächlich geht es um diese Eingangswerte:
{ "field_index" : 0, "raw_value" : -2.700000, "value" : "-2.7" },
{ "field_index" : 10, "raw_value" : -1.300000, "value" : "-1.3" },
Was mir noch aufgefallen ist, beim HTTPMOD werden die Umlaute nicht richtig eingelesen.
Spielt zwar keine große Rolle, ist aber ein Schönheitsfehler.
ZB: Rücklauftemperatur, Wärme
{ "id" : "002_2_0", "name" : "R\u00FCcklauftemperatur", "unit" : " \u00B0C", "unit_code" : "DegreesCelsius" },
{ "id" : "006_2_0", "name" : "W\u00E4rme"
Unter regex101.com (http://regex101.com) kann man mit regulären Ausdrücken "spielen".
Mit dem:
field_index"[:\s]+10,[\s]+"raw_value"[:\s-\d.\,]+"value"[:\s\"]+(-?[\d.]+)
findet man exakt die "-1.3".
Und mit einem anderen Index auch die anderen Zahlen.
Danke für den Tipp.
Jetzt funktionieren die negativen Zahlen auch.
Man lernt ja nie aus.