setreading nach shellcommand mit $result in DOIF

Begonnen von bgewehr, 04 Februar 2018, 10:17:12

Vorheriges Thema - Nächstes Thema

bgewehr

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?
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

MadMax-FHEM

Wie sieht denn $result im "komplexen Fall" aus?

Wenn es nicht ein "simpler Wert" ist, evtl. \"$result\"

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

bgewehr

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...
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

bgewehr

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?
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

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

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

bgewehr

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?
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

Otto123

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

amenomade

([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???
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

bgewehr

#9
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!
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

Petrosilius Zwackelmann

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
FHEM 6 auf RaspPi V3:
HM_LAN / CUNX / HUEBridge /OneWire / Homebridge / SONOS / Harmony

Petrosilius Zwackelmann

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
FHEM 6 auf RaspPi V3:
HM_LAN / CUNX / HUEBridge /OneWire / Homebridge / SONOS / Harmony

bgewehr

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
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868