Devolo Home Control: FHEM über ein Http-Gerät steuern, so geht es:

Begonnen von eff_Home, 03 März 2018, 15:08:27

Vorheriges Thema - Nächstes Thema

eff_Home

Ich habe gerade lange versucht aus Devolo Home Control einen Befehl an FHEM zu senden und bin vor allem am ( seit der FHEM Version 5.8  etwa mitte 2017) eingeführten csrfToken gescheitert.

Hier aus meiner Erfahrung deshalb ein kleines HowTo für alle, so gehts ganz einfach:

Meine alten http Befehle in FHEM haben für z.B: "fs20 set lichtschalter on" so ausgesehen:
http://192.168.0.2:8083/fhem?cmd.FS20=set%20lichtschalter%20on

Neu hinzu kommt wegen des Sicherheitsfeatures, dem  "csrfToken*: &fwcsrf=meinpasswort
Sieht dann etwa so aus:
http://192.168.0.2:8083/fhem?cmd.FS20=set%20lichtschalter%20on&fwcsrf=meinpasswort
und dann idealerweise gleich noch XHR=1 dranhängen, damit wir nicht bei jedem Befehl die FHEM-Gui aufrufen,
der komplette Beispielaufruf den wir später in Devolo als Http-Gerät verwenden können sieht dann so aus:
http://192.168.0.2:8083/fhem?cmd.FS20=set%20lichtschalter%20on&fwcsrf=meinpasswort&XHR=1

Damit das funktioniert müssen wir aber erst das csrfToken Attribut in der FHEM Konfiguration setzen.
Zur besseren Übersicht erstellen wir dazu einen neuen FHEMWEB Zugang in der fhem.cfg:

##############################################
# WEBapi für http Steuerung z.B aus Devolo ###
##############################################
###############################  Web API auf Port 8033  http://192.168.0.2:8033/fhem?cmd.
define WEBapi FHEMWEB 8033 global
attr WEBapi csrfToken meinpasswort
############################### Ausschalten zum Testen:  "attr WEB* csrfToken none" oder  "attr WEBapi  csrfToken none" 
# attr WEBapi  csrfToken none
############################### Mit allowfrom kann der Aufruf auf das interne Netzwerk eingeschränkt werden, zum Beispiel:
# attr WEBapi allowfrom 192.168.0.*


Jetzt sieht mein kompletter  Befehl (Auf Port 8033) so aus:

http://192.168.0.2:8033/fhem?cmd.FS20=set%20lichtschalter%20on&fwcsrf=meinpasswort&XHR=1

Die Befehle finde ich in der FHEM Logdatei, zum Beispiel:
FS20 set heizung_pumpe on
Das Gerät kommt gleich nach dem
http://<FHEM-IP>:<WEBapi-Port>/fhem?cmd.
also:
http://192.168.0.2:8033/fhem?cmd.FS20= 
damit ich sie in der URL mitgeben kann müssen Sonderzeichen und Leerschläge (%20) URL-encoded werden
( zum Beispiel über https://www.urlencoder.org/ ) und sehen dann so aus:
set%20heizung_pumpe%20on
zusammen:
http://192.168.0.2:8033/fhem?cmd.FS20=set%20heizung_pumpe%20on
dann noch  "&fwcsrf=meinpasswort&XHR=1" hintendran und der Aufruf ist komplett:

http://192.168.0.2:8033/fhem?cmd.FS20=set%20heizung_pumpe%20on&fwcsrf=meinpasswort&XHR=1

Baukasten:
<FHEM-IP>  <WEBapi-Port>  <Gerät>  <Befehl URL-Enkodiert>  <WEBapi csrfToken>
http://<FHEM-IP>:<WEBapi-Port>/fhem?cmd.<Gerät>=<Befehl URL-Enkodiert>&fwcsrf=<WEBapi csrfToken>&XHR=1



Diese Befehle kann ich dann in Devolo Home Control unter Geräte > + > Andere Geräte >  Http-Gerät
als Geräte URL eintragen, also zum Beispiel:

Name des HTTP-Gerätes:    Wohnzimmerlicht EIN
Geräte-URL:  http://192.168.0.2:8033/fhem?cmd.FS20=set%20Wohnzimmerlicht%20on&fwcsrf=meinpasswort&XHR=1
Ort des Gerätes:  Wohnzimmer

und (off)

Name des HTTP-Gerätes:    Wohnzimmerlicht AUS
Geräte-URL: http://192.168.0.2:8033/fhem?cmd.FS20=set%20Wohnzimmerlicht%20off&fwcsrf=meinpasswort&XHR=1
Ort des Gerätes:  Wohnzimmer

Dann noch in der (Devolo-) Übersicht > Bearbeiten eine neue Seite "Wohnzimmer" anlegen und beide Geräte dort einfügen.
Danach kann ich über die Smartphone-App von Devolo mit rechts und links Wischen die "Wohnzimmer"-Seite aufrufen und die FHEM-Lichtschalter bedienen.

Nach diesem Muster  lassen sich zumindest schon mal alle FHEM Befehle einfach in Devolo Home Control einbinden und über die Devolo Phone-App steuern.
Was jetzt noch fehlt sind die ganzen Rückgabe-Werte aus FHEM, wäre schön wenn ich zum Beispiel Temperaturen der alten HMS oder FS20-Geräte abfragen könnte.

CoolTux

Zitat von: eff_Home am 03 März 2018, 15:08:27
Zur besseren Übersicht erstellen wir dazu einen neuen FHEMWEB Zugang in der fhem.cfg:

##############################################
# WEBapi für http Steuerung z.B aus Devolo ###
##############################################
###############################  Web API auf Port 8033  http://192.168.0.2:8033/fhem?cmd.
define WEBapi FHEMWEB 8033 global
attr WEBapi csrfToken meinpasswort
############################### Ausschalten zum Testen:  "attr WEB* csrfToken none" oder  "attr WEBapi  csrfToken none" 
# attr WEBapi  csrfToken none
############################### Mit allowfrom kann der Aufruf auf das interne Netzwerk eingeschränkt werden, zum Beispiel:
# attr WEBapi allowfrom 192.168.0.*

NEIN!!! Das machen wir nicht. Wir schreiben nicht in die Konfigdatei sondern verwenden das zur Konfiguration gedachte FHEMWEB.


Ansonsten ein guter Beitrag. Danke. Obwohl ich denke das er im Wiki besser aufgehoben wäre.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net