Hauptmenü

[GELÖST] HTTPMOD Problem

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

Vorheriges Thema - Nächstes Thema

quichibo

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

viegener

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)?

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

quichibo

Nein, es funktioniert nichts. Kein Get und kein Set.

Ist das denn das richtige Modul für mein Vorhaben, oder gibt es ein besseres?

viegener

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
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

quichibo

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.

viegener

Dann verweise ich nochmal auf Antwort #1 - Ich denke da fehlt es noch an Festlegungen was im Reading auftauchen soll
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

quichibo

#6
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.

viegener

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 .*

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

quichibo

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

viegener

Wie bereits gesagt, ich würde das Reading nicht Status nennen, wer weiss wo der Wert 1 sonst herkommt

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

quichibo

Hatte das so verstanden, es nicht STATE zu nennen.
Egal, geändert auf Zustand, gleiches Verhalten.

viegener

mach doch mal ein list des HTTPMOD device und poste das Ergebnis hier (in Code tags bitte!)
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

quichibo

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

viegener

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
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

quichibo

Mit beiden Regex getestet: 2016.12.17 14:45:36 3: HTTPGaragentor: Read response to update didn't match any Reading