Hallo,
ich habe einen DOIF, der einen Fehler ausgibt:
define carnetAct DOIF ([carnetHeating] eq "VENTILATION_on") {
my $result = qx "python /home/bananapi/carnet/volkswagen-carnet-client/vw_carnet_web.py startRemoteAccessVentilation";
fhem "setreading carnetHeating cmdResult $result";
}
DOELSEIF
([carnetHeating] eq "HEATING_on") {
my $result = qx "python /home/bananapi/carnet/volkswagen-carnet-client/vw_carnet_web.py startRemoteAccessHeating";
fhem "setreading carnetHeating cmdResult HEATING_on_executed";
}
DOELSEIF
([carnetHeating] eq "AUTO") {fhem "setreading carnetHeating cmdResult AUTO_executed";
}
DOELSEIF
([carnetHeating] eq "off") {
my $result = qx "python /home/bananapi/carnet/volkswagen-carnet-client/vw_carnet_web.py stopRemoteAccessHeating";
fhem "setreading carnetHeating cmdResult stop_executed";
}
ich erhalte im DOIF den Fehler:
error
{ my $result = qx "python /home/bananapi/carnet/volkswagen-carnet-client/vw_carnet_web.py startRemoteAccessVentilation"; fhem "setreading carnetHeating cmdResult $result"; }: Usage: setreading <name> <reading> <value> where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.
das $myresult is leider etwas komplex:
/-/profile/check-security-level
{"errorCode":"1","errorType":"CORE.INSUFFICIENT_SEC_LEVEL"}
/-/rah/quick-start
{"errorCode":"1","errorType":"RAH.INSUFFICIENT_SEC_LEVEL"}
Wenn ich einen festen Wert angebe wie in den unteren ELSEIFs, dann geht das.
Also Frage: Wie kann ich das Ergebnis meines Shellcommands an das Reading schreiben?
Wie sieht denn $result im "komplexen Fall" aus?
Wenn es nicht ein "simpler Wert" ist, evtl. \"$result\"
Gruß, Joachim
Das Problem scheint woanders zu liegen. Die Variable ist im Moment einfach leer, weil offensichtlich der shellcommand Befehl gar nicht ausgeführt wird. Daher meckert das setreading, weil es keinen Wert bekommt.
Also neue Frage: Warum wird mein qx nicht korrekt ausgeführt? In einem notify hat das schon mal funktioniert...
Habe nun mal das Ergebnis in eine log Datei umgelenkt. Das shellcommand wird ausgeführt, aber das Ergebnis kommt beim doif nicht an.
Also Frage: Gibt es bei DOIF für qx etwas besonderes zu berücksichtigen?
Die Frage dann besser zum Unterforum DOIF/Hilfsmodule verschieben...
Nutze DOIF nicht (wirklich) daher kann ich da nicht helfen...
Allerdings kann fhem "consolenbefehle" auch ohne qx aufrufen...
qx ist ja dann eher perl!?
https://forum.fhem.de/index.php?topic=12611.0
Oder wie immer: commandref
Gruß, Joachim
Das was Du versuchst hat doch mit DOIF erstmal nix zu tun? Auf Console geht Dein Befehl, dann probiere doch stück für stück weiter:
Alles in der FHEM Kommanozeile
"python /home/bananapi/carnet/volkswagen-carnet-client/vw_carnet_web.py startRemoteAccessVentilation"
{qx "python /home/bananapi/carnet/volkswagen-carnet-client/vw_carnet_web.py startRemoteAccessVentilation"}
{my $result = qx "python /home/bananapi/carnet/volkswagen-carnet-client/vw_carnet_web.py startRemoteAccessVentilation";return $result}
Bedenke, die erste Variante ist NonBlocking von Hause aus, bei allen anderen musst Du Dich kümmern, dass FHEM nicht stehen bleibt.
Gruß Otto
nonBlocking wäre super, die erste Variante führt das Script auch aus, wenn ich es in die fhem Kommandozeile eingeben, aber leider nicht innerhalb des doif commands.
Sobald die {} drum sind, wird der Befehl nicht mehr aufgerufen. In keinem Log steht irgendein Fehler.
Also Frage: Wie triggert man einen non blocking shellcmd von doif aus?
Glaub ich Dir nicht :)
Ich habe eine Datei /opt/fhem/willi.txt die ist so erzeugt {system ("echo 'echo Test' > willi.txt")}
Jetzt mach ich mir ein DOIF
defmod di_Test DOIF ([19:48]) ("cat willi.txt")
Und dann steht zur Ausführungszeit in meinem Logecho Test
Also bei DOIF keine Besonderheiten?!
Gruß Otto
([Bedingung])
("python /home/bananapi/carnet/volkswagen-carnet-client/vw_carnet_web.py startRemoteAccessVentilation")
Aber ich habe ein Verständnisproblem: du willst ein "nonBlocking", aber du möchtest trotzdem das Ergebnis dann nutzen???
Nein, dann verzichte ich auf das Ergebnis, wenn ich nonBlocking haben kann ;-)). Wäre schön gewesen, den errorcode zu bekommen, um zu prüfen, ob die Ausführung erfolgreich war. Wenn nicht, stehe ich ja doch wieder vor dem kalten Auto... Vielleicht sende ich ihn mir per mqtt hinterher, dann ist das alles nonBlocking.
Das hier funktioniert:
([carnetHeating] eq "VENTILATION_on") (
"python /home/bananapi/carnet/volkswagen-carnet-client/vw_carnet_web.py startRemoteAccessVentilation >> /home/bananapi/carnet/volkswagen-carnet-client/carnetFhem.log",
setreading carnetHeating currentState VENTILATION_on
)
DOELSEIF
([carnetHeating] eq "HEATING_on") (
"python /home/bananapi/carnet/volkswagen-carnet-client/vw_carnet_web.py startRemoteAccessHeating >> /home/bananapi/carnet/volkswagen-carnet-client/carnetFhem.log",
setreading carnetHeating currentState HEATING_on
)
DOELSEIF
([carnetHeating] eq "AUTOMATIC") ()
DOELSEIF
([carnetHeating] eq "off") (
"python /home/bananapi/carnet/volkswagen-carnet-client/vw_carnet_web.py stopRemoteAccessHeating >> /home/bananapi/carnet/volkswagen-carnet-client/carnetFhem.log",
setreading carnetHeating currentState off
)
Jedesmal, wenn ich jetzt in Apple Home oder Elgato Eve den Thermostat des Autos auf heizen oder kühlen oder stop oder Automatic (to be done) stelle, wird das passende Python Script ausgeführt, das dem CarNet die passenden Befehle liefert. Nun müssen wir "nur" noch den security error beim Senden der Befehle mit SPIN überwinden (ich glaube, dass da Cookies nicht korrekt gesetzt werden - oder sowas).
Dank Euch habe ich genau das erreicht, was ich wollte.
Vielen Dank!
Hallo bgewehr,
gerne würde ich auch die Heizung in meinem GTE über FHEM einschalten ....
Ich komme aber nicht dahinter, welche Grundvoraussetzungen erforderlich sind um das Skript zu benutzen.
Ich hatte bisher nichts mit Python und MQTT gemacht deswegen habe ich folgendes auf meinem Raspberry nachinstalliert.
sudo apt-get install python-dev python-rpi.gpio
sudo apt-get install mosquitto mosquitto-clients
sudo cpan install Net::MQTT:Simple
sudo cpan install Net::MQTT:Constants
Möglicherweise habe ich aber einen falschen Client installiert, da die letzte Fehlermeldung nach einem patho mqtt clinent sucht...
Traceback (most recent call last):
File "/opt/fhem/carnet/volkswagen-carnet-client/vw_carnet_web.py", line 16, in <module>
import lib_mqtt as MQTT
File "/opt/fhem/carnet/volkswagen-carnet-client/lib_mqtt.py", line 11, in <module>
import paho.mqtt.client as mqtt
ImportError: No module named paho.mqtt.client
kannst du mir hier weiterhelfen oder deine cfg hier mal veröffentlichen?
Danke
Gruß Manuel
Hallo bgewehr,
ich bin nun ein wenig weiter gekommen...
Folgende Pakete habe ich nun nachinstalliert und somit keine Fehlermeldungen mehr...
sudo apt-get install python-pip -y
sudo pip install paho-mqtt
sudo pip install requests
Bei verbose 5 bekomme ich folgende LOG Einträge:
0
2018.11.26 21:34:08 4: WEB_192.178.168.52_49824 POST /fhem?cmd.carnetHeating=set%20carnetHeating%20HEATING_on&room=carnet&XHR=1&fw_id=10757; BUFLEN:0
2018.11.26 21:34:08 5: Cmd: >set carnetHeating HEATING_on<
2018.11.26 21:34:08 4: dummy set carnetHeating HEATING_on
2018.11.26 21:34:08 5: Starting notify loop for carnetHeating, 1 event(s), first is HEATING_on
2018.11.26 21:34:08 5: End notify loop for carnetHeating
2018.11.26 21:34:08 4: WEB: /fhem?cmd.carnetHeating=set%20carnetHeating%20HEATING_on&room=carnet&XHR=1&fw_id=10757 / RL:20 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
Das carnetFhem.log File wird angelegt bleibt aber ohne Einträge.
Kannst du mir hier weiterhelfen?
MfG
Manuel
Tut mir leid, Manuel, ich habe diese Posts leider völlig übersehen. Schau bitte hier für die Details:
https://forum.fhem.de/index.php?topic=83090.0#lastPost