Hauptmenü

[GELÖST] HTTPMOD Problem

Begonnen von quichibo, 16 Dezember 2016, 11:52:20

Vorheriges Thema - Nächstes Thema

viegener

Ok, dann setzen wir noch eine OPtion dazu:

attr HTTPGaragentor  reading1RegOpt s
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

quichibo

Ohhh, wir (du) kommen dem Ziel noch näher.

Mit reading1Regex ^.*(.)$ stand der Header im Reading.
Mit reading1Regex ^(.*)$ nichts mehr (auch nicht 0). Nach 10 Sek. <pre> </pre>

Ich kapiere seit ewigen Zeiten schon nicht dieses olle Regex. Schon so oft versucht, nie kapiert.

viegener

Zitat von: quichibo am 17 Dezember 2016, 17:59:09
Ohhh, wir (du) kommen dem Ziel noch näher.

Mit reading1Regex ^.*(.)$ stand der Header im Reading.
Mit reading1Regex ^(.*)$ nichts mehr (auch nicht 0). Nach 10 Sek. <pre> </pre>

Ich kapiere seit ewigen Zeiten schon nicht dieses olle Regex. Schon so oft versucht, nie kapiert.

War das nicht umgekehrt beim 2. Regexp der ganze Header, beim ersten nichts?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Achso, wenn der ganze Header im Reading ist, kopiere doch mal das Reading, denn in Deinem list ist der puffer (internal buf) leider leer, so dass ich nicht erkennen kann, was da genau am Ende steht
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

quichibo

Nee, habs nochmal kontrolliert. Hast natürlich recht. Sorry.  :-\

Den letzten Post hab ich nicht verstanden. Möchtest du das sehen, was im Reading steht?

<pre>HTTP/1.1 200 OK Date: Sat, 17 Dec 2016 17:30:19 GMT Server: Apache/2.4.10 (Raspbian) Content-Length: 1 Connection: close Content-Type: text/html; charset=UTF-8 </pre>

Das ist auch das, was unter httpheader steht. (abgesehen vom pre Tag)

viegener

Ja genau das war mein Ziel und leider steht die 1 oder 0 nicht in dem Puffer, damit bekommen wir das auch per regexp nicht raus...

Denn eigentlich müsste in dem Reading jetzt die gesamte Rückgabe stehen (und nicht nur der http-header) und durch Content-length 1 wird auch bestätigt, dass da was kommt aber interessanterweise steht es nicht sichtbar im reading (und auch nicht im internal buf).

Hast Du einfluss auf das Programm im raspberry, kann das vieleicht etwas mehr zurückliefern als ein 1/0?
Zum Beispiel noch ein Zeilenabschluss?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

quichibo

Ja, das habe ich selber programmiert. Da kann stehen was erforderlich ist, damit es funktioniert!

viegener

Eigentlich müsste es ja auch mit dem einen Zeichen funktionieren, wenn Du das beeinflussen kannst dann ändere doch gleich 2 Dinge:

- Packe vor das Ergebnis einen aussagekräftigen Text abgeschlossen mit z.B. :, den kann man gut mit dem Regexp verwenden
- Packe hinter den Wert noch einen Zeilenvorschub

Warum sich die = oder 1 nicht matchen lässt kann ich gerade auch nicht sagen
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

quichibo

Hi,
bin leider nicht eher dazu gekommen.

Habe jetzt als Ausgabe Gate1:0 oder Gate1:1. Jeweils mit Zeilenumbruch (\n) dahinter.

Im Regex Tester Online funktioniert das hier: (.)\n
Im Modul steht leider: NIX. :(

viegener

Also noch mal einen Schritt zurück:

Was ist im log / in den readings bei folgendem
reading1Regex ^(.*)$

und was ist im log / in den readings bei folgendem
reading1Regex Gate1(.*)$

Jeweils mit dem RegOpt s gesetzt!

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

quichibo

Uiuiui...

reading1Regex ^(.*)$
Der Komplette Header mit Gate1:0

reading1Regex Gate1(.*)$
:0

reading1Regex Gate1:(.*)$
0

Das ist die Lösung!!

Nach 10 Sekunden steht dann aber
<pre>0 </pre>
im Reading.

viegener

Ich vermute erstmal, das ist nur ein Anzeigeproblem, denn FHEMWEB vermutet, dass die Daten vorformatiert sind und zeichnet sie entsprechend aus.

Versuch doch mal:

reading1Regex Gate1:(\d+)

Damit das alles hinter den Ziffern auch noch entfällt
Du brauchst dann vermutlich nicht mal mehr das Attribut regopt
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

quichibo

Jap. So ist es top!
Das letzte passt super ohne regopt

Vielen Vielen Dank!!!!!

viegener

Bitte - gern geschehen!

Markierst Du den Thread auch noch als gelöst (Titel ändern)?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

quichibo

#29
EDIT:
Modul wurde nochmal angepasst.


Zur Vollständigkeit:
define Garagentor HTTPMOD http://192.168.178.9/schalter.php?gate=true&item=0&state=true&fhem=true 10
attr Garagentor userattr reading1Name reading1Regex set0Map set0Name set0NoArg:0,1 set0URL set1IMap set1Name set1NoArg:0,1 set1URL
attr Garagentor devStateIcon off:fts_garage_door_100 on:fts_garage_door_20
attr Garagentor icon fts_garage
attr Garagentor reading1Name state
attr Garagentor reading1Regex Gate1:(\w+)
attr Garagentor room Garage
attr Garagentor set0Name off
attr Garagentor set0NoArg 1
attr Garagentor set0URL http://192.168.178.9/schalter.php?gate=true&item=0&action=0
attr Garagentor set1Name on
attr Garagentor set1NoArg 1
attr Garagentor set1URL http://192.168.178.9/schalter.php?gate=true&item=0&action=1

Das ist jetzt das HTTPMOD Modul. Durch die einzelnen Sets habe ich jetzt neben dem Status auch ein on und off stehen mit dem man schalten kann.

Da ich die Ausgabe auf meinem Server in der Garage auf on bzw. off gesetzt habe, funktioniert das jetzt auch super in FHEM:
Internals:
   BUSY       0
   DEF        http://192.168.178.9/schalter.php?gate=true&item=0&state=true&fhem=true 10
   Interval   10
   LASTSEND   1482093868.76309
   MainURL    http://192.168.178.9/schalter.php?gate=true&item=0&state=true&fhem=true
   ModuleVersion 3.3.5 - 29.9.2016
   NAME       HTTPGaragentor
   NR         45
   STATE      off
   TRIGGERTIME 1482093878.76031
   TRIGGERTIME_FMT 2016-12-18 21:44:38
   TYPE       HTTPMOD
   addr       http://192.168.178.9:80
   buf
   code       200
   conn
   data
   displayurl http://192.168.178.9/schalter.php?gate=true&item=0&state=true&fhem=true
   header
   host       192.168.178.9
   httpheader HTTP/1.1 200 OK

Date: Sun, 18 Dec 2016 20:44:40 GMT

Server: Apache/2.4.10 (Raspbian)

Content-Length: 10

Connection: close

Content-Type: text/html; charset=UTF-8
   httpversion 1.0
   hu_blocking 0
   hu_filecount 264
   ignoreredirects 0
   loglevel   4
   path       /schalter.php?gate=true&item=0&state=true&fhem=true
   protocol   http
   redirects  0
   timeout    2
   url        http://192.168.178.9/schalter.php?gate=true&item=0&state=true&fhem=true
   value      0
   QUEUE:
   Readings:
     2016-12-18 21:44:29   state           off
   Request:
     data
     header
     ignoreredirects 0
     retryCount 0
     type       update
     url        http://192.168.178.9/schalter.php?gate=true&item=0&state=true&fhem=true
     value      0
   Defptr:
     Readingbase:
       state      reading
     Readingnum:
       state      1
     Readingoutdated:
     Requestreadings:
       Update:
         state      reading 1
   Sslargs:
Attributes:
   reading1Name state
   reading1Regex Gate1:(\w+)
   room       Garage
   set1IMap   0:off, 1:on
   set1Name   HTTPGaragentor
   set1URL    http://192.168.178.9/schalter.php?gate=true&item=0&action=$val
   userattr   reading1Name reading1Regex set1IMap set1Name set1URL


Wie zu sehen ist, auch mit dem Reading state.