HTTPMOD-Funktionalitäten in homebridge (homekit) nutzen

Begonnen von dreale, 03 Juli 2018, 11:30:32

Vorheriges Thema - Nächstes Thema

dreale

Hallo Zusammen

Ich habe zu Hause meine Rollläden mit einer Steuerung von Feller (Feller Zeptrion Air 2K Wlan Module) am Laufen. Da diese auf HTTPMOD basieren, benutze ich für die Steuerung innerhalb FHEM das HTTPMOD Modul, alles läuft hier bestens, inklusive Szenen auslösen, Status abfragen, etc.

Nun möchte ich aber die Steuerung nicht nur aus FHEM heraus tätigen sondern vor allem aus homekit (mittels Homebridge) heraus. Zurzeit benutze ich dafür das generische ROLLO Modul. Das funktioniert auch, aber natürlich eher eingeschränkt, weil es keine abfragen zum Status machen kann und die Schließung/Öffnung sehr ungenau mittels Sekunden angegeben werden muss (sehr schwierig bei gruppenschliessungen).

Nun zu meiner Frage: gibt es ein Modul, dass ich verwenden könnte, um die Funktionalitäten von HTTPMOD ins homekit "rüberretten" kann? Also etwas Ähnliches wie das generische ROLLO Modul aber mit mehr Funktionalitäten?

wäre cool wenn mir jemand etwas Licht ins Dunkel bringen könnte

vielen dank schonmal, dreale

wires.io

Ich betreibe einen umgeflashten Sonoff ESP8266 erfolgreich mit homebridge und folgendem Eintrag in der config.json
       "accessories": [
                {
                        "accessory": "Http",
                        "name": "Coffeemaker",
                        "switchHandling": "realtime",
                        "http_method": "POST",
                        "on_url":      "http://IP-Adresse/On",
                        "off_url":     "http://IP-Adresse/Off",
                        "status_url":  "http://IP-Adresse/Status",
                        "service": "Switch",
                        "sendimmediately": "",
                        "username" : "",
                        "password" : ""
                }]


Nun möchte ich diesen Schalter in FHEM betreiben und habe dazu folgendes angelegt:
define Coffeemaker HTTPMOD none 0
attr Coffeemaker get01Name status
attr Coffeemaker get01URL http://IP-Adresse/Status
attr Coffeemaker getHeader1 Content-Type: text/plain
attr Coffeemaker get01Regex .
attr Coffeemaker set01Name on
attr Coffeemaker set02Name off
attr Coffeemaker set01URL http://IP-Adresse/On
attr Coffeemaker set02URL http://IP-Adresse/Off
attr Coffeemaker set01NoArg
attr Coffeemaker set02NoArg


Ein- und ausschalten geht. Der Status wird aber immer mit "1" ausgelesen, obwohl im HTTP Body entweder nur "0" oder nur "1" steht:

verbose 5 zeigt:
2018.07.04 19:30:15 4: Coffeemaker: HandleSendQueue sends request type get01 to URL http://IP-Adresse/Status, No Data,
header: Content-Type: text/plain,
timeout 2
2018.07.04 19:30:15 5: HttpUtils url=http://IP-Adresse/Status
2018.07.04 19:30:15 5: HttpUtils request header:
GET /Status HTTP/1.0
Host: IP-Adresse
User-Agent: fhem
Accept-Encoding: gzip,deflate
Content-Type: text/plain
Content-Length: 0

2018.07.04 19:30:15 4: http://IP-Adresse/Status: HTTP response code 200
2018.07.04 19:30:15 5: HttpUtils http://IP-Adresse/Status: Got data, length: 2
2018.07.04 19:30:15 5: HttpUtils response header:
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 2
Connection: close
Access-Control-Allow-Origin: *
2018.07.04 19:30:15 4: Coffeemaker: Read callback: request type was get01 retry 0,
Header: HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 2
Connection: close
Access-Control-Allow-Origin: *,
Body: 0

2018.07.04 19:30:15 5: Coffeemaker: ExtractSid called, context get, num 01
2018.07.04 19:30:15 4: Coffeemaker: CheckAuth decided no authentication required
2018.07.04 19:30:15 5: Coffeemaker: ExtractReading state with regex /.*/...
2018.07.04 19:30:15 5: Coffeemaker: 1 capture group(s), matchlist = 1
2018.07.04 19:30:15 4: Coffeemaker: ExtractReading for get01-1 sets state to 1
2018.07.04 19:30:15 4: Coffeemaker: Read response to get01 matched Reading(s) state
2018.07.04 19:30:15 5: Coffeemaker: HandleSendQueue called, qlen = 0


Habe auch schon diverse andere Regex, mit Ergebnis "1" oder "No match" probiert:
attr Coffeemaker get01Regex Body: ([\d\.]+)
attr Coffeemaker get01Regex \d
attr Coffeemaker get01Regex \D


Was mache ich falsch?

wires.io

#2
Der httpbody hat den korrekten Wert. Kann es sein, dass die regex auf den httpheader und nicht den httpbody angewendet wird?

Mit wget bekomme ich ebenfalls nur den httpbody, also den korrekten Wert zurück.

Geht jetzt: https://forum.fhem.de/index.php/topic,45176.msg817605.html#msg817605