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

Ralli

Hallo Klaus,

ich war Dir noch eine Rückmeldung schuldig.

Es klappt! Wenn restoreOnStartup nicht auf no steht, wird bei einem Start von fhem nur bei einem anderen Status des aktuellen Pinlevel gegenüber dem gespeicherten Status ein Event generiert, sonst nicht. So soll es sein.
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

fnord

Zitatwas ich will, ist eventuelle Fehler ausbügeln  8)

Gut, darin sind wir uns einig! Aber nochmal sorry - ich hatte diese high/low-Semantik missverstanden. Beides impliziert ja direction out und setzt nur zusätzlich den value. Dein Code

$dir = "out" if ( $dir eq ("high" || "low") );

funktioniert allerdings nur für $dir="high". Nach etwas ausprobieren bin ich auf

$dir = "out" if ( $dir eq "high" || $dir eq "low" );

gekommen. Ok?


Gruß

fnord

klausw

Zitat von: fnord am 10 November 2014, 12:32:52
Gut, darin sind wir uns einig! Aber nochmal sorry - ich hatte diese high/low-Semantik missverstanden. Beides impliziert ja direction out und setzt nur zusätzlich den value. Dein Code

$dir = "out" if ( $dir eq ("high" || "low") );

funktioniert allerdings nur für $dir="high". Nach etwas ausprobieren bin ich auf

$dir = "out" if ( $dir eq "high" || $dir eq "low" );

gekommen. Ok?


Gruß

fnord

oh, das kann gut sein, ich war nicht sicher, das mein Code ok ist, aber da es keine Fehlermeldungen gab dachte ich es funktioniert.
Macht ja nix, wie du siehst macht jeder Fehler  8)
Dein Vorschlag funktioniert bei Dir vollstandig?
Dann baue ich ihn einfach ein.
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

fnord

Ja, die Relais knacken wie gewünscht. Freut mich, dass ich etwas beitragen konnte, womit wir beide zufrieden sind! ;D


Gruß

fnord

klausw

Änderungen in restoreOnStartup und für gpio utility sind eingecheckt
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

Ralli

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

fnord

ZitatÄnderungen in restoreOnStartup und für gpio utility sind eingecheckt

Update, restart, läuft.  8)


Gruß

fnord

IPPhoner2b

#172
Habe da mal eine kurze Frage bzgl des "neuen" Raspi B+:
Der hat auf seiner 40pol Leiste die GPIOs 5 + 6 sitzen, wenn ich an diese einen Schalter mache, und ihn dementsprechend definiere, klappt es leider nicht, auf den anderen von mir getesteten Port (9-11-13-19-20-26) klappt es hingegen problemlos. Kann es sein, dass es da einen Konflikt zwischen Version B und B+ gibt?
Bei den beiden Pins gibt er mir bei den Readings nur "Pinlevel" und "State" aus, bei den anderen Pins steht noch Longpress und Counter.

Könnt ihr mir da nen Tip geben  :o ;D

Wie gesagt, alle gleich definiert, nach folgendem Schema:
#  RPI_GPIO 19 ist der Eingangspin am Raspberry, um den Schalter einzulesen
define sklih RPI_GPIO 19
attr sklih active_low no
attr sklih alias 20 B0 Schalter Küchenrollo Links Hoch
attr sklih debounce_in_ms 10
attr sklih direction input
attr sklih event-on-change-reading state
attr sklih group InputPorts
attr sklih interrupt both

#  RPI_GPIO 5 ist der Eingangspin am Raspberry, um den Schalter einzulesen
define skreh RPI_GPIO 5
attr skreh active_low no
attr skreh alias 20 B2 Schalter Küchenrollo Rechts Hoch
attr skreh debounce_in_ms 10
attr skreh direction input
attr skreh event-on-change-reading state
attr skreh group InputPorts
attr skreh interrupt both


Achja, der State ist immer auf ON gesetzt, als ob der Eingang betätigt wäre, siehe Bild

klausw

steht was im Logfile drin?

wurde der GPIO angelegt?
was gibt folgender Befehl aus?
ls -l /sys/class/gpio/gpio5

Longpress und Counter werden erst angelegt wenn diese Ereignisse auftreten
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

IPPhoner2b

Hallo Klaus,

Das einzige ist, dass er bei GPIO5 nen "Zeilenumbruch" oder so mit drin hat

also für den GPIO 5 bekomme ich als Meldung
ls -l /sys/class/gpio/gpio5
lrwxrwxrwx 1 root gpio 0 Dec 16 22:17 /sys/class/gpio/gpio5 -> ../../devices/vir                                                            tual/gpio/gpio5


und für GPIO 13 eigenltich die gleiche (der funktioniert aber)
ls -l /sys/class/gpio/gpio13
lrwxrwxrwx 1 root gpio 0 Dec 16 22:17 /sys/class/gpio/gpio13 -> ../../devices/virtual/gpio/gpio13


WiringPi habe ich installiert, und auf die anderen Pins habe ich auch im WebIF zugriff, nur bei Port 5+6 nicht, zumindest, sind das die, die ich bis jetzt ausprobiert habe.

Das hier ist der Mittschnitt aus dem Log mit Global Verbose 5, und da sieht man eben, dass der Pin 5 gleich auf 1 gesetzt wird, aber warum ?
2014.12.17 12:06:52 5: Cmd: >define sklir RPI_GPIO 13<
2014.12.17 12:06:52 4: sklir: write access to file /sys/class/gpio/export, use it to export GPIO
2014.12.17 12:06:52 5: Cmd: >attr sklir active_low no<
2014.12.17 12:06:52 5: sklir, in fileaccess: active_low 0
2014.12.17 12:06:52 5: sklir: set attr active_low: no
2014.12.17 12:06:52 5: Cmd: >attr sklir alias 20 B1 Schalter Küchenrollo Links Runter<
2014.12.17 12:06:52 5: Cmd: >attr sklir debounce_in_ms 10<
2014.12.17 12:06:52 5: Cmd: >attr sklir direction input<
2014.12.17 12:06:52 5: sklir, in fileaccess: direction in
2014.12.17 12:06:52 5: sklir: set attr direction: input
2014.12.17 12:06:52 5: Cmd: >attr sklir event-on-change-reading state<
2014.12.17 12:06:52 5: Cmd: >attr sklir group InputPorts<
2014.12.17 12:06:52 5: Cmd: >attr sklir interrupt both<
2014.12.17 12:06:52 5: sklir, in fileaccess: edge both
2014.12.17 12:06:52 5: Datei: /sys/class/gpio/gpio13/value, FH: IO::File=GLOB(0x22ad140), EXCEPT_FD: 9, akt. Wert: 0
2014.12.17 12:06:52 5: sklir: set attr interrupt: both

2014.12.17 12:06:52 5: Cmd: >define skreh RPI_GPIO 5<
2014.12.17 12:06:52 4: skreh: write access to file /sys/class/gpio/export, use it to export GPIO
2014.12.17 12:06:52 5: Cmd: >attr skreh active_low no<
2014.12.17 12:06:52 5: skreh, in fileaccess: active_low 0
2014.12.17 12:06:52 5: skreh: set attr active_low: no
2014.12.17 12:06:52 5: Cmd: >attr skreh alias 20 B1 Schalter Küchenrollo Rechts Hoch<
2014.12.17 12:06:52 5: Cmd: >attr skreh debounce_in_ms 10<
2014.12.17 12:06:52 5: Cmd: >attr skreh direction input<
2014.12.17 12:06:52 5: skreh, in fileaccess: direction in
2014.12.17 12:06:52 5: skreh: set attr direction: input
2014.12.17 12:06:52 5: Cmd: >attr skreh event-on-change-reading state<
2014.12.17 12:06:52 5: Cmd: >attr skreh group InputPorts<
2014.12.17 12:06:52 5: Cmd: >attr skreh interrupt both<
2014.12.17 12:06:52 5: skreh, in fileaccess: edge both
2014.12.17 12:06:52 5: Datei: /sys/class/gpio/gpio5/value, FH: IO::File=GLOB(0x2187e78), EXCEPT_FD: 10, akt. Wert: 1
2014.12.17 12:06:52 5: skreh: set attr interrupt: both

klausw

#175
Falsch, ich meine natürlich:

ls -l /sys/class/gpio/gpio5/

ohne den Schrägstrich am Ende werde die Dateien nicht angezeigt.

Was ich deinem Log entnehmen kann sieht soweit normal aus.


Mit cat /sys/class/gpio/gpio5/direction solltest du "in" erhalten
Dann ist die Richtung schonmal richtig eingestellt.

Mit cat /sys/class/gpio/gpio5/value kannst du schauen, welchen Wert der Pin hat.
Mache das mit beiden Schaltzuständen und schaue ob sich was ändert.
Vielleicht ist auch der Pin kaputt
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

IPPhoner2b

So, ich erhalte folgende Meldungen:
ls -l /sys/class/gpio/gpio5/
total 0
-rwxrwx--- 1 root gpio 4096 Dec 17 16:02 active_low
-rwxrwx--- 1 root gpio 4096 Dec 17 16:02 direction
-rwxrwx--- 1 root gpio 4096 Dec 17 16:02 edge
drwxrwx--- 2 root gpio    0 Dec 17 16:01 power
lrwxrwxrwx 1 root gpio    0 Dec 17 16:01 subsystem -> ../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Dec 17 16:01 uevent
-rwxrwx--- 1 root gpio 4096 Dec 17 16:01 value

ls -l /sys/class/gpio/gpio13/
total 0
-rwxrwx--- 1 root gpio 4096 Dec 17 16:02 active_low
-rwxrwx--- 1 root gpio 4096 Dec 17 16:02 direction
-rwxrwx--- 1 root gpio 4096 Dec 17 16:02 edge
drwxrwx--- 2 root gpio    0 Dec 17 16:01 power
lrwxrwxrwx 1 root gpio    0 Dec 17 16:01 subsystem -> ../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Dec 17 16:01 uevent
-rwxrwx--- 1 root gpio 4096 Dec 17 16:01 value


Richtung steht auf "IN", und wechseln tut sich leider nix, anders sieht es aus, wenn ich GPIO 13 nehme, da wechselt er immer.

Ich habe ja noch nen zweiten B+ hier liegen, werde da die Micro SD Karte mal einwerfen, und diesen testen.

So, habe es eben umgesteckt, und es ist genau das gleiche Phänomen.
Es ist auch egal, ob überhaupt etwas angeschlossen ist, oder nicht, diese beiden Pins sind immer aktiv gesetzt.

klausw

Zitat von: IPPhoner2b am 17 Dezember 2014, 16:16:21
So, ich erhalte folgende Meldungen:
ls -l /sys/class/gpio/gpio5/
total 0
-rwxrwx--- 1 root gpio 4096 Dec 17 16:02 active_low
-rwxrwx--- 1 root gpio 4096 Dec 17 16:02 direction
-rwxrwx--- 1 root gpio 4096 Dec 17 16:02 edge
drwxrwx--- 2 root gpio    0 Dec 17 16:01 power
lrwxrwxrwx 1 root gpio    0 Dec 17 16:01 subsystem -> ../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Dec 17 16:01 uevent
-rwxrwx--- 1 root gpio 4096 Dec 17 16:01 value

ls -l /sys/class/gpio/gpio13/
total 0
-rwxrwx--- 1 root gpio 4096 Dec 17 16:02 active_low
-rwxrwx--- 1 root gpio 4096 Dec 17 16:02 direction
-rwxrwx--- 1 root gpio 4096 Dec 17 16:02 edge
drwxrwx--- 2 root gpio    0 Dec 17 16:01 power
lrwxrwxrwx 1 root gpio    0 Dec 17 16:01 subsystem -> ../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Dec 17 16:01 uevent
-rwxrwx--- 1 root gpio 4096 Dec 17 16:01 value


Richtung steht auf "IN", und wechseln tut sich leider nix, anders sieht es aus, wenn ich GPIO 13 nehme, da wechselt er immer.

Ich habe ja noch nen zweiten B+ hier liegen, werde da die Micro SD Karte mal einwerfen, und diesen testen.

So, habe es eben umgesteckt, und es ist genau das gleiche Phänomen.
Es ist auch egal, ob überhaupt etwas angeschlossen ist, oder nicht, diese beiden Pins sind immer aktiv gesetzt.

Ok, vielleicht ist da noch nen Bug im Kernel. RPI_GPIO macht nix anderes als diese Dateien auszulesen. Wenn es mit cat nicht funktioniert dann geht es natürlich auch in FHEM nicht.
Du hast aber keine 5V auf die Pins gejagt?
Die einzige Möglichkeit, die ich sehe ist, im Internet nach den besagen GPIOs zu suchen. Das Problem haben sicher noch andere, vielleicht gibt es schon einen Workaround
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

IPPhoner2b

Hi Klaus,

evtl. hilft es ja, habe grade mal alle GPIO Pins die eine GPIO Nummer hatten als Inputs definiert, und jeweils NUR die gewünschten3,3V beaufschlagt  ;D

Folgende GPIOs kann ich nicht als Eingang nutzen, weil diese nicht aktualisiert werden:
GPIO 4 - PIN 7
GPIO 5 - PIN 29
GPIO 6 - PIN 31
GPIO 7 - PIN 26
GPIO 8 - PIN 24

klausw

Zitat von: IPPhoner2b am 17 Dezember 2014, 16:52:46
Hi Klaus,

evtl. hilft es ja, habe grade mal alle GPIO Pins die eine GPIO Nummer hatten als Inputs definiert, und jeweils NUR die gewünschten3,3V beaufschlagt  ;D

Folgende GPIOs kann ich nicht als Eingang nutzen, weil diese nicht aktualisiert werden:
GPIO 4 - PIN 7
GPIO 5 - PIN 29
GPIO 6 - PIN 31
GPIO 7 - PIN 26
GPIO 8 - PIN 24

Hmm, es wäre interessant herauszufinden, wieso diese GPIOs nicht funktionieren.
Vielleicht werden sie alternativ von anderen Prozessen blockiert.
z.B. GPIO14 und 15 sind nicht verwendbar, wenn dir serielle Schnittstelle aktiviert ist.
evtl. gibt es da was
Die 1wire Kernelmodule hast du nicht geladen, oder?
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