Banana Pi und GPIO

Begonnen von santaclaus, 16 November 2014, 22:41:14

Vorheriges Thema - Nächstes Thema

santaclaus

Hallo zusammen,

ich bin zur Zeit dabei, meinen RPi durch einen Banana Pi zu ersetzen.
FHEM läuft bereits ohne Probleme :) (FHT,IT,Wifilight,SOMFY,...) bis auf eine Ausnahme, RPI_GPIO :(.
Ich nutze GPIO´s direkt für einige LED´s und Taster um Aktionen zu signalisieren bzw zu starten. Auf dem RPi läuft das mit wiringPi super.

Auf BananaPi läuft Raspian 3.1 und wiringPi V2.14 (rev. 3 board). WiringPi läuft und zeigt mit gpio readall auf der Konsole auch alle GPIO an.

Wenn ich jetzt mit

define LED1 RPI_GPIO 17 versuche einen Pin zu definieren, erhalte ich
LED1: failed to export pin gpio17 (ebenso bei allen anderen Pins).

Im Log steht:
2014.11.16 22:30:53 4: LED1: write access to file /sys/class/gpio/export, use it to export GPIO
2014.11.16 22:30:58 1: LED1: failed to export pin gpio17
2014.11.16 22:30:58 1: define LED1 LED1 RPI_GPIO 17: LED1: failed to export pin gpio17


Hat jemand eine Idee, warum das unter BananaPi nicht funktioniert? Bei RPi läuft es so super.

Vielen Dank,
Viele Grüße,

santaclaus

Ralli

Dazu fallen mir zwei Dinge ein:

1) Kannst Du auf der Konsole nicht nur Dir alle GPIOs anzeigen lassen sondern diese auch schalten?
2) Das könnte ein Rechte-Problem sein - wer darf GPIOs beeinflussen, unter welchem User läuft fhem, in welcher Gruppe?
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

santaclaus

zu 1): ja, auf der Konsole lassen sich die GPIO´s einzeln schalten (als Benutzer pi)
zu 2) GPIO´s sollten doch durch Mitglieder der Gruppe gpio geändert werden dürfen? FHEM läuft als User fhem (version $Id: fhem.pl 6913 2014-11-08 10:32:44Z rudolfkoenig $, os linux, user fhem, pid 9898)und ist in den Gruppen: gpio dialout audio tty.

Ein neu angelegter Benutzer,der nur zur Gruppe gpio gehört kann auf der Konsole auch GPIO´s schalten.

klausw

Zitat von: santaclaus am 16 November 2014, 22:41:14
Im Log steht:
2014.11.16 22:30:53 4: LED1: write access to file /sys/class/gpio/export, use it to export GPIO
2014.11.16 22:30:58 1: LED1: failed to export pin gpio17
2014.11.16 22:30:58 1: define LED1 LED1 RPI_GPIO 17: LED1: failed to export pin gpio17

In der ersten Zeile steht, das Schreibrechte vorhanden sind. Es sollte also kein Rechteproblem sein.
Funktioniert denn:
echo 17 > /sys/class/gpio/export ?
Oder besten gleich direkt über FHEM versuchen:
{`echo 17 > /sys/class/gpio/export`}
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

santaclaus

So, die Fehlersuche geht weiter:
mitecho 17 > /sys/class/gpio/export bekomme ich "Ressource / Gerät belegt". Da scheint es ein Problem zu geben... :(

Mit fuser /sys/class/gpio/export:  2533c
habe ich mir den Prozess gesucht, der die Datei blockiert. Dies ist 2533.
ps -axjf ergibt:
    1  2392  2392  2392 ?           -1 Ss       0   0:00 /usr/sbin/sshd
2392  2530  2530  2530 ?           -1 Ss       0   0:00  \_ sshd: pi [priv]
2530  2532  2530  2530 ?           -1 S     1000   0:00      \_ sshd: pi@pts/0
2532  2533  2533  2533 pts/0     2621 Ss    1000   0:00          \_ -bash
2533  2621  2621  2533 pts/0     2621 R+    1000   0:00              \_ ps -axjf


Der gehört zu -bash (?) und ist mit kill auch nicht zu beenden... :P

Hat jemand eine Idee wie man noch rausbekommt, was die Datei blockiert?

klausw

super, dann bin ich schonmal raus  :P

Ist GPIO 17 denn auch der Richtige? Nicht das du irgendeine Systemstatus LED nutzen willst.
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

santaclaus

Guter Einwand. Pin17 ist bei bananpi tatsächlich anders belegt.  8)

Nach Vergleich der Belegung erhalte ich zB nun nach echo 23 > /sys/class/gpio/export in der Konsole keine Ausgabe, nur wieder den Eingabeprompt.
In FHEM passiert mit {`echo 23 > /sys/class/gpio/export`}auch nichts, es wird nichtmal ein Fehler (bei verbose 5) geloggt. Hab auch alle anderen Pin´s durch...

Eins ist mir noch aufgefallen. Wenn ich gpio reset durchfüre und danach 2x echo 23 > /sys/class/gpio/export ausführe, ist beim ersten mal die Ausgabe leer, beim zweiten Mal wieder "Gerät/Ressource belegt"...

klausw

Zitat von: santaclaus am 17 November 2014, 18:22:23
Nach Vergleich der Belegung erhalte ich zB nun nach echo 23 > /sys/class/gpio/export in der Konsole keine Ausgabe, nur wieder den Eingabeprompt.
Das ist doch auch ok.
Wurde der GPIO denn angelegt?
Dann müsste unter /sys/class/gpio/ ein Ordner namens gpio23 existieren.

Zitat von: santaclaus am 17 November 2014, 18:22:23
In FHEM passiert mit {`echo 23 > /sys/class/gpio/export`}auch nichts, es wird nichtmal ein Fehler (bei verbose 5) geloggt. Hab auch alle anderen Pin´s durch...
hier das Gleiche...es gibt keine Meldung...du kannst nur schauen, ob das Verzeichnis existiert
Zitat von: santaclaus am 17 November 2014, 18:22:23
Eins ist mir noch aufgefallen. Wenn ich gpio reset durchfüre und danach 2x echo 23 > /sys/class/gpio/export ausführe, ist beim ersten mal die Ausgabe leer, beim zweiten Mal wieder "Gerät/Ressource belegt"...
siehe oben

vermutlich funktioniert der GPIO23 schon, schließlich bekommst du keine Fehlermeldung
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

santaclaus

Ja, die GPIO´s werden angelegt und der Ordner ist unter 7sys/class/gpio sichtbar.
Bei FHEM das gleiche.

Nur der Befehl define LED1 RPI_GPIO 23 bringt nach wie vor den Fehler LED1: failed to export pin gpio23

Also einerseits funktionieren die GPIO´s, aber andererseits scheint FHEM noch ein Problem damit zu haben...

klausw

führe bitte
echo 23 > /sys/class/gpio/unexport
aus und überprüfe anschließend, ob das entsprechende GPIO Verzeichnis verschwunden ist.
Wenn es weg ist dann führe:
{`echo 23 > /sys/class/gpio/export`}
in FHEM aus.

Nun
ls -l /sys/class/gpio/gpio10/ ausführen und das Ergebnis hier posten.
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

santaclaus

Habe ich exakt so getan, hier das Ergebnis

pi@bananapi /sys/class/gpio $ ls -l /sys/class/gpio/gpio10/
ls: Zugriff auf /sys/class/gpio/gpio10/ nicht möglich: Datei oder Verzeichnis nicht gefunden


Ich vermute aber, du meinst in der letzten Zeile nicht 10 sondern 23? Dann erhalte ich:
pi@bananapi /sys/class/gpio $ ls -l /sys/class/gpio/gpio23/
insgesamt 0
-rw-r--r-- 1 root root 4096 Nov 18 18:03 active_low
lrwxrwxrwx 1 root root    0 Nov 18 18:03 device -> ../../../gpio-sunxi
-rw-r--r-- 1 root root 4096 Nov 18 18:03 direction
-rw-r--r-- 1 root root 4096 Nov 18 18:03 edge
drwxr-xr-x 2 root root    0 Nov 18 18:03 power
-rw-r--r-- 1 root root 4096 Nov 18 18:03 pull
lrwxrwxrwx 1 root root    0 Nov 18 18:03 subsystem -> ../../../../../class/gpio
-rw-r--r-- 1 root root 4096 Nov 18 18:03 uevent
-rw-r--r-- 1 root root 4096 Nov 18 18:03 value


klausw

ja, es sollte die 23 sein

seltsam, hast Du den Gpio aus FHEM heraus angelegt?
und war er davor sicher nicht vorhanden?

Der Gpio hab bei dir den besitzer root und ist auch in der Gruppe root. Eigentlich sollte er aber in der gruppe Gpio sein.

Aber wer weiss, was die Banane für Kernelmodule hat.
Was zeigt denn:
ls -l /sys/class/gpio/

was auf alle Fälle gehen sollte, ist in die rc.local filgendes einzuragen:

echo 23 > /sys/class/gpio/export
chown -R fhem:root /sys/devices/virtual/gpio/*
chown -R fhem:root /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

santaclaus

Zitatseltsam, hast Du den Gpio aus FHEM heraus angelegt?
ja
Zitatund war er davor sicher nicht vorhanden?
ja, war definitiv nicht da
ZitatWas zeigt denn:
Code: [Auswählen]

ls -l /sys/class/gpio/

pi@bananapi ~ $ ls -l /sys/class/gpio/
insgesamt 0
-rwxrwx--- 1 root gpio 4096 Nov 18 21:17 export
lrwxrwxrwx 1 root gpio    0 Nov 18 21:17 gpio10 -> ../../devices/platform/gpio-sunxi/gpio/gpio10
lrwxrwxrwx 1 root gpio    0 Nov 18 21:16 gpio22 -> ../../devices/platform/gpio-sunxi/gpio/gpio22
lrwxrwxrwx 1 root gpio    0 Nov 18 21:15 gpio23 -> ../../devices/platform/gpio-sunxi/gpio/gpio23
lrwxrwxrwx 1 root gpio    0 Nov 18 21:16 gpio27 -> ../../devices/platform/gpio-sunxi/gpio/gpio27
lrwxrwxrwx 1 root gpio    0 Nov 18 21:17 gpio9 -> ../../devices/platform/gpio-sunxi/gpio/gpio9
lrwxrwxrwx 1 root gpio    0 Jan  1  2010 gpiochip1 -> ../../devices/platform/gpio-sunxi/gpio/gpiochip1
-rwxrwx--- 1 root gpio 4096 Jan  1  2010 unexport


Zitatwas auf alle Fälle gehen sollte, ist in die rc.local filgendes einzuragen:


echo 23 > /sys/class/gpio/export
chown -R fhem:root /sys/devices/virtual/gpio/*
chown -R fhem:root /sys/class/gpio/*

Dieser Eintrag ändert leider auch ncihts am Verhalten. In FHEM gibts wieder die selbe Fehlermeldung. Ehrlichgesagt habe ich auch nicht voll verstanden was das in rc.local bewirken soll?

klausw

Zitat von: santaclaus am 18 November 2014, 22:51:10
ja ja, war definitiv nicht da
pi@bananapi ~ $ ls -l /sys/class/gpio/
insgesamt 0
-rwxrwx--- 1 root gpio 4096 Nov 18 21:17 export
lrwxrwxrwx 1 root gpio    0 Nov 18 21:17 gpio10 -> ../../devices/platform/gpio-sunxi/gpio/gpio10
lrwxrwxrwx 1 root gpio    0 Nov 18 21:16 gpio22 -> ../../devices/platform/gpio-sunxi/gpio/gpio22
lrwxrwxrwx 1 root gpio    0 Nov 18 21:15 gpio23 -> ../../devices/platform/gpio-sunxi/gpio/gpio23
lrwxrwxrwx 1 root gpio    0 Nov 18 21:16 gpio27 -> ../../devices/platform/gpio-sunxi/gpio/gpio27
lrwxrwxrwx 1 root gpio    0 Nov 18 21:17 gpio9 -> ../../devices/platform/gpio-sunxi/gpio/gpio9
lrwxrwxrwx 1 root gpio    0 Jan  1  2010 gpiochip1 -> ../../devices/platform/gpio-sunxi/gpio/gpiochip1
-rwxrwx--- 1 root gpio 4096 Jan  1  2010 unexport

Hier sieht alles gut aus, die Ordner haben sind in der Gruppe Gpio und haben alle nötigen Rechte.
Zitat von: santaclaus am 18 November 2014, 18:08:04
pi@bananapi /sys/class/gpio $ ls -l /sys/class/gpio/gpio23/
insgesamt 0
-rw-r--r-- 1 root root 4096 Nov 18 18:03 active_low
lrwxrwxrwx 1 root root    0 Nov 18 18:03 device -> ../../../gpio-sunxi
-rw-r--r-- 1 root root 4096 Nov 18 18:03 direction
-rw-r--r-- 1 root root 4096 Nov 18 18:03 edge
drwxr-xr-x 2 root root    0 Nov 18 18:03 power
-rw-r--r-- 1 root root 4096 Nov 18 18:03 pull
lrwxrwxrwx 1 root root    0 Nov 18 18:03 subsystem -> ../../../../../class/gpio
-rw-r--r-- 1 root root 4096 Nov 18 18:03 uevent
-rw-r--r-- 1 root root 4096 Nov 18 18:03 value

Aber dann kann ich mir diese Rechte nicht erklären.

Zitat von: santaclaus am 18 November 2014, 22:51:10
Dieser Eintrag ändert leider auch ncihts am Verhalten. In FHEM gibts wieder die selbe Fehlermeldung. Ehrlichgesagt habe ich auch nicht voll verstanden was das in rc.local bewirken soll?

Durch diese Einträge exportierts du den GPIO23 und weist ihm die entsprechenden Zugriffsrechte zu... Ich sehe gerade, es sollte vermutlich:
chown -R fhem:gpio
heissen.
Das RPI_GPIO Modul schaut im Define nach, ob der entsprechende GPIO bereits exportiert wurde und ob schreibzugriff besteht (exportieren und schreibrechte kannst du z.B. über die rc.local machen ).
Wenn dies nicht der Fall ist wird geprüft, ob schreibrecht auf /sys/class/gpio/export besteht und wenn das der Fall ist, wird der Pin exportiert.
Wenn keine schreibrechte auf /sys/class/gpio/export bestehen, wird geschaut, ob das wiringpi /usr/local/bin/gpio existiert und der GPIO darüber angelegt.

In deinem ersten Post steht:
2014.11.16 22:30:53 4: LED1: write access to file /sys/class/gpio/export, use it to export GPIO
was heisst, das du schreibrechte auf die export Datei hast. Also müsste der GPIO exportiert worden sein.
Aber die rechte im GPIO Verzeichnis müssten danach etwas in der art sein:
-rwxrwx--- 1 root gpio 4096 Nov 17 16:26 value

die Gruppe muss GPIO sein .. kannst du diese mit chmod ändern?
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

santaclaus

Ich habe chown -R fhem:gpio in der rc.local geändert.
Dann nochmal gpio reset gemacht. Das Verzeichnis /sys/class/gpio war daraufhin leer.

Nun habe ich über FHEM versucht einen GPIO anzulegen
define pin RPI_GPIO 23

Ergebnis im Verzeichnis, nun mit Gruppe gpio und vollen Rechten:

pi@bananapi /sys/class/gpio $ ls -l
insgesamt 0
-rwxrwx--- 1 root gpio 4096 Nov 19 18:32 export
lrwxrwxrwx 1 root gpio    0 Nov 19 18:32 gpio23 -> ../../devices/platform/gpio-sunxi/gpio/gpio23
lrwxrwxrwx 1 root gpio    0 Nov 19 18:24 gpiochip1 -> ../../devices/platform/gpio-sunxi/gpio/gpiochip1
-rwxrwx--- 1 root gpio 4096 Nov 19 18:32 unexport


jedoch wieder die Fehlermeldung in FHEM
2014.11.19 18:34:54 5: Cmd: >define pin RPI_GPIO 23<
2014.11.19 18:34:54 4: pin: write access to file /sys/class/gpio/export, use it to export GPIO
2014.11.19 18:34:59 1: pin: failed to export pin gpio23
2014.11.19 18:34:59 1: define pin pin RPI_GPIO 23: pin: failed to export pin gpio23


in gpio23 sieht es so aus:

pi@bananapi /sys/class/gpio/gpio23 $ ls -l
insgesamt 0
-rw-r--r-- 1 root root 4096 Nov 19 18:38 active_low
lrwxrwxrwx 1 root root    0 Nov 19 18:38 device -> ../../../gpio-sunxi
-rw-r--r-- 1 root root 4096 Nov 19 18:38 direction
-rw-r--r-- 1 root root 4096 Nov 19 18:38 edge
drwxr-xr-x 2 root root    0 Nov 19 18:38 power
-rw-r--r-- 1 root root 4096 Nov 19 18:38 pull
lrwxrwxrwx 1 root root    0 Nov 19 18:32 subsystem -> ../../../../../class/gpio
-rw-r--r-- 1 root root 4096 Nov 19 18:32 uevent
-rw-r--r-- 1 root root 4096 Nov 19 18:32 value