HTTPMOD regex funktioniert nicht mehr richtig seit 01.02.

Begonnen von Jewe, 12 Februar 2017, 21:35:19

Vorheriges Thema - Nächstes Thema

Jewe

Hallo,

seit ca. dem 01.02. funktioniert einige meiner HTTPMOD regex abfragen nicht mehr richtig.
Mir ist aufgefallen, dass ich nun immer <pre> </pre> an den Werten habe?

jetzt :
reading0Regex Status Heizkreis 1:[ \t]+([-]?[\d\.]+[^<]*)
Status Heizkreis 1       <pre>114 - Heizbetrieb Komfort </pre>

alt :
reading0Regex Status Heizkreis 1:[ \t]+([-]?[\d\.]+[^<]*)
Status Heizkreis 1       114 - Heizbetrieb Komfort

Grüsse

rudolfkoenig

Kannst du bitte genau beschreiben, wo die <pre> Tags auftauchen? FHEMWEB baut die dazu, falls ein \n im Wert vorkommt.

Jewe

#2
Ich habe noch festgestellt, das die Tags nicht immer da sind. Wenn ich ein Httpmod anclicke sind sie manchmal da und nach einm reload wieder weg ?
siehe Bilder.

edit:
Eskommt dann vor, wenn sich die Werte auf der Seite ändern.

buf:
HTTP/1.1 200 OK Content-Type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>BSB LAN-SERVER</title> <link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png" /> </head> <body> <p> 8000 Status - Status Heizkreis 1: 122 - Raumtemp'begrenzung <br> </p> <p> 8730 Diagnose Verbraucher - Heizkreispumpe Q2: 0 - Aus <br> </p> <p> 8731 Diagnose Verbraucher - Heizkreismischer Auf Y1: 0 - Aus <br> </p> <p> 8732 Diagnose Verbraucher - Heizkreismischer Zu Y2: 0 - Aus <br> </p> <p> 8740 Diagnose Verbraucher - Raumtemperatur 1: 20.1 &deg;C <br> </p> <p> 8741 Diagnose Verbraucher - Raumsollwert 1: 20.0 &deg;C <br> </p> <p> 8742 Diagnose Verbraucher - Raumtemperatur 1 Modell: 19.2 &deg;C <br> </p> <p> 8743 Diagnose Verbraucher - Vorlauftemperatur 1: 18.7 &deg;C <br> </p> <p> 8744 Diagnose Verbraucher - Vorlaufsollwert 1: --- &deg;C <br> </p> </body> </html>

rudolfkoenig

ZitatEskommt dann vor, wenn sich die Werte auf der Seite ändern.
Ich habe am Samstag eine Aenderung in fhemweb.js durchgefuehrt, was genau dieses Problem beheben koennte. Koenntest Du das bitte testen (d.h. FHEM-update + Browser Reload) ?

Und/oder dein Regexp anpassen, damit die Daten ohne \n genomen werden. Das gezeigte buf is sicher nicht exakt kopiert: nach HTTP _muss_ ein \r\n eingefuegt werden, sonst ist es nicht RFC Konform. Deswegen vermute ich weitere \n's im Body.

Jewe

Zitat von: rudolfkoenig am 13 Februar 2017, 13:59:53
Ich habe am Samstag eine Aenderung in fhemweb.js durchgefuehrt, was genau dieses Problem beheben koennte. Koenntest Du das bitte testen (d.h. FHEM-update + Browser Reload) ?

Jetzt sieht es besser aus. Die <pre> </pre> sind weg, bzw. kommen nicht mehr.

Zitat
Und/oder dein Regexp anpassen, damit die Daten ohne \n genomen werden. Das gezeigte buf is sicher nicht exakt kopiert: nach HTTP _muss_ ein \r\n eingefuegt werden, sonst ist es nicht RFC Konform. Deswegen vermute ich weitere \n's im Body.

Das habe ich ehrlichgesagt nicht ganz kapiert und mit Regexp habe ich so meine Schwierigkeiten. Das buf sollte schon stimmen, das habe ich mit Copy&Paste hier eingefügt.
Habe nochmal aktuelle Bilder angehängt.

JoeALLb

Zitat von: jensweber am 13 Februar 2017, 20:59:10
Das buf sollte schon stimmen, das habe ich mit Copy&Paste hier eingefügt.

Im buf werden Zeilenwechsel entfernt.
Stell doch den Quelltext der Seite mit ein.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Jewe

Ok, hier der Quelltext :

8000 Status - Status Heizkreis 1: 114 - Heizbetrieb Komfort

8730 Diagnose Verbraucher - Heizkreispumpe Q2: 255 - Ein

8731 Diagnose Verbraucher - Heizkreismischer Auf Y1: 0 - Aus

8732 Diagnose Verbraucher - Heizkreismischer Zu Y2: 0 - Aus

8740 Diagnose Verbraucher - Raumtemperatur 1: 21.2 °C

8741 Diagnose Verbraucher - Raumsollwert 1: 21.0 °C

8742 Diagnose Verbraucher - Raumtemperatur 1 Modell: 21.0 °C

8743 Diagnose Verbraucher - Vorlauftemperatur 1: 23.9 °C

8744 Diagnose Verbraucher - Vorlaufsollwert 1: 23.0 °C

JoeALLb

Das ist wohl nicht der Quellcode,  da sind keine Spitzklammern enthalten,  im Regex prüfst du aber auf darauf..
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

Trotz fehlender Quelle,
versuch mal diesen hier:

Status Heizkreis 1:\s+(-?[\d\.]+[^\n]*)(?:\n|<|\s*)
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Jewe

ZitatDas ist wohl nicht der Quellcode,

Hi, jetzt aber...
Habe den Ausdruck von Dir probiert, das passt aber nicht ganz. Da wird alles ausgewählt.
Jetzt habe ich folgendes probiert und das siet ganz gut aus. Die eckigen Klammern sind wohl überflüssig.

Status Heizkreis 1:[ \t]+([\d\.]+[^<]*)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>BSB LAN-SERVER</title>
<link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png" />
</head>
<body>
<p>
8000 Status -  Status Heizkreis 1: 122 - Raumtemp'begrenzung
<br>
</p>
<p>
8730 Diagnose Verbraucher -  Heizkreispumpe Q2: 0 - Aus
<br>
</p>
<p>
8731 Diagnose Verbraucher -  Heizkreismischer Auf Y1: 0 - Aus
<br>
</p>
<p>
8732 Diagnose Verbraucher -  Heizkreismischer Zu Y2: 255 - Ein
<br>
</p>
<p>
8740 Diagnose Verbraucher -  Raumtemperatur 1: 20.9 &deg;C
<br>
</p>
<p>
8741 Diagnose Verbraucher -  Raumsollwert 1: 20.0 &deg;C
<br>
</p>
<p>
8742 Diagnose Verbraucher -  Raumtemperatur 1 Modell: 19.6 &deg;C
<br>
</p>
<p>
8743 Diagnose Verbraucher -  Vorlauftemperatur 1: 23.4 &deg;C
<br>
</p>
<p>
8744 Diagnose Verbraucher -  Vorlaufsollwert 1: --- &deg;C
<br>
</p>
</body>
</html>

JoeALLb

Zitat von: jensweber am 17 Februar 2017, 22:24:14
Hi, jetzt aber...
Habe den Ausdruck von Dir probiert, das passt aber nicht ganz. Da wird alles ausgewählt.
Jetzt habe ich folgendes probiert und das siet ganz gut aus. Die eckigen Klammern sind wohl überflüssig.

hm.. seltsam, denn genau die Zeilenwechsel sind ja hier das problem gewesen, und
wenn dein quellcode stimmt, dürfte das so niemals sein.... mach mal einen Screenshot!

ja, die eckigen Klammern sind fast immer nutzlos, die kombinieren nur unterschiedliche Zeichen:

Versuch mal
Status Heizkreis 1:\s+(-?[\d\.]+[^\n<]*)[\n<\s]
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270