Hallo Experten,
ich bin ein Neuling in Sachen FHEM und RaspberryPi, versuche mich aber trotzdem daran ein kleines Projekt damit zu verwirklichen. Folgendes möchte ich umsetzen: FHEM soll ein Python Skript (batch.py) aufrufen. Ich nutze derzeit den Befehl:
"python /home/pi/hx711py/batch.py"
Scheinbar versucht FHEM auch den Befehl auszuführen, hat aber Probleme bei den Berechtigungen. Folgendes ist im LOG dazu zu finden:
ZitatTraceback (most recent call last):
File "/home/pi/hx711py/batch.py", line 1, in <module>
import stockwaage, os
File "/home/pi/hx711py/stockwaage.py", line 11, in <module>
hx = HX711(5, 6)
File "/home/pi/hx711py/hx711.py", line 11, in __init__
GPIO.setup(self.PD_SCK, GPIO.OUT)
RuntimeError: No access to /dev/mem. Try running as root!
Was kann das für Ursachen haben und wenn es sich, wie vermutet, um Berechtigungen für FHEM handelt, wie kann ich diese ändern, damit es fliegt?
Vielen Dank im Voraus für hilfreiche Antworten.
Gruß, nod
Kannst du das script von der linux console aus aufrufen?
Und wenn wie/als welcher User?
EDIT: ich vermute mal ohne 'sudo' wird es wohl auch unter linux nicht laufen...
Gruß, Joachim
Hallo,
ja aus der Shell (user "pi") funktioniert der Befehl:
python /home/pi/hx711py/batch.py
Ohne sudo?
Gruß, Joachim
ja, ohne sudo, wie oben beschrieben
Wenn ohne 'sudo' und du dem User 'pi' keine weiteren Rechte gegeben hast sollte es funktionieren, wenn du das Script unter /opt/fhem kopierst (sofern du fhem dort installiert hast) und dann mittels:
sudo chown fhem:dialout /opt/fhem/batch.py
die Berechtigung setzt...
EDIT: vors. du hast fhem "normal" installiert und die Berechtigungen für fhem sind die unter 'chown' genannten...
(Zum Kopieren ist gegebenenfalls ebenfalls 'sudo' notwendig, da User 'pi' in /opt/fhem normalerweise nicht schreiben darf)
Aufruf aus fhem nat. an den neuen Pfad anpassen ;)
Gruß, Joachim
Hallo,
leider besteht das Zugriffsproblem nach wie vor:
ZitatTraceback (most recent call last):
File "/opt/fhem/Stockwaage/batch.py", line 1, in <module>
import stockwaage, os
File "/opt/fhem/Stockwaage/stockwaage.py", line 11, in <module>
hx = HX711(5, 6)
File "/opt/fhem/Stockwaage/hx711.py", line 11, in __init__
GPIO.setup(self.PD_SCK, GPIO.OUT)
RuntimeError: No access to /dev/mem. Try running as root!
Darum hat mich ja gewundert, dass es als User 'pi' ohne 'sudo' läuft...
Was für ein System hast du?
Hast du dem User 'pi' keine zusätzlichen Rechte gegeben?
Ist das nur ein Script oder eine Reihe von Scripten?
EDIT: mal anders gefragt, was macht das Script bzw. was soll es machen?
Gruß, Joachim
ZitatWas für ein System hast du?
RaspberryPi 3, leider hab ich es nicht installiert sondern ein bekannter, wie kann ich das system/version ausgeben lassen?
ZitatHast du dem User 'pi' keine zusätzlichen Rechte gegeben?
wie gesagt ich bin Anfänger und weis nicht welche Rechte "pi" hat, wie kann ich das herausfinden?
ZitatIst das nur ein Script oder eine Reihe von Scripten?
es sind insgesamt 3 skripte, welche sich gegenseitig aufrufen...
ZitatEDIT: mal anders gefragt, was macht das Script bzw. was soll es machen?
batch.py holt sich einen Wert von stockwaage.py, welches wiederum über hx711.py eine Wägezellenelektronik ausliest (digitale Schnittstelle). Wie gesagt, das ganze funktioniert in der Shell, jedoch nicht aus fhem heraus!
Hast du alle Scripte mittels des 'chown' Befehls "angepasst"!?
Welchen Typ PI: 1, 2, 3 ;)
Und v.a. welches Betriebssystem:
Raspbian? Welches: wheezy, jessie, stretch?
Wie hast du fhem installiert?
EDIT: wenn du nur "normal" installiert hast und max. per raspi-config Einstellungen vorgenommen hast, also keine weiteren "Hacks" irgendwo aus dem Internet ausprobiert hast, dann passen die Rechte von 'pi' ja noch...
EDIT2: wo hast du die Scripte her?
Gruß, Joachim
ZitatHast du alle Scripte mittels des 'chown' Befehls "angepasst"!?
ja den befehl habe ich für alle 3 skripte durchgeführt
Die Skripte sind zum Teil gegoogled bzw. auch selbst geschrieben. Wie bereits erwähnt, diese funktionieren aus der Shell heraus alle einwandfrei, bitte nicht die skripte selbst hinterfragen.
So, hab mal ein wenig geschaut.
Mache selbst nichts bzgl. GPIOs...
Aber es sieht wohl so aus, als ob der Nutzer/User der Gruppe GPIO angehören muss...
Was sagt ein:
sudo ls -la /dev/mem
Und was kommt bei:
groups
Als User 'pi' auf der console...
Bzw. id
Wenn dem so ist, sollte folgendes den User fhem dieser Gruppe hinzufügen:
sudo adduser fhem gpio
Aber erst mal die oben genannten Ausgaben posten...
Gruß, Joachim
Zitatcrw-r----- 1 root kmem 1, 1 Okt 1 11:41 /dev/mem
Zitatpi root adm dialout cdrom sudo audio video plugdev games users input netdev bluetooth gpio i2c spi
Zitatuid=1000(pi) gid=1000(pi) Gruppen=1000(pi),0(root),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),113(bluetooth),997(gpio),998(i2c),999(spi)
Gut, User pi ist in der Gruppe root...
Damit ist klar, dass das Script als 'pi' alias 'root' läuft...
Wie hast du das "geschafft"?
Somit läuft dein System als root...
...nicht gut (meine Meinung!)...
Ich würde neu aufsetzen und mir genau überlegen, wem ich welche Rechte etc. gebe...
...auch (nur) meine Meinung...
Bzw. bevor ich einfach "etwas" aus dem Internet in den Rechner "hacke" mich informieren, was der Befehl etc. denn bewirkt...
Denn kurz hätte zur Lösung des Problems auch einfach gereicht, den User fhem in sudoers einzutragen und das Script mittels 'sudo' aufzurufen..
Aber ich mag nicht immer mit dem root- bzw. sudo-Hammer draufschlagen...
...einfach, funktioniert praktisch immer...
...ist aber nie schön...
Wenn du mit dem System (pi = root) trotzdem weiter arbeiten willst sollte der genannte Befehl zur Aufnahme des Users fhem in die gpio Gruppe eigentlich reichen...
Wenn du Raspbian mind. Jessie hast (soweit ich auf die Schnelle lesen konnte)...
Ansonsten einfach auch fhem in root aufnehmen, macht das Kraut dann auch nicht mehr fett...
(nicht wurklich ernst gemeint dieser "Rat")
Gruß, Joachim
System herauskriegen kannst du mittels:
cat /etc/os-release
Bzw.
uname -a
Mein Tipp:
Evtl. erst mal selbst einen PI aufsetzen, damit etwas "spielen" und lernen und dann noch mal aufsetzen und dann richtig damit arbeiten...
Evtl. einen zweiten zum Üben...
Wie du weiter machen willst liegt nat. bei dir...
Gruß, Joachim
Danke erstmals... Die Rückmeldung bzgl. nicht vorhandener Rechte ist weg. Skript(e) scheinen soweit ausgeführt zu werden. Ein Problem scheint es trotzdem noch zu geben:
Zitatsudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben
Sagt dir das was?
Ohne weitere Information nicht...
Was hast du geändert dass es geht (bis auf die Meldung?)...
Evtl. führst du mit sudo aus und es wird ein Passwort verlangt. (geraten)
Eine Eingabe könnte askpass automatisch machen? (ebenfalls geraten)
Kein tty bedeutet evtl. dass sich der User (fhem?) nicht einloggen kann...
Ist Standard, da unnötig (normalerweise)...
D.h. du arbeitest mit dem System und als quasi 'root' weiter!?
Dann aber aufpassen was du (auf der Console) eingibst, weil ja quasi alles als 'root' ausgeführt wird...
Gruß, Joachim
Hallo,
aslo ich habe nur wie du geschrieben hast, das ausgeführt:
sudo adduser fhem gpio
den rest mit den rechten lass ich jetzt so... du weist ja... never change ... :D
Danke
Bitte gerne.
Ah, ok...
Ich würde (bei Gelegenheit) über dauerhaftes "arbeiten" als root noch mal nachdenken...
Gruß und viel Spaß, Joachim