Hallo, ich möchte mittels Button in Fhem ein einfaches Shell Script starten über das ich Fhem stoppe und mein System (Raspberry PI) herunterfahre. Das Script funktioniert wunderbar in der Console aber der Aufruf über Fehm funktioniert nicht.
define Shutdown_System dummy
attr Shutdown_System alias Shutdown Homeserver
attr Shutdown_System devStateIcon shutdown:Shutdown:shutdown off:Shutdown:shutdown
attr Shutdown_System group Systembutton
attr Shutdown_System room Server
define notify_Shutdown_System notify Shutdown_System {\
if ( Value ("Shutdown_System") eq "shutdown") {\
fhem("set Shutdown_System off");;\
system("sudo /etc/init.d/shutdown-fhem-pi.sh"),,\
}\
}
Grüße
cerberus
zb. so
`/opt/fhem/FHEM/fhem2radio_aus.sh`;;\
nix mit system und den Kommas hinten...
Achtung: sudo funktionert nicht (oder nicht zuverlaessig) mit fhem, da es ab und zu nach passwort fragt.
Einen Systembefehl setze ich so ab:
define beep notify beep "beep -e /dev/input/event0 -f 440 -l 500 -d 500 -r 3"
Hallo,
Zitat von: rudolfkoenig schrieb am Do, 02 Mai 2013 11:12Achtung: sudo funktionert nicht (oder nicht zuverlaessig) mit fhem, da es ab und zu nach passwort fragt.
Das ist ja mal ein interessanter Hinweis.
Wenn ich einen System-Befehl mit sudo absetze und fhem möchte das Passwort für sudo, was ich aber hier nicht angeben kann, liefert
mir der Befehl ein -1 zurück.
Ist das so korrekt (der Befehl an sich funktioniert tadellos auf der Kommandzeile).
Ich habe nämlich bis 10.04.2013 meine I2C-Sensoren brav per Systembefehl mit sudo abgefragt und auch Werte geliefert bekommen.
Seit diesem Tag bin ich schier am verzweifeln da ich einfach keine Werte mehr in FHEM bekomme.
Grüße
Generell geben alle Aufrufe in FHEM mit system(...) den Wert -1 zurück, unabhängig davon ob der Befehl erfolgreich war, oder nicht.
Warum das so ist kann ich auch nicht wirklich erklären.
Viele Grüße
Markus
Hallo,
danke erstmal für die Antwort.
Aber bis zum 10.4.2013 hat das
sub messen($) {
...
my ($befehl) = "sudo i2cget -y 1 0x48 0x00 w &";
my ($result) = `$befehl`;
...
}
den Temperatur-Wert hexadezimal zurückgeliefert.
Nur eben seit 10.4 nicht mehr - seit diesem Datum habe ich keinen Eintrag mehr in meiner Datenbank und meinen Charts.
Diese Abfrage habe ich auf meinem RasPi2 laufen gehabt, nur leider liefert sie mir eben nichtsmehr zurück und ich weiß nicht warum.
Sowas ist mir am 2.4 noch geliefert worden:
Log (3,"Wert 1: $sensor Wert 2: $temp_sensor"); #013.04.02 19:09:37 3: Wert 1: Sensor_1 Wert 2: 22.0 °C
Grüße
P.S.: In der sub wurde dann von hex nach dezimal umgerechnet aber das hab ich mal weggelassen.
Edith: Ich vermute ich habe meine FHEM-Installationen "vermurckst".
Ich bekomme nicht einen einzigen Logeintrag in den Geräte-Logs - ich werd mal alles wieder runterwerfen und neu anfangen *schnauff*
Hi,
wenn doch
sudo i2cget -y 1 0x48 0x00 w &
auf der Kommandozeile bzw. in einer Telnet-Session funktioniert, was spricht dagegen, das Programm i2cget "Fhem-User-tauglich" zu machen, also ausführbar für alle bzw. den Fhem-User in eine Gruppe aufzunehmen, die das darf? Evtl. müssen noch die i2c-Devices unter /dev/... auch freigeschaltet werden (666).
Gruß
Thomas
Hallo, ich habe es so versucht aber es funktioniert nicht.
define Shutdown_System dummy
attr Shutdown_System alias Shutdown Homeserver
attr Shutdown_System devStateIcon shutdown:Shutdown:shutdown off:Shutdown:shutdown
attr Shutdown_System group Systembutton
attr Shutdown_System room Homeserver
define notify_Shutdown_System notify Shutdown_System {\
if ( Value ("Shutdown_System") eq "shutdown") {\
fhem("set Shutdown_System off");;\
"/opt/fhem/FHEM/shutdown-fhem-pi.sh";;\
}\
}
#
Folgendes bekomme ich im LOG
2013.05.09 22:07:53 3: notify_Shutdown_System return value: /opt/fhem/FHEM/shutdown-fhem-pi.sh
Gruß
cerberus
Mit System-Befehl funktioniert es:
define Shutdown_System dummy
attr Shutdown_System alias Shutdown Homeserver
attr Shutdown_System devStateIcon shutdown:Shutdown:shutdown off:Shutdown:shutdown
attr Shutdown_System group Systembutton
attr Shutdown_System room Homeserver
define notify_Shutdown_System notify Shutdown_System {\
if ( Value ("Shutdown_System") eq "shutdown") {\
fhem("set Shutdown_System off");;\
system("/opt/fhem/FHEM/shutdown-fhem-pi.sh");;\
}\
}
MfG, MisterEltako
mmmm.....bei mir funktioniert das nicht. Im Log sehe ich immer nur:
2013.05.10 17:31:53 3: notify_Shutdown_System return value: -1
Hallo,
Zitat von: Rohan schrieb am Mi, 08 Mai 2013 09:48Hi,
wenn doch
sudo i2cget -y 1 0x48 0x00 w &
auf der Kommandozeile bzw. in einer Telnet-Session funktioniert, was spricht dagegen, das Programm i2cget "Fhem-User-tauglich" zu machen, also ausführbar für alle bzw. den Fhem-User in eine Gruppe aufzunehmen, die das darf? Evtl. müssen noch die i2c-Devices unter /dev/... auch freigeschaltet werden (666).
Gruß
Thomas
Danke mal für den Denkanstoss. ich komme erst morgen abend wieder nach Hause und kann das dann mal durchackern.
Grüße
probier mal statt
Zitat von: cerberus schrieb am Do, 09 Mai 2013 22:09"/opt/fhem/FHEM/shutdown-fhem-pi.sh";;\
folgendes:
`/opt/fhem/FHEM/shutdown-fhem-pi.sh`;;\
Zum sudo Problem:
Das kann in Scripten mit Standardeinstellungen so nicht funktionieren, aus bekannten Gründen.
Ich denke auch dass es am sinnigsten ist, dass der user fhem das Recht bekommt, die entsprechende Aktion auszuführen.
Eine andere Möglichkeit wäre es, den user fhem in die sudoers Gruppe aufzunehmen und ihm das Recht zu geben, sudo ohne Passwort aufzurufen
Hallo,
so, ich hab nun auf meinem RasPi mit den 3 LM75-Sensoren folgendes eingegeben:
sudo usermod -a -G root fhem
nach dieser Anleitung:
http://www.knaupes.net/linux-user-einer-gruppe-zuweisen/ (//www.knaupes.net/linux-user-einer-gruppe-zuweisen/)
Nun sollte doch der User fhem u.a. auch in der Gruppe root vorhanden sein und folglich auch diesen Befehl
sudo i2cget -y 1 0x48 0x00 w &
(ob mit oder ohne & am Schluss)
absetzen dürfen.
Ok. Darf er ja auch - aber ich bekomme keinen Rückgabewert in fhem.
Ich gebe also in der Befehlszeile von fhem dieses ein:
{`sudo i2cget -y 1 0x48 0x00 w`}
(hier ohne &) und war es eigentlich gewohnt danach unter der Befehlszeile
nach Druck auf <Enter> sowas in der Art zu bekommen:
Zitat0x4013
Zumindest bin ich mir sicher das das so schon funktioniert hat da ich bis 10.04 die Sensoren so abfragen konnte.
Ich weiß aber leider nicht was sich ab diesem Zeitpunkt geändert hat.
Ich hab auch immer brav ein
sudo apt-get update
und
sudo apt-get upgrade
durchgeführt.
Es kann also auch durchaus am RasPi liegen.
Leider hat auch ein Neu-Einspielen des Wheezy-Images mit frischem aufsetzen von fhem nicht geholfen :-(
Ich bin für jeden weiteren Tipp dankbar.
Grüße
Edith: Vergessen - Nein, auch im Logfile von fhem landet nichts aber auf der Kommandozeile bekomme ich 0x4013 als Rückgabewert.
Für alle die suchen.. Als Tip.
Sudoers ohne Passwort confen (evtl. speziell fürs prog) alternativ für den ganzen User FHem
Und zu den Rückgabewerten..
RETURN VALUES
Upon successful execution of a program, the exit status from sudo will
simply be the exit status of the program that was executed.
Otherwise, sudo quits with an exit value of 1 if there is a
configuration/permission problem or if sudo cannot execute the given
command.
Hallo,
danke für den Tipp.
Sudoers ohne Passwort confen - ok, meine liebste Suchmaschine hat mir ein paar Links ausgespuckt.
Ich kann mich aber nicht erinnern das ich in dieser Datei Einträge gemacht hätte - zumal ich nichtmal weiß was ich dort eintragen soll da sich die Links nicht auf i2c beziehen.
Und bei den Rückgabewerten ...
Da schlägt mein Englisch wieder voll zu *autsch*
Auf der Kommandozeile kann ich die Befehle zum abfragen der Sensoren ausführen und bekomme hexadezimal die Temperatur zurück.
Ich will ja nicht den
Zitatexit status
des Programms sondern den hex-Wert der Temperatur in meiner *.pm haben.
Wenigstens ahne ich schonmal das eine -1 nicht gut ist da wohl ein Fehler vorliegt/vorliegen muss.
Das hat aber auch Rudi schonmal hier gepostet das sudo ab und zu das Passwort verlangt und dieses natürlich nicht angegeben ist und daher der Aufruf einen Fehler liefert - was mir durchaus auch klar ist.
Aber seit wann ist das so?
Ich habe 3 I2C-Temperatursensoren (LM75) an einem meiner RasPi hängen und konnte diese wunderbar bis 10.04.2013 (über 6 Monate) alle 10 Minuten in FHEM mit meiner 99_I2C_GetValue.pm auslesen und die hex-Werte nach dezimal umrechnen und die Temperaturen in FHEM anzeigen und loggen.
Seit 10.04.2013 bekomme ich einfach keine Werte mehr in meine 99_I2C_GetValue.pm
Und ich habe keine Ahnung warum.
Außer die fhem-updates und die üblichen RasPi-Updates habe ich nichts gemacht/geändert.
Grüße
Moin,
an die /etc/sudoers anhängen
fhem ALL=(ALL) NOPASSWD: ALL
damit darf user fhem alles per sudo ausführen ohne nach einem passwort zu fragen.
und wech
Hallo,
dem englischen nicht mächtig und ein kompletter Linux-Dau.
Ich weiß, das ist eine fatale Kombination ;-)
Vielen Dank Icebear für die Zeile.
Ich werd heute mal in die sudoers einbauen und berichten.
Grüße
Edith: Wie sicher nicht anders zu erwarten bekomme ich nun auch den Temperaturwert hexadezimal.
Nun kann ich endlich mein Skript wieder laufen lassen - Vielen Dank!!
Sicherer ist es die scripte die vom user fhem mit sudo ausgeführt werden müssen
einzeln in die /etc/sudoers einzutragen
fhem ALL=NOPASSWD: /root/script/script1.sh, /root/script/script2.sh
dann in fhem
define START dummy
define START_notify notify (START:on) {\
{fhem("set START off")}\
{system('sudo /root/script/script1.sh&');;}\
}
im Script selbst können dann Befehle mit "sudo Befehl" oder "sudo -u andereruser Befehl" stehen.
Wie man oben sieht liegen bei mir solche scripte im /root ordner und können auch nur von user root geändert werden.
Auf diese Sicherheitsmaßnahmen kann verzichtet werden wenn User fhem eh schon Rootrechte besitzt.
Zitat von: Icebear am 17 Mai 2013, 14:17:00
Und zu den Rückgabewerten..
RETURN VALUES
Upon successful execution of a program, the exit status from sudo will
simply be the exit status of the program that was executed.
Otherwise, sudo quits with an exit value of 1 if there is a
configuration/permission problem or if sudo cannot execute the given
command.
"Otherwise, sudo quits with an exit value of
1 if there is a"
Bedeutet das dan im Umkehrschluss, wenn da "-1" steht, dass der Befehl ausgeführt wurde?