Hallo zusammen,
ich bin Anfänger und komme an nicht weiter. Ich habe in diesem Forum schon die im Prinzip selbe Frage gesehen, konnte aber nicht auf die selbe Art und Weise lösen (https://forum.fhem.de/index.php/topic,59054.0.html)
Ich möchte meine Rolladen mit fhem steuern und habe sie hierzu gemäß einer Anleitung eingebunden.
Im Protokoll kommt folgende Meldung:
2019.06.30 07:12:44 1: PERL WARNING: Can't exec "/home/pi/fernotron-control/FernotronRemote.sh": Datei oder Verzeichnis nicht gefunden at ./FHEM/00_GenShellSwitch.pm line 131.
2019.06.30 07:12:44 1: PERL WARNING: readline() on closed filehandle DATA at ./FHEM/00_GenShellSwitch.pm line 132.
2019.06.30 07:12:44 2: GenShellSwitch set Rolladen_Buero on
Die Verzeichnisse existieren.
Ich habe schon das gemacht:
fhem ALL=(ALL) NOPASSWD:/home/pi/fernotron-control
Was könnte ich noch tun?
mfg
Hi,
zeig mal die Ausgabe von
ls -lha /home/pi/fernotron-control/FernotronRemote.sh
Berechtigung?
Ausführen Recht gegeben?
Datei enthält Shebang?
Gruß Otto
Wie hast du die Script-Datei(en) "angelegt"?
Windows "dazwischen gewesen"?
EDIT: warum hast du die Datei(en) nicht im Home von fhem abgelegt? Also irgendwo /opt/fhem/... Und dann noch die Berechtigungen für den User fhem. Damit hat fhem ganz einfach Zugriff und muss nicht im Home vom User pi irgendwelche Scripte ausführen...
EDIT2: die Einträge in der sudoers braucht es nur, wenn etwas als "root" ausgeführt werden muss... Ist das in/bei dem Script der Fall?
Gruß, Joachim
pi@raspberrypi:~ $ ls -lha /home/pi/fernotron-control/FernotronRemote.sh
-rwxr-xr-x 1 pi pi 16K Jun 29 20:23 /home/pi/fernotron-control/FernotronRemote.sh
das liegt halt in dem pi-Verzeichnis, weil der autor das so angegeben hat. ich denke einfach dass das eine berechtigungssache ist. wie kann ich dafür sorgen, dass der fhem user mit root berechtigung die befehle im /home/pi/fernotron-control Verzeichnis ausführt?
ja, das script wird offenbar als sudo ausgeführt. zumindest lautet der test folgendermaßen und der funktioniert in der console auch:
sudo ./FernotronSend 4564563456345634563456
Vielen lieben Dank schon einmal für die supershcnellen Antworten!
Dass das mit "sudo" klappt ist klar (sofern die Datei ausführbar und fehlerfrei ist), weil "root" alles darf...
Die Frage war "muss" das Script als "root" ausgeführt werden...
Weil selbst mit dem Eintrag in der sudoers muss ja der Aufruf aus/durch fhem (User fhem) auch mit sudo geschehen...
Passiert das?
Wo hast du das Script etc. her?
Gruß, Joachim
ich weiß leider nicht ob das der fall ist. ich habe keine ahnung davon und wollte es nur via anleitung aufsetzen. hat bis auf diesen punkt bislang ja auch funktioniert ;-/
https://github.com/dasoho/fernotron-control
cd /home/pi/fernotron-control
Dort stehen weitere Programme, eventuell fehlen die?
Machst Du den Aufruf mit sudo? Muss ja offenbar so sein...
Gruß Otto
pi@raspberrypi:~ $ cd ~/fernotron-control
pi@raspberrypi:~/fernotron-control $ ls -la
insgesamt 108
drwxr-xr-x 3 pi pi 4096 Jun 25 17:02 .
drwxr-xr-x 29 pi pi 4096 Jun 30 13:00 ..
-rw-r--r-- 1 pi pi 7496 Jun 25 17:02 Fernotron.cpp
-rw-r--r-- 1 pi pi 2164 Jun 25 17:02 Fernotron.h
-rw-r--r-- 1 pi pi 5904 Jun 25 17:02 Fernotron.o
-rwxr-xr-x 1 pi pi 15421 Jun 29 20:23 FernotronRemote.sh
-rws--x--x 1 root pi 14120 Jun 25 17:02 FernotronSend
-rw-r--r-- 1 pi pi 2095 Jun 25 17:02 FernotronSend.cpp
-rw-r--r-- 1 pi pi 2228 Jun 25 17:02 FernotronSend.o
-rwxr-xr-x 1 pi pi 14384 Jun 25 17:02 FernotronSniffer
-rw-r--r-- 1 pi pi 2346 Jun 25 17:02 FernotronSniffer.cpp
-rw-r--r-- 1 pi pi 2584 Jun 25 17:02 FernotronSniffer.o
drwxr-xr-x 8 pi pi 4096 Jun 25 17:02 .git
-rw-r--r-- 1 pi pi 283 Jun 25 17:02 Makefile
-rw-r--r-- 1 pi pi 4293 Jun 25 17:02 README.md
alles ist drin, was dort angegeben ist. hab es genau so gemacht, wie es dort steht.
Und wenn Du das in der FHEM Kommandozeile ausführst?
"sudo /home/pi/fernotron-control/FernotronSend 4564563456345634563456"
Was steht dann im Log?
Unknown command sudo, try help.
schon in dem Eingabefeld ganz oben auf der Weboberfläche?
Du hast es mit den "" eingegeben? ::)
https://commandref.fhem.de/#command
oh, das hatte ich nicht getan. jetzt kommt im log folgendes:
Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die
Regeln erklärt hat. Normalerweise läuft es auf drei Regeln hinaus:
#1) Respektieren Sie die Privatsphäre anderer.
#2) Denken Sie nach, bevor Sie tippen.
#3) Mit großer Macht kommt große Verantwortung.
sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben
Dann geht sudo nicht. Was hast Du für ein OS auf dem FHEM Server?
Es gibt Systeme da muss man sich einmal interactive mit sudo anmelden und genau diese Frage "beantworten" ;)
es ist ein raspberry pi:
Raspberry Pi 3 Model B Rev 1.2pi@raspberrypi:~/fernotron-control $ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
Da gibt es diese Verhalten normalerweise nicht.
ZitatIch habe schon das gemacht:
Code: [Auswählen]
fhem ALL=(ALL) NOPASSWD:/home/pi/fernotron-control
was genau hast Du da getan?
Man macht es richtigerweise so:
Die sudoers Datei wird NICHT angefasst!!!
Man erzeugt eine neue Datei z.B. /etc/sudoers.d/011_fhem-nopasswd
Dorthinein kommen die Zeilen wie
fhem ALL=(ALL) NOPASSWD: /home/pi/fernotron-control
Gruß Otto
habe diese zwei Zeilen - siehe Screenshot - am Ende der Datei eingefügt.
Den Benutzer "home" habe ich zur Authentifizierung am Webinterface von fhem angelegt. ich wusste nicht unter welchem Benutzer fhem versucht die Kommandos auszuführen.
ich hoffe mit visudo?
Ich meine zwischen NOPASSWD: und /home/pi/fernotron-control gehört ein Leerzeichen. Aber ich bin nicht sicher.
fhem arbeitet mit fhem wenn es als Nutzer fhem läuft :)
Gruß Otto
ja, mit visudo.
aber egal ob mit oder ohne leerzeichen, es bringt nix. im Protokoll steht nach wie vor:
2019.06.30 15:18:49 1: PERL WARNING: Can't exec "/home/pi/fernotron-control/FernotronRemote.sh": Datei oder Verzeichnis nicht gefunden at ./FHEM/00_GenShellSwitch.pm line 131.
2019.06.30 15:18:49 2: GenShellSwitch set Rolladen_Buero off
kann man den fhem user testweise mal mit su Berechtigungen ausstatten? wenn ja, wie geht das?
Ja kann man. Aber wie gesagt, eigentlich macht es raspbian nicht so. Aber vielleicht hat sich auch was geändert.
Ich vermute da noch was anderes.
Ich habe das hier mal beschrieben, der Anfang entspricht dem was Du willst:
https://heinz-otto.blogspot.com/2017/01/per-ssh-remote-befehle-direkt-ausfuhren.html
Ansonsten kopierst Du die Datei /etc/sudoers.d/010_pi-nopasswd nochmal für fhem
Gruß Otto
OK, probiere ich.
Wird diese kopierte Datei mit dem dann von dir vorgeschlagenem Namen automatisch wirksam?
Du musst den Inhalt schon an den User fhem anpassen...
Weil sonst hast du einfach nur 2 Dateien mit Einträgen für den User pi... ;)
EDIT: wirken sollte das sofort...
Gruß, Joachim
ja. Du musst natürlich den Namen der Datei und den Inhalt (user fhem) anpassen :)
Alle Dateien im /etc/sudoers.d/ werden includiert
Zitat# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Der # vor dem includedir ist kein "Auskommentieren" ;)
https://linux.die.net/man/5/sudoers
Edit: Joachim war schneller :)
Hi Otto,
hier ich...
...woanders du... ;)
Gruß, Joachim
Ich schaffe es nicht. Ich denke, ich gebe auf. Ich habe die Datei in sudoers.d erstellt und wenn ich nun den Befehl direkt in die fhem kommandozeile eingebe kommt momentan gar nichts mehr im log.
Anfangs kam noch folgendes:
sudo: ./FernotronSend: Befehl nicht gefunden
Ohne dass ich weitere Änderungen oder so gemacht hätte, kam das dann auch nicht mehr. Es kommt einfach nichts im log wenn man
"sudo /home/pi/fernotron-control/FernotronSend 71111111633333314126333333124161433124312614331241415222431243152224312222633124333316331243312254143124331541431241226122414333161224143122"
eingibt.
:'( :'( :'(
Das nichts im Log kommt sagt doch nicht das es nicht funktioniert? ???
achso . ok. aber der rolladen bewegt sich halt nicht :'(
wahhhh! es geht! plötzlich geht es!
unbelievable!!!
Tausend Dank die Herren!!!!!!!
Achso, äh, jetzt muss es ja auch ohne kommandozeile noch funktionieren...
wie muss da jetzt der befehl lauten? oder was wäre als nächstes zu tun?
Wenn GenShellSwitch es unterstützt, dann soll in die DEF noch sudo vorne kommen.
DEF -> sudo /home/pi/fernotron-control/FernotronRemote.sh 2 2 u d
Wenn nicht, dann lieber ein offizielles Modul benutzen, wie z.B. hier beschrieben: https://forum.fhem.de/index.php/topic,59062.msg504871.html#msg504871
defmod Rolladen_Buero readingsProxy Rolladen_Buero
attr Rolladen_Buero setFn { fhem('"sudo /home/pi/fernotron-control/FernotronRemote.sh 2 2 '. ($CMD eq 'on' ?'u':'d') .'"') }
attr Rolladen_Buero setList on off
Damit kannst Du auch "stop" implementieren, z.B.:
defmod Rolladen_Buero readingsProxy Rolladen_Buero
attr Rolladen_Buero setFn { fhem('"sudo /home/pi/fernotron-control/FernotronRemote.sh 2 2 '. $CMD .'"') }
attr Rolladen_Buero setList u d s
leider klappt das mit dem sudo voranstellen im DEF nicht. Folgendes kommt im log.
Wenn ich es so schreibe:
"sudo /home/pi/fernotron-control/FernotronRemote.sh" 2 2 u d
sh: 1: sudo /home/pi/fernotron-control/FernotronRemote.sh: not found
2019.07.01 08:19:59 2: GenShellSwitch set Rolladen_Buero off
Wenn ich es so schreibe:
"sudo /home/pi/fernotron-control/FernotronRemote.sh 2 2 u d"
sh: 1: Syntax error: Unterminated quoted string
2019.07.01 08:22:02 2: GenShellSwitch set Rolladen_Buero on
Wenn ich es so schreibe:
sudo /home/pi/fernotron-control/FernotronRemote.sh 2 2 u d
sudo: unable to execute /home/pi/fernotron-control/FernotronRemote.sh: No such file or directory
2019.07.01 08:22:54 2: GenShellSwitch set Rolladen_Buero on
Bei dem Vorschlag über readingsProxy bekomme ich im log
sudo: unable to execute /home/pi/fernotron-control/FernotronRemote.sh: No such file or directory
Moin,
Du handelst ja hier mit völlig unterschiedlichen Befehlen. Mir ist jetzt nicht klar was geht und was nicht.
Der Befehl aus #23 geht? der hieß ja sudo /home/pi/fernotron-control/FernotronSend
Das Shell Script /home/pi/fernotron-control/FernotronRemote.sh funktioniert auch nicht in der FHEM Kommandozeile mit "" eingerahmt?
Außerdem ist offenbar unklar wie der Syntax in den mir nicht bekannten Modulen lautet.
Wo ich mir jetzt beim Schreiben unsicher bin: Wenn man ein bash Script als sudo ausführen will, braucht man dann nicht auch sudo Recht für bash?
Das dünne Brett was Du jetzt bohren könntest wäre die Zeile in der sudoers.d/Datei so ändern wie sie für Pi in der parallelen Datei steht. Dann kann fhem wie Pi alles in Sudo.
Das müssen wir dann aber noch wieder ändern. Also nur als Schnelltest.
Gruß Otto
Hallo
du hast recht. das ist etwas verwirrend.
Ich habe nun ja das Kommando, mit dem man testweise eine Befehl an den Rolladen senden kann in die Kommandozeile erfolgreich eingegeben.
"sudo /home/pi/fernotron-control/FernotronSend 71111111633333314126333333124161433124312614331241415222431243152224312222633124333316331243312254143124331541431241226122414333161224143122"
Diese Codes, sind nun alle in dem Script FernotronRemote.sh von mir hinterlegt und ich sollte das Script ansteuern.
Das Script bekomme ich aber bislang noch nicht einmal in dem Terminalfenster zum laufen. Vermutlich nach der Rumpfuscherei auch ein Berechtigungsproblem.
Ich muss zugeben, ich weiß noch nicht einmal genau, wie man das zum ausführen genau eintippt. ich habe es so probiert:
pi@raspberrypi:~/fernotron-control $ sudo FernotronRemote.sh 1 1 u
sudo: FernotronRemote.sh: Befehl nicht gefunden
und so:
pi@raspberrypi:~/fernotron-control $ ./FernotronRemote.sh 1 1 u
-bash: ./FernotronRemote.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
das verzeichnis selbst und alle unterordner sind so berechtigt:
drwxrwxrwx 3 pi pi 4096 Jun 30 14:52 fernotron-control
Also ich muss nochmal was in eigener Sache sagen. Mir ist das wirklich unangenehm, mit solch magerem Wissen hier aufzukreuzen und wenn es diesen "Anfängerbereich" nicht gegeben hätte, hätte ich es vermutlich bleiben lassen. Ich bin selbst IT-Spezialist aber in einem ganz anderen Bereich (SCCM, SCO, etc.) und man fühlt sich dann wie ein hilfloser Endanwender.
Daher noch einmal vielen Dank für Eure unerschöpfliche Geduld. ::)
Zitat
-bash: ./FernotronRemote.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
Das hier klingt aber so, als ob etwas mit der Datei nicht stimmt...
...wie hast du die erstellt/kopiert/bearbeitet?
Evtl. mal mit einem "Windows-Editor"!?
Gruß, Joachim
Hi,
Zitat/FernotronRemote.sh: /bin/bash^M
war da Windows "dazwischen" Also mit Windows die Datei erzeugt/editiert?
Da ist das Shebang kaputt.
Edit: Moin Joachim :)
Gruß Otto
Eigentlich nicht. Ich habe allerdings auf der grafischen Oberfläche des PI mit dem Text Editor die Codes per copy und paste aus dem Terminalfenster, wo sie mir beim sniffen angezeigt wurden reinkopiert und danach die Datei halt gespeichert. War das ein Fehler? Den Grafischen Texteditor zu nehmen?
Wie korrigiere ich das?
Ich würde denken, die grafische Oberfläche des Pi ist schon ein Fehler. :)
Es gibt viele Möglichkeiten. Nano kann das, es gibt DOS2UNIX als commandline Programm unter linux. Notepad++ kann dass ...
Und Texte über Browser / grafische Oberflächen hin und her kopieren und nicht prüfen ist ein schlimmer Fehler!
dann lade ich mir die datei bei github noch einmal runter und mache es mit notepad++ in windows?
warum nicht vor Ort mit nano? Warum der Umweg?
ok, mit nano.
beim Speichern strg-o kannst Du mit sehen welches Format er nimmt zum speichern. Und/Oder die Shebang Zeile einfach neu machen.
mit alt-d kannst Du vom DOS Format nach Unix Format wechseln/toggeln (dann wird kein Format angezeigt)
ES LÄUFT!!!!
Vielen Dank. Wieder einen Schritt weiter. Das FenotronRemote.sh Script startet jetzt ohne sudo aus der Konsole.
Jetzt kam noch folgendes im log:
2019.07.01 11:26:43 2: GenShellSwitch set Rolladen_WZ1 off
wiringPiSetup: Unable to open /dev/mem or /dev/gpiomem: Permission denied.
Aborting your program because if it can not access the GPIO
hardware then it most certianly won't work
Try running with sudo?
Das konnte ich aber gemäß anleitung mit
- sudo chown root ./FernotronSend
- sudo chmod 4711 ./FernotronSend
beheben. Somit kann ich die Rolläden jetzt ENDLICH über fhem hoch und runterfahren lassen!!!
IHr seid super, vielen Dank!
Eine kleine Bonus-Frage:
Ich kann die Rolläden jetzt hoch und runter machen
DEF /home/pi/fernotron-control/FernotronRemote.sh 1 1 u d
je nachdem welchen button mich drücke, wird das u (up) oder das d (down) übergeben. Das Script kann aber auch noch mit einem s (stop) angesprochen werden.
momentan habe ich aber keinen Stop-Button. Bekommt man den leicht hin oder ist das ein großer Aufwand?
zur Erinner, so wurde der Rolladen angelegt:
define Rolladen_WZ1 GenShellSwitch /home/pi/fernotron-control/FernotronRemote.sh 1 1 u d
attr Rolladen_WZ1 cmdIcon on:black_up off:black_down
hat sich erledigt. habe den Vorschlag von amenomade aufgenommen! super, vielen Dank noch einmal!