Mit notify ein Python Skript ausführen

Begonnen von Ruben, 29 März 2015, 21:11:35

Vorheriges Thema - Nächstes Thema

Ruben

Hallo

Ich habe versucht mit einem notify ein Python Skript aufzurufen.. Aber wie es sich herausstellte hat es nicht funktioniert.  :-\

Ich habe dazu den Sensor als door1 definiert. im FileLog steht folgendes:

FileLog
FileLog_door1   active

contact
door1               open

Danach habe ich das notify definiert, so wie es im Wiki erklärt wurde, mit:

define act_on_door1 notify door1 { if ("$EVENT" eq "open") { system("sudo python test_signalspeichern.py") }

Hat aber leider nicht funktioniert..
Jetzt sollte doch das Skript aufgerufen werden, wenn sich der Status vom Sensor auf open ändert?
Oder hab ich da was völlig falsch verstanden?

Danke für eure Tipps, und Gruss

KernSani

Hi Ruben,

versuch mal die Anführungszeichen um $EVENT weg zu lassen.
Um den Fehler einzugrenzen, kannst erstmal den Perl-Ausdruck in die FHEM-Kommandozeile eingeben, wenn er da funktioniert sollte er auch im notify funktionieren.

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Otto123

Hallo,
define act_on_door1 notify door1:open { system("sudo python test_signalspeichern.py") }

Könnte gehen...
Wenn door1 wirklich open liefert. Schau Dir das am Besten im Eventmonitor an.
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

Ruben

#3
Danke euch für die Tipps.

ich habe mal den Ausdruck { if ("$EVENT" eq "open") { system("sudo python test_signalspeichern.py") }}in die Fhem Kommandozeile eingegeben. Aber das hat er nicht geschluckt..
Es kam die Meldung: $EVENT requires explicit package name at line 1.


Und ich habe noch das folgende notify versucht:

define act_on_door1 notify door1:open  { system("sudo python test_signalspeichern.py") }

Der Schalter liefert im Event Monitor ein open: 2015-03-30 08:15:22 EnOcean door1 open
Das hat aber leider auch nicht geklappt..  :-[
Hab da alles mögliche versucht einzugeben. Wenn ich das definiert habe sollte das doch gleich klappen, ich muss nichts mehr aktivieren oder so?

Im LogFile steht noch:
2015.03.30 07:47:16 3: act_on_door1 return value: -1
Was bedeutet dieses -1 also return value?

pole23

Hallo,

versuch mal bitte, den kompletten Pfad zu dem Skript anzugeben:

define act_on_door1 notify door1:open {system('/hier/steht/der/pfad/test_signalspeichern.py&')}

Welche Rechte hat das Skript?

Otto123

Zitat von: Ruben am 30 März 2015, 10:21:30
ich habe mal den Ausdruck { if ("$EVENT" eq "open") { system("sudo python test_signalspeichern.py") }}in die Fhem Kommandozeile eingegeben. Aber
Das kannst Du so nicht testen, woher soll $EVENT den kommen?
Den Aufruf vom Script könntest Du mit { system("sudo python test_signalspeichern.py") }  testen. Dieser Befehl führt das script einfach aus. Allerdings geht das mit sudo so nicht. Muss das script mit sudo laufen?

Ob dein notify an sich geht kannst Du mit {Log 1, "Test"} testen.
define act_on_door1 notify door1:open  {Log 1, "Test"}

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

Otto123

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

Ruben

Vielen Dank Otto für die Hilfe.

Also das mit define act_on_door1 notify door1:open  {Log 1, "Test"} hat funktioniert.

Ich habe auch noch den beitrag durchgelesen, welcher du verlinkt hast.

Ich habe jenste Möglichkeiten durchprobiert, aber nichts hat bis jetzt funktioniert.
Er hat dort beschrieben dass es bei Ihm mit
define sw_ll_off notify Lichtleiste:off {system('sudo /opt/fhem/elro_1_off.sh&');;}
funktioniert hat.

Ich habe versucht mein Bash Skript auch unter /opt/fehm/test.sh abzuspeichern, das hat aber nicht funktioniert. Ist das überhaupt nötig, oder kann ich das auch in /home/pi/test.sh abspeichern? in diesen Bash skript würde ich dann das Python Skript aufrufen.
Wenn ich das manuell in der Konsole eingebe hat das funktioniert: sudo bash test.sh ==> führt dann das Python file aus

Ich verstehe zudem nicht, was das "&" und die zwei semikolon ;; heissen?
Und warum verendet er plötzlich nur noch einzelne Gänsefüsschen (') anstelle der normalen ("), wie in der Anleitung?



Otto123

Zitat von: Ruben am 30 März 2015, 15:00:35
Ich habe versucht mein Bash Skript auch unter /opt/fehm/test.sh abzuspeichern, das hat aber nicht funktioniert. Ist das überhaupt nötig, oder kann ich das auch in /home/pi/test.sh abspeichern? in diesen Bash skript würde ich dann das Python Skript aufrufen.
Wenn ich das manuell in der Konsole eingebe hat das funktioniert: sudo bash test.sh ==> führt dann das Python file aus

Ich verstehe zudem nicht, was das "&" und die zwei semikolon ;; heissen?
Und warum verendet er plötzlich nur noch einzelne Gänsefüsschen (') anstelle der normalen ("), wie in der Anleitung?
Hallo Ruben,

Du kannst/musst das Script abspeichern wo Du darfst und wo fhem es ausführen darf. Wenn Du es abspeicherst bist Du wahrscheinlich pi. Der darf in /opt/fhem nicht. FHEM läuft als fhem, der darf in /home/pi nicht. Also muss Du dich entsprechend anmelden, sudo verwenden, Rechte setzen. Da gibt es viele Möglichkeiten. Wenn Dir das nicht so ganz klar ist, dann schau mal im ubuntu wiki nach chmod und chown.
Die Gänsefüsschen irritieren mich auch immer, scheinbar ist es egal ob ' oder " zumindest an vielen Stellen. Ob wirklich immer weiß ich nicht. Teilweise werden ' innerhalb von "" verwendet.
Die FHEM Befehle sind hier gut erklärt.
Aus den beiden ;; wird am Ende ein ; und das trennt Shell Befehle. Es könnte also noch einer kommen und der ist leer. So verstehe ich das.
Zu dem & am Ende des Scriptnamens muss jemand anders was sagen :)

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

Hans Franz

Zitat von: Otto123 am 30 März 2015, 22:26:05
Zu dem & am Ende des Scriptnamens muss jemand anders was sagen :)
& = Ausführen im Hintergrund, direkt mit aufrufendem Script weitermachen.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Ruben

Super, vielen Dank für eure Hilfe Otto und Hans Franz. :)

Das mit den Rechten habe ich angeschaut.
Ich habe mit sudo chmod +x /home/pi/test_signalspeichern.py die Ausführbarkeit eingestellt, somit sollten alle die Datei ausführen dürfen.
nach ls -lisa /home/pi/test_signalspeichern.py sah es dann so aus
1342 4 -rwxr-xr-x 1 fhem pi 284 Mar 30 08:53 /home/pi/test.py

Der folgende Test hat funktioniert:
define act_door notify door:open  {Log 1, "Test"}

Jetzt wollte ich noch das python skript ausführen mit:
define act_door notify door:open {system("sudo /home/pi/test_signalspeichern.py &")}

Das funktioniert aber nach wie vor nicht :(
Hab da auch jenste Syntax varianten versucht, aber das skript lässt sich einfach nicht ausführen mit fhem..

Habt ihr noch Ideen wo ich den Fehler noch suchen könnte, oder was ich falsch gemacht haben könnte?
Ich bin wirklich froh um jeden Tipp! Danke nochmals

Otto123

Zitat von: Ruben am 31 März 2015, 10:13:31
Ich habe mit sudo chmod +x /home/pi/test_signalspeichern.py die Ausführbarkeit eingestellt, somit sollten alle die Datei ausführen dürfen.
Hallo Ruben,
ich bin nicht so der Linux Spezi, ich glaube aber nur Ausführbarkeit reicht nicht immer aus. Man muss auch lesen können, nur so eine Idee.
Wenn es unbedingt mit sudo sein muss, schau hier.
Einfach so wird fhem bei sudo nach dem Passwort gefragt, dass geht nicht.

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

pole23

Hallo,

kopier die Datei in das FHEM Verzeichnis /opt/fhem/FHEM und gibt der Datei mal testweise alle Rechte. Nur um das mal auszuschliessen.

sudo chmod 777 test_signalspeichern.py

In der fhem.cfg

define act_on_door1 notify door1:open {system('/opt/fhem/FHEM/test_signalspeichern.py&')}

Ruben

@Otto123: Danke für den Link :) hab das auch ausprobiert, aber vergebens..

@pole23: Hallo und danke auch dir für die tipps!

Also ich hab der Datei alle rechte gegeben mit chmod 777, jetzt bekomme ich -rwxrwxrwx, sieht schonmal gut aus.

Aber ich kann die Datei nach /opt/fhem/FHEM komiperen, da kommt eine Error: Permission denied!

Wie kann ich das umgehen?

Otto123

Du meldest Dich am Terminal bei Raspi an, als pi.
Du stehst im /home/pi
dann machst Du sudo cp test_signalspeichern.py /opt/fhem/FHEM

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