Probleme beim Starten von Shell Scripten über FHEM

Begonnen von foxmulder, 18 Oktober 2013, 17:14:14

Vorheriges Thema - Nächstes Thema

foxmulder

Hallo zusammen,

ich betreibe FHEM auf einem Raspberry. Läuft alles soweit super. Nun möchte ich ein kleines Shell Script von FHEM aus mit einem Button auf dem Raspberry starten.
Leider bekomme ich das noch nicht so recht hin. Das Script soll einen USB Stick am Raspberry mounten bzw. unmounten.

Dazu habe ich einen Dummy Schalter erstellt:

define USBStick dummy
attr USBStick alias USB-Stick
attr USBStick devStateIcon mount:edit_expand , unmount:edit_collapse
attr USBStick eventMap on:mount , off:unmount
attr USBStick room SystemTools
attr USBStick webCmd mount:unmount


Soweit so gut...

jetzt möchte ich beim schalten von "mount" das "mount-Script" starten und beim schalten von "unmount" das "unmount-Script".

Dazu habe ich 2 notifys erstellt:

Mount
define USBStick_mount notify USBStick { if ( Value("USBStick") eq "mount" ) {system(/home/pi/usb-mount.sh);;} }
attr USBStick_mount room SystemTools


Unmount
define USBStick_unmount notify USBStick { if ( Value("USBStick") eq "unmount" ) {system(/home/pi/usb-unmount.sh);;} }
attr USBStick_unmount room SystemTools


Geschaltet wird der Notify wohl schon...aber das Script wird nicht ausgeführt.
Im Log erhalte ich Fehler:

2013.10.18 17:10:32 3: USBStick_mount return value: Bareword "usb" not allowed while "strict subs" in use at (eval 1158) line 1.
Bareword "mount" not allowed while "strict subs" in use at (eval 1158) line 1.
Bareword "sh" not allowed while "strict subs" in use at (eval 1158) line 1.

2013.10.18 17:10:32 3: USBStick_unmount return value: Bareword "usb" not allowed while "strict subs" in use at (eval 1159) line 1.
Bareword "unmount" not allowed while "strict subs" in use at (eval 1159) line 1.
Bareword "sh" not allowed while "strict subs" in use at (eval 1159) line 1.


Wenn ich die Scripte ins FHEM Verzeichnis schiebe (opt/fhem/) und den Pfad im Notify entsprechen anpasse erhalte ich im Log folgenden Fehler:
2013.10.18 17:11:43 3: USBStick_mount return value: Search pattern not terminated at (eval 1162) line 1.

Habt ihr eine Idee was da los ist und wie ich das zum Laufen bekommen kann?

Vielen Dank für eure Hilfe und viele Grüße
Fox

Puschel74

Hallo,

evtl. so:

define USBStick_unmount notify USBStick { if ( Value("USBStick") eq "unmount" ) {"system(/home/pi/usb-unmount.sh");;} }
attr USBStick_unmount room SystemTools


oder anstelle vom " beim Systemaufruf auch mit einfachen Anführungszeichen '.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

foxmulder

Hallo,

danke für die Hilfe!

Also somit ist es auf jedenfall schon mal anders...aber funktionieren tut es leider noch nicht.

Folgenden Fehler bekomme ich mit deiner Syntax

2013.10.18 20:54:56 3: USBStick_mount return value: syntax error at (eval 1202) line 1, near ""system(/home/pi/usb-mount.sh")"

Mit einer kleinen Versetzung des " hinter die Klammer kommt kein wirklicher Fehler mehr....also:

USBStick { if ( Value("USBStick") eq "mount" ) {"system(/home/pi/usb-mount.sh)";;} }

Logeintrag:
2013.10.18 20:56:13 3: USBStick_mount return value: system(/home/pi/usb-mount.sh)

Aber irgendwie scheint es dennoch nicht zu funktionieren denn der USB Stick wird nicht gemountet. :-/

Puschel74

#3
Hallo,

Zitatoder anstelle vom " beim Systemaufruf auch mit einfachen Anführungszeichen '.

Grüße

Edith:

ZitatMit einer kleinen Versetzung des " hinter die Klammer kommt kein wirklicher Fehler mehr....also:

Stimmt, das war mein Fehler.
Das " oder ' gehört hinter die Klammer wie du richtig bemerkt hast.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

foxmulder

ob " oder ' bringt beides nix...ist bei beidem das gleiche Ergebnis..:-(

Puschel74

Hallo,

das Skript ist aber schon ausführbar?

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Jaydee

öhm, ich bin nicht sooo der Experte, aber gehören die Anführungszeichen nicht IN die (runden) Klammern?

Also:
{system("/home/pi/usb-mount.sh")}

die einfachen anführungszeichen brauchst du eigentlich nur, wenn dein System-Befehl selbst Anführungszeichen enthält und sie sich dann gegenseitig stören würden, also z.b.:

{system('echo "blaaa echotext"')}

LG
Jan

foxmulder

Jups...Script hat sogar 777 als Rechte bekommen...

Wenn ich die " innerhalb der runden Klammern () setze steht folgendes in der Log:

2013.10.18 21:56:15 3: USBStick_unmount return value: -1

USB Stick wird jedoch weiterhin nicht gemountet / unmountet.

Hier mal das "Script" zur info:

#!/bin/sh

sudo mount -t ntfs -o uid=pi,gid=pi /dev/sda /media/usbstick/


Manuelles ausführen funzt problemlos!

PeMue

Hallo foxmulder,

da habe ich hier ein Problem, das (vermutlich) dieselbe Ursache hat. Leider habe ich auch noch keine Lösung ...

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

JoeALLb

Läuft dein fhem unter root? zum mounten benötigt man häufig rootrechte...
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

PeMue

Hi Joe,

fhem läuft bei mir unter dem user fhem, aber mit sudo müsste ich doch die Rechte zum Ausführen bekommen, oder?

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

foxmulder

hmm....das ist doch echt komisch!

Bei mir läuft FHEM auch unter dem "fhem" user.

Ich hab auch schon versucht das Script diesem User zuzuweisen. Klappt aber genauso wenig. Da das Script auch volle Rechte (777) hat sollte das m.M. auch nichts mehr mit dem User zu tun haben.

Ist halt auch irgendwie doof das man keine weiteren Logs hat um zu sehen wo es genau hängt. :-(
Ich vermute das es irgendwo ausserhalb von FHEM hängt...das der Befehl zum ausführen des Scripts zwar passt aber irgendwas noch nicht passt damit es ausgeführt wird. :-/

foxmulder

Hab es hinbekommen!!! :-)

Meine Vermutung das es nicht an FHEM liegt war richtig! Hab zum testen mal versucht über den FHEM User direkt über die Shell das Script zu starten. Da ja wegen dem "mount" sudo vorrangestellt ist wird für den FHEM User das sudo Passwort abgefragt! Da hängt es dann! :-/

Also schwups in der "suderos" den fhem user analog zum standard "pi" User eingetragen und die Shellrechte in der "passwd" für "fhem" wieder entfernt (/bin/false). Wird ja nicht benötigt!

Und siehe da...nun funzt die Steuerung über das FHEM Webinterface auch so wie gewünscht! Der USB Stick wird gemountet bzw. unmountet!

Problem damit behoben...auch wenn es vielleicht nicht die schönste Art ist.

Danke euch für die Hilfe und LG
Fox