[gelöst] HTTPMOD: negative Werte werden nicht übernommen

Begonnen von Burny4600, 09 Januar 2017, 13:56:49

Vorheriges Thema - Nächstes Thema

Burny4600

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?
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Syrex-o

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
Deine Lösung sollte eigentlich einfach:([\d\.-]+) sein.

Grüße

digiart

Ich habe bei meinen ESP's diese Regex im Einsatz: Temp[\t]+([+-]?\d*\.\d+)

Damit funktionieren auch die negativen Werte.
Anfragen ausserhalb der Threads (PN, Mail o.ä.) werden ignoriert!

Burny4600

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\.-]+)
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Vize

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

Burny4600

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.
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Mr. Flash

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
RPi 4; Bullseye; FHEM 6.3; S.USV basic; BME280; TSL25911.
HM: CFG-LAN,CFG-USB-2,CC-RT-DN,Dis-(EP-)WM55,ES-PMSw1-Pl,ES-TX-WM,LC-Dim1T-FM,LC-Sw1-FM,LC-Sw2-FM,MOD-RPI-PCB,OU-CFM-Pl,RC-Dis-H-x-EU,SCI-3-FM,Sec-MDIR-2,-RHS,-SD,-SC-2,-SCo,-Sir-WM,-TiS,-WDS-2,TC-IT-WM-W-EU,WDS10-TH-O,WDS30-OT2-SM.
Shelly's.

Burny4600

#7
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"
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Mr. Flash

Unter 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.
RPi 4; Bullseye; FHEM 6.3; S.USV basic; BME280; TSL25911.
HM: CFG-LAN,CFG-USB-2,CC-RT-DN,Dis-(EP-)WM55,ES-PMSw1-Pl,ES-TX-WM,LC-Dim1T-FM,LC-Sw1-FM,LC-Sw2-FM,MOD-RPI-PCB,OU-CFM-Pl,RC-Dis-H-x-EU,SCI-3-FM,Sec-MDIR-2,-RHS,-SD,-SC-2,-SCo,-Sir-WM,-TiS,-WDS-2,TC-IT-WM-W-EU,WDS10-TH-O,WDS30-OT2-SM.
Shelly's.

Burny4600

Danke für den Tipp.
Jetzt funktionieren die negativen Zahlen auch.
Man lernt ja nie aus.
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess