[Gelöst] Dummy Wert in Shell Befehlssatz einfügen???

Begonnen von Fuchshausen, 11 Januar 2018, 16:45:04

Vorheriges Thema - Nächstes Thema

Fuchshausen

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.

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Fuchshausen

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

DeeSPe

Alle Sonderzeichen in Perl mit \ escapen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Fuchshausen

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

Otto123

#5
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Fuchshausen

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

CoolTux

#7

Code war falsch gedacht.
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

Otto123

@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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Fuchshausen

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

CoolTux

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