Modul für RPi GPIO Zugriff mit Interrupt Funktion für Input

Begonnen von klausw, 15 November 2013, 14:28:41

Vorheriges Thema - Nächstes Thema

Wernieman

Eine passende UDEV-Regel, welche die Gruppierung passend setzt.

Kann nur momentan nicht zu hause nachsehen, wie die Regel lauten müsste,
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Zenz

Hallo Wernieman!

Wäre toll, wenn du mir mit eine passenden UDEV-Regel helfen könntest,
habe leider keine Ahnung davon, ist komplettes "Neuland".

Habe zwar versucht mich mit Google schnell ein wenig einzulesen, aber ist leider ziemlich verwirrend.

Vielen Dank
Zenz

Wernieman

Mit "Glück" morgen .. habe vorhin aus der Ferne das System abgeschossen (Fehler saß vor dem Bildschirm  :-[ )
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Zenz

Hallo Wernieman,

wie geht's deinem System?

Wenn gut, darf ich dich nochmals bitten, ob du mir deine passenden UDEV-Regel
zur Verfügung stellen könntest.
Ich komme mit diesen "verzwickten" Berechtigungen einfach nicht zurecht.

mfG
Zenz

danieljo

Ich muss hier leider auch nochmal fragen wegen dem GPIO am RPi2 mit Rasbpian 4.1.6-v7 und aktuellem FHEM frisch installiert.

Soweit funktioniert alles aber das attribut active-low kann nicht gesetzt werden. Erst wenn ich die Berechtigungen vom Ordner /sys/devices/platform/soc/3f200000.gpio/gpio/ auf 0777 ändere schreibt FHEM das attr active low auch in die Datei. Jedoch nach jedem reboot sind die Berechtigungen wieder weg. Und im Log steht das FHEM keine Schreibrechte auf die Datei "active_low" hat.

Benutzer FHEM ist in Gruppe Root. Könnte mir da bitte jemand unter die arme greifen. Habe den Thread hier schon durchgelesen und einiges ausprobiert aber die Berechtigungen setzen sich immer wieder zurück. Ansonsten funktioniert alles super.

Wernieman

#245
1. Wenn der User FHEM in der gruppe root ist, dann ist er root!

Implementiere am besten ein sichere Rechtevergabe, So machst Du Dein System sehr offen ....

2. Setze Dir eine Udev-Regel:
z.B. für usb:
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="usb"
Dieses must Du "nur noch" für gpio adaptieren ...

z.B. siehe: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=9667
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Zenz

@Wernieman
Danke für den Tipp mit den Udev-Regel.

Nach langer Recherche habe ich folgende Lösung gefunden (weiss nicht ob ich den Link hier posten darf oder nicht),
die mir nach jedem Neustart des Raspberry bzw. Fhem erlaubt, diverse GPIO Befehle ohne Berechtigungsprobleme
auszuführen.
Auf meinem Raspberry läuft Linux 4.1.6-v7+ auf armv7l


sudo usermod -a -G gpio fhem

eine Datei erzeugen
sudo nano /etc/udev/rules.d/80-gpio-noroot.rules


folgenden Inhalt einfügen
# /etc/udev/rules.d/80-gpio-noroot.rules
# Zugriff auf GPIO ohne root-Rechte ermoeglichen
#
# Gruppe aendern
SUBSYSTEM=="gpio", RUN+="/bin/chown -R root.gpio /sys/devices/platform/soc/3f200000.gpio/gpio"
# Sticky-Bit setzen
SUBSYSTEM=="gpio", RUN+="/bin/chmod g+s /sys/devices/platform/soc/3f200000.gpio/gpio"
# Zugriffsrechte setzen
SUBSYSTEM=="gpio", RUN+="/bin/chmod -R ug+rw /sys/devices/platform/soc/3f200000.gpio/gpio/"



sudo service udev restart

sudo udevadm trigger --subsystem-match=gpio


Fragen bezüglich dieser Lösung kann ich leider nicht beantworten, da ich keine Ahnung von Linux habe
und diese Lösung nicht von mir stammt, sondern dieser Code nur auf die neue Stucktur von mir geändert worden ist.

Ich hoffe diese Lösung funktioniert auch bei anderen und bedanke mich für die Hilfe, die ich in diesem Forum
erfahren konnte.

mfG
Zenz

Wernieman

Was Du pobieren könntest, kan selber malngels RasPi nicht testen:

Anstatt Deiner Zeile in die UDEV-Datei:
SUBSYSTEM=="gpio", MODE="0664", GROUP="gpio"

Allerdings gibt Du damit das komplette GPIO an die Gruppe gpio frei (teoretisch, praktisch s.o.)

Was Du bei Deiner Lösung machst, ist das Setzen der Zugriffsregel hart per externen Programm. besser ist eigentlich, das interne zu verwenden.

Andererseits ... "newer change a running system"  ;D

Wenn Du experimentierfreudig bist ... könntest Du eventuell testen?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

lullebammel

Hi ich hab mir auch zwei Abende um die Ohren geschlagen.

Macht einfach ein Downgrade auf  3.12.35 vom 19.12.2014 und gut ist.

sudo rpi-update ba43047bec24d5f0a4150f09a37884240f8926d2
Ohne Tweak kein Sieg!
Raspberry Pi Model B, COC, HM-CFGLAN Adapter, Intertechno IT-1500,ITR-3500 , Home Easy HE808S, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-LC-BI1-FM, HM-PB-2-WM552, HM-LC-Sw2-FM, HM-LC-Sw1-FM, DS18B20

SmartFan

Hallo Allerseits,

bei mir geht nun nach der Sommerpause auch nix mehr und ich haben den ganzen Thread durchgearbeitet und die Vorschläge alle gemacht.

Bin nun auch wie Du schreibst auf alte Version zurück gegangen. Leider geht immer noch nix.

Gruß Michael
2x Raspberry Pi2 B+
Enocean Pi
8x Thermokon SR04, SR04PT, SR04PST, 3x SAB02, 1xMD15
dblog

Ellert

Leider habe auch ich das hier beschriebene Problem der nicht funktionierenden GPIOs nach dem Upgrade des RasPi B+ auf den Kernel 4.16. Ich bin jetzt zurück auf mein vorher gezogenes Backup nach dem folgendes nicht funktioniert hat:

Zitat von: Wernieman am 31 August 2015, 21:13:36
Was Du pobieren könntest, kan selber malngels RasPi nicht testen:

Anstatt Deiner Zeile in die UDEV-Datei:
SUBSYSTEM=="gpio", MODE="0664", GROUP="gpio"

Allerdings gibt Du damit das komplette GPIO an die Gruppe gpio frei (teoretisch, praktisch s.o.)

Was Du bei Deiner Lösung machst, ist das Setzen der Zugriffsregel hart per externen Programm. besser ist eigentlich, das interne zu verwenden.

Andererseits ... "newer change a running system"  ;D

Wenn Du experimentierfreudig bist ... könntest Du eventuell testen?

Folgendes habe ich beobachtet:
Die Gruppe gpio ist vorhanden, pi und fhem sind Mitglieder der Gruppe gpio.
Die in FHEM definierten GPIOs (bei mir 24 und 25) werden in /sys/class/gpio auch richtig angelegt, nach dem Start von FHEM.
Nur das Device in FHEM-wird nicht angelegt. Und im Log steht, dass auf das Verzeichnis /sys/class... und das Verzeichnis /usr/local/gpio... nicht zugegriffen werden kann, bzw., dass es nicht existiert. Das Verzeichniss  /usr/local/gpio... existiert bei mir nicht.

Eine Lösung kenne ich nicht.


klausw

Seltsam, wenn FHEM die gpios anlegt muss es doch zugriff haben.
Was bringt:
ls -l /sys/class/gpio
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

SmartFan

so siehts aus.

pi@raspberrypi ~ $ ls -l /sys/class/gpio
total 0
-rwxrwx--- 1 root gpio 4096 Sep  6 19:58 export
lrwxrwxrwx 1 root gpio    0 Sep  6 19:58 gpio21 -> ../../devices/platform/soc/3f200000.gpio/gpio/gpio21
lrwxrwxrwx 1 root gpio    0 Jan  1  1970 gpiochip0 -> ../../devices/platform/soc/3f200000.gpio/gpio/gpiochip0
-rwxrwx--- 1 root gpio 4096 Jan  1  1970 unexport
pi@raspberrypi ~ $


Gruss Michael

2x Raspberry Pi2 B+
Enocean Pi
8x Thermokon SR04, SR04PT, SR04PST, 3x SAB02, 1xMD15
dblog

Ellert

#253
Ich habe gerade auf meinem Testsystem einen GPIO definiert mit: define gpio24 RPI_GPIO 24

Es erscheint die Fehlermeldung: gpio24: failed to export pin gpio24

Im Log steht:
2015.09.08 07:49:49 1: gpio24: can't export gpio24, no write access to /sys/class/gpio/export and file /usr/local/bin/gpio doesnt exist
2015.09.08 07:49:49 1: gpio24: failed to export pin gpio24
2015.09.08 07:49:49 1: define gpio24 RPI_GPIO 24: gpio24: failed to export pin gpio24

Die Datei /usr/local/bin/gpio existiert nicht. Weder auf dem funktionierenden Sytem, noch auf dem nicht funktionierenden.
Der GPIO wird allerdings angelegt, wie SmartFan schon geschrieben hat:
pi@raspberrypi ~ $ ls -l /sys/class/gpio
total 0
-rwxrwx--- 1 root gpio 4096 Sep  8 07:49 export
lrwxrwxrwx 1 root gpio    0 Sep  8 07:49 gpio24 -> ../../devices/platform/soc/20200000.gpio/gpio/gpio24
lrwxrwxrwx 1 root gpio    0 Jan  1  1970 gpiochip0 -> ../../devices/platform/soc/20200000.gpio/gpio/gpiochip0
-rwxrwx--- 1 root gpio 4096 Jan  1  1970 unexport

Wernieman

Und was ist mit dem 2. teil der Fehlermeldung?

Existiert "/usr/local/bin/gpio"?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html