Hallo,
ich habe eine externe Heizung Steuerung die ich über die POST als HTTP Methode mit Daten füttern kann.
Beispiel: Änderung Solltemperatur in einem Raum:
defmod Solltemp_notifyOFF notify Fenster:off defmod ConShell2 at +00:00:01 "url='http://192.168.0.100/set/json/v1/1/soll/9/' curl -X POST -F 'user=user -F 'password='password ' -F 'soll='20.20 $url"
Aktuell muss ich, wenn ich die Solltemperatur ändern möchte
über Fhem, hinter 'soll=' den Wert händisch ändern.
Alle Versuche in den Shell eine Dummy Wert einzufügen schlagen fehl.
Hat einer von Euch eine Idee, wie man den Dummy einfügen kann.
Ich denke da bleibt nur in Perl zu wechseln.
defmod Solltemp_notifyOFF notify Fenster:off {\
fhem "defmod ConShell2 at +00:00:01 \"url='http://192.168.0.100/set/json/v1/1/soll/9/' curl -X POST -F 'user=user -F 'password='password ' -F 'soll='".ReadingsNum("SENSORNAME","temperature","")." $url\"";;\
}
Gruß
Dan
Hallo Dan,
danke für deine mühe.
Leider kommt diese Fehlermeldung.
Zitat
Global symbol "@gmail" requires explicit package name (did you forget to declare "my @gmail"?) at (eval 1964654) line 1.
Global symbol "$url" requires explicit package name (did you forget to declare "my $url"?) at (eval 1964654) line 1.
syntax error at (eval 1964654) line 1, at EOF
Mein Password enthält unter andern @gmail daher die erste Fehlermeldung.
Ich habe leider keine Ahnung in welche Richtung ich denken muss.
Gruß
Tom
Alle Sonderzeichen in Perl mit \ escapen.
Gruß
Dan
Hallo Dan,
defmod Solltemp_notifyOFF notify Fenster:off {\
fhem "defmod ConShell2 at +00:00:01 \"url='http://192.168.0.100/set/json/v1/1/soll/9/'
curl -X POST -v -F 'user=123456\@gmail.com' -F 'password=password' -F 'soll='18 \$url\"";;\
}
Ich habe den Soll Wert erstmal manuell gesetzt.
Funktioniert leider nicht. Es gibt keinen Log Eintrag und auch im Event ist nicht zu sehen.
Ich habe in den curl von –v (DEBUG) eingefügt damit wenn es klappen sollte die Daten in der Logfile zu sehen sind.
Gruß
Tom
Hallo Tom,
grundlegend empfehle ich den shell Befehl in eine script Datei zu packen und diese mit Übergabe Parameter aufzurufen. Das vereinfacht die Verschachtelung mit ' und " sowie escapen von Sonderzeichen wesentlich!
Beispiel /opt/fhem/test.sh
#!/bin/sh
# Parameter Übergabe
host=$1
name=$2
event=$3
curl http://$host:8083/fhem?cmd=set%20$name%20$event
Aufruf im FHEM z.B. in einem notify
" ./test.sh Hostname $NAME $EVENT"
Das Beispiel ist älter und funktioniert so normalerweise nicht mehr im Zugriff auf den FHEM Host wegen csrf Token.
Gruß Otto
Hallo Otto,
ja du hast recht, Danke.
Es ist grundsätzlich viel einfacher über einen Script Datei
Leider will die Parameter Übergabe über $... nicht funktionieren.
Wenn ich in den notify z.B.:
"/opt/fhem/Con112.sh 20.2"
Eintrage, wird der Wert in die Script Datei übernommen und die Solltemperatur im Raum gesetzt.
Beim Aufruf der notify z.B.:
"/opt/fhem/Con112.sh $LezterSollNikBoden"
läuft die Script Datei ohne Fehlermeldung. Aber irgendwie wird die (20.2) nicht mit übertagen.
Hast du eventuell einen Lösungs Ansatz.
defmod Solltemp_notifyOFF2 notify Fenster_Nik:off "/opt/fhem/Con112.sh $LezterSollNikBoden"
attr Solltemp_notifyOFF2 room Niklas
defmod Fenster_Nik dummy
attr Fenster_Nik room Niklas
attr Fenster_Nik webCmd :
defmod LezterSollNikBoden dummy
attr LezterSollNikBoden room Niklas
setstate Fenster_Nik off
setstate Fenster_Nik 2018-01-12 15:12:41 state off
setstate LezterSollNikBoden 20.2
setstate LezterSollNikBoden 2018-01-12 14:23:58 state 20.2
Gruß
Tom
Code war falsch gedacht.
@Leon Ich glaube set magic geht an der Stelle nicht :-[
So geht es: {my $a = Value("GaragenTor") ;; system("./test1.sh $a")}
Vielleicht geht es eleganter, ich weiß es nicht besser.
Gruß Otto
Hallo Leute,
Danke an alle.
Hallo Otto dein Ansatz war die Lösung
mit B.s.:
Fenster_Nik:off {my $a = Value("LezterSollNikBoden") ;; system("/opt/fhem/Con112.sh $a")}
Funktioniert die Parameter Übergabe, in die Shell Datei.
Ihre seit echt SPITZE.
Gruß
Tom
Zitat von: Otto123 am 12 Januar 2018, 23:47:56
@Leon Ich glaube set magic geht an der Stelle nicht :-[
So geht es: {my $a = Value("GaragenTor") ;; system("./test1.sh $a")}
Vielleicht geht es eleganter, ich weiß es nicht besser.
Gruß Otto
Hallo Otto,
Du hast natürlich Recht. Heißt ja nicht umsonst
SetMagic ;D
Danke Dir