FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: quichibo am 16 Dezember 2016, 11:52:20

Titel: [GELÖST] HTTPMOD Problem
Beitrag von: quichibo am 16 Dezember 2016, 11:52:20
Hallo Zusammen,

ich bin ein Frischling in Sachen FHEM komme aber schon ganz gut zurecht. Mit dem Modul HTTPMOD habe ich allerdings so meine Probleme.

Ich habe in meiner Dreifach-Garage einen Raspberry hängen, der die Tor- und Lichtsteuerung macht. Gesteuert wird via HTTP. Eine URL öffnet ein bestimmtes Tor, die gleiche mit anderen Parameter schließt es wieder und nochmal andere Parameter geben den Status des Tors aus (geöffnet/geschlossen bzw. 1 oder 0).

Jetzt möchte ich natürlich Tore und Licht in FHEM integrieren und habe mir das HTTPMOD schon vorgenommen. Aber so richtig funktionieren tut das nicht. Hier mein Code. Wo mache ich den Fehler? Ich möchte das Tor öffnen, schließen und sehen, ob es offen oder geschlossen ist.

define Garagentor HTTPMOD http://192.168.178.9/schalter.php?gate=true&item=0&state=true 10
attr Garagentor userattr set01IMap set01Name set01URL
attr Garagentor room Garage,Homekit
attr Garagentor set01IMap 0:off, 1:on
attr Garagentor set01Name Garagentor
attr Garagentor set01URL http://192.168.178.9/schalter.php?gate=true&item=0&action=$val


Erste Zeile, da steht die URL zum Status abrufen, und die letzte Zeile ist zum Tor bewegen. action muss 1 oder 0 sein.

VG
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 16 Dezember 2016, 17:20:36
Ich bin jetzt kein HTTPMOD experte aber für den get fehlt mir irgendeine Angabe, was denn mit der Rückgabe von dem URL passieren soll - Ich vermute Du bräuchtest noch ein get01....  Set von Attributen?

Was noch wichtig wäre zu erklären, was momentan nicht funktioniert bzw. was funktioniert (z.B. geht der set)?

Titel: Antw:HTTPMOD Problem
Beitrag von: quichibo am 16 Dezember 2016, 18:29:11
Nein, es funktioniert nichts. Kein Get und kein Set.

Ist das denn das richtige Modul für mein Vorhaben, oder gibt es ein besseres?
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 16 Dezember 2016, 19:46:48
Was passiert denn, wenn Du


set Garagentor Garagentor off
oder
set Garagentor Garagentor on

eingibst?

Wenn dabei nichts geht, lösche doch mal ...iMap attribut und versuche

set Garagentor Garagentor 0
bzw.
set Garagentor Garagentor 1
Titel: Antw:HTTPMOD Problem
Beitrag von: quichibo am 16 Dezember 2016, 21:44:52
Ich werd bekloppt. Jetzt geht das. Hatte das eben schon mal ausprobiert, aber da ging es nicht.

Jetzt wird nur noch der Status nicht richtig angezeigt.
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 16 Dezember 2016, 22:26:59
Dann verweise ich nochmal auf Antwort #1 - Ich denke da fehlt es noch an Festlegungen was im Reading auftauchen soll
Titel: Antw:HTTPMOD Problem
Beitrag von: quichibo am 17 Dezember 2016, 09:57:36
Hab ich mich gestern Abend auch noch dran gemacht. Ich glaube ich bin nah dran.

define Garagentor HTTPMOD http://192.168.178.9/schalter.php?gate=true&item=0&state=true 10
attr Garagentor userattr get1IMap get1Name get1Poll:0,1 get1PollDelay get1URL set1IMap set1Name set1URL
attr Garagentor get1IMap 0:off, 1:on
attr Garagentor get1Name STATE
attr Garagentor room Garage,Homekit
attr Garagentor set1IMap 0:off, 1:on
attr Garagentor set1Name Garagentor
attr Garagentor set1URL http://192.168.178.9/schalter.php?gate=true&item=0&action=$val


Im Log steht nun: 2016.12.17 09:54:38 3: Garagentor: Read response to update didn't match any Reading
Habe den get1 extra STATE genannt, in der Hoffnung, dass der Status dann auch dort eingetragen wird, wo derzeit die Fragezeichen stehen... Geht aber noch nicht.

Der Rückgabewert vom Server in der Garage ist 0 oder 1.
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 17 Dezember 2016, 10:10:40
Das Modul HTTPMOD geht meines Wissens davon aus, dass man aus dem Ergebnis des HTTP requests einen Teil extrahieren will und den als Reading zur Verfügung stellen möchte.

Ob das Reading STATE heissen kann, weiss ich nicht.

Generelle Tipps - Ich würde immer erst versuchen die Funktion grundsätzlich zum Laufen zu bekommen, bevor die Verschönerungen beginnen Name des Readings und die IMap sind Verschönerungen) solange DU den http request nicht in ein Reading bekommst sind das nur Fehlerquellen.

Jetzt zu Deinen Settings
- Meines Wissens nach gibt es kein get..IMap
- get... erzeugt ein get command - ich dachte Du willst ein Reading

Ich denke Du solltest die Commandref für HTTPMod wirklich mal lesen und dann eines der Beispiele anpassen

Also Vorschlag:
- Wirf alle get... Attribute weg
- setze den URL auf den URL den Du pollen möchtest und nicht auf den Server root
- definiere reading Attribute für Name und für den regexp
reading1Regex .*

Titel: Antw:HTTPMOD Problem
Beitrag von: quichibo am 17 Dezember 2016, 10:50:53
In der Referenz hab ich gelesen. Steige da aber offensichtlich nicht so durch.
Das Get hatte ich zwischenzeitlich schon zum Reading geändert.

Mit deinem Regex Eintrag und eine Änderung des Namen für das Reading auf Status liest er jetzt auch was aus, aber doch irgendwie nicht richtig. Rufe ich die URL im Browser auf, steht da 0, das Reading kommt auf 1.

Dafür gibts keine Fehler mehr im Log.

Ich geh erstmal in den Garten (also in echt ;) ). Mal schauen, ob ich da einen klaren Kopf bekomme.


define HTTPGaragentor HTTPMOD http://192.168.178.9/schalter.php?gate=true&item=0&state=true 10
attr HTTPGaragentor room Garage
attr HTTPGaragentor userattr reading1Name reading1Regex set1IMap set1Name set1URL
attr HTTPGaragentor reading1Name Status
attr HTTPGaragentor reading1Regex .*
attr HTTPGaragentor set1IMap 0:off, 1:on
attr HTTPGaragentor set1Name HTTPGaragentor
attr HTTPGaragentor set1URL http://192.168.178.9/schalter.php?gate=true&item=0&action=$val
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 17 Dezember 2016, 11:04:41
Wie bereits gesagt, ich würde das Reading nicht Status nennen, wer weiss wo der Wert 1 sonst herkommt

Aber ich wiederhole mich
Titel: Antw:HTTPMOD Problem
Beitrag von: quichibo am 17 Dezember 2016, 11:11:27
Hatte das so verstanden, es nicht STATE zu nennen.
Egal, geändert auf Zustand, gleiches Verhalten.
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 17 Dezember 2016, 11:31:23
mach doch mal ein list des HTTPMOD device und poste das Ergebnis hier (in Code tags bitte!)
Titel: Antw:HTTPMOD Problem
Beitrag von: quichibo am 17 Dezember 2016, 12:34:28
Internals:
   BUSY       0
   DEF        http://192.168.178.9/schalter.php?gate=true&item=0&state=true 10
   Interval   10
   LASTSEND   1481974435.77344
   MainURL    http://192.168.178.9/schalter.php?gate=true&item=0&state=true
   ModuleVersion 3.3.5 - 29.9.2016
   NAME       HTTPGaragentor
   NR         45
   STATE      ???
   TRIGGERTIME 1481974445.77156
   TRIGGERTIME_FMT 2016-12-17 12:34:05
   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
   header
   host       192.168.178.9
   httpheader HTTP/1.1 200 OK

Date: Sat, 17 Dec 2016 11:34:05 GMT

Server: Apache/2.4.10 (Raspbian)

Content-Length: 1

Connection: close

Content-Type: text/html; charset=UTF-8
   httpversion 1.0
   hu_blocking 0
   hu_filecount 1
   ignoreredirects 0
   loglevel   4
   path       /schalter.php?gate=true&item=0&state=true
   protocol   http
   redirects  0
   timeout    2
   url        http://192.168.178.9/schalter.php?gate=true&item=0&state=true
   value      0
   QUEUE:
   Readings:
     2016-12-17 11:10:44   Status          1
     2016-12-17 10:42:04   Test            1
     2016-12-17 12:33:56   Zustand         1
   Request:
     data
     header
     ignoreredirects 0
     retryCount 0
     type       update
     url        http://192.168.178.9/schalter.php?gate=true&item=0&state=true
     value      0
   Defptr:
     Readingbase:
       Zustand    reading
     Readingnum:
       Zustand    1
     Readingoutdated:
     Requestreadings:
       Update:
         Zustand    reading 1
   Sslargs:
Attributes:
   reading1Name Zustand
   reading1Regex .*
   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
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 17 Dezember 2016, 12:40:28
Sorry war ein Schnellschuss, setze mal

reading1Regex ^(.*)$

Ich vermute wenn dann ein ganz langes reading mit http header erscheint wäre folgendes der richtige Wert:

reading1Regex ^.*(.)$

Denn es kommt wohl nur 1 Zeichen ausserhalb des Headers zurück
Titel: Antw:HTTPMOD Problem
Beitrag von: quichibo am 17 Dezember 2016, 14:46:22
Mit beiden Regex getestet: 2016.12.17 14:45:36 3: HTTPGaragentor: Read response to update didn't match any Reading
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 17 Dezember 2016, 17:45:22
Ok, dann setzen wir noch eine OPtion dazu:

attr HTTPGaragentor  reading1RegOpt s
Titel: Antw:HTTPMOD Problem
Beitrag 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.
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 17 Dezember 2016, 18:10:03
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?
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 17 Dezember 2016, 18:16:24
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
Titel: Antw:HTTPMOD Problem
Beitrag von: quichibo am 17 Dezember 2016, 18:31:14
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)
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 17 Dezember 2016, 18:35:49
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?
Titel: Antw:HTTPMOD Problem
Beitrag von: quichibo am 17 Dezember 2016, 18:52:07
Ja, das habe ich selber programmiert. Da kann stehen was erforderlich ist, damit es funktioniert!
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 17 Dezember 2016, 20:18:29
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
Titel: Antw:HTTPMOD Problem
Beitrag von: quichibo am 18 Dezember 2016, 16:42:04
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. :(
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 18 Dezember 2016, 16:46:09
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!

Titel: Antw:HTTPMOD Problem
Beitrag von: quichibo am 18 Dezember 2016, 16:53:58
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.
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 18 Dezember 2016, 17:06:47
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
Titel: Antw:HTTPMOD Problem
Beitrag von: quichibo am 18 Dezember 2016, 17:26:57
Jap. So ist es top!
Das letzte passt super ohne regopt

Vielen Vielen Dank!!!!!
Titel: Antw:HTTPMOD Problem
Beitrag von: viegener am 18 Dezember 2016, 17:38:48
Bitte - gern geschehen!

Markierst Du den Thread auch noch als gelöst (Titel ändern)?
Titel: Antw:[GELÖST] HTTPMOD Problem
Beitrag von: quichibo am 18 Dezember 2016, 21:45:33
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.
Titel: Antw:[GELÖST] HTTPMOD Problem
Beitrag von: viegener am 18 Dezember 2016, 22:04:56
Danke - besonderes für die ausführliche Zusammenfassung!