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

Tueftler1983

Also wenn es sich um das zuferlässige melden der Türklingel geht bin ich bei Counter hängen geblieben das funktioniert bei mir zu 100%. Mit einem DOIF frage ich die Änderung des Counter ab

cotecmania

#346
Nein es geht darum, dass sich mein State bzw. Pinlevel in FHEM nicht automatisch aendert, wenn ich an den PIN GND oder 3.3 V anlege.
Nur wenn ich manuell ReadValue ausführe, dann wird der Zustand erkannt ...
Einen Counter hab ich auch nicht ...
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

klausw

Zitat von: cotecmania am 12 November 2016, 15:33:42
Nein es geht darum, dass sich mein State bzw. Pinlevel in FHEM nicht automatisch aendert, wenn ich an den PIN GND oder 3.3 V anlege.
Nur wenn ich manuell ReadValue ausführe, dann wird der Zustand erkannt ...
Einen Counter hab ich auch nicht ...
attribut interrupt auf both stellen um Pegeländerungen zu sehen

Wenn das Attribut auf rising steht wird natürlich auch nur ein Interrupt und damit eine Aktualisierung bei steigender Flanke ausgelöst.
Es wird dabei auch ein Ereignis ausgelöst (erkennbar daran, das sich die Readingzeit ändert wenn jemand klingelt), welches du für ein notify oder DOIF verwenden könntest.

Du solltest überlegen, was du überhaupt benötigst und dann entscheiden, welche Art von Interrupt dafür die beste ist.
Wenn du die Klingeldauer haben möchtest dann ist "both" notwendig
Wenn nur das Ereignis, das jemand gedrückt hat wichtig ist dann rising oder falling.
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

cotecmania

Zitat von: klausw am 13 November 2016, 00:34:16

Wenn das Attribut auf rising steht wird natürlich auch nur ein Interrupt und damit eine Aktualisierung bei steigender Flanke ausgelöst.
Es wird dabei auch ein Ereignis ausgelöst (erkennbar daran, das sich die Readingzeit ändert wenn jemand klingelt), welches du für ein notify oder DOIF verwenden könntest.


Das ist mir klar, aber es wird eben gar kein Zustandswechsel automatisch erkannt, auch nicht wenn ich "both" einstelle.
Das ist mein Problem ...
Muss man die Interrupt-Funktionalität erst irgendwie aktivieren ?

Nur wenn ich dann in FHEM auf ReadValue klicke, werden die Readings incl. Zeitangabe aktualisiert ...

Gruss
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

Tueftler1983

Ist fhem den Mitglied in der Gruppe gpio?

Also wenn der impuls am Eingang nicht zu kurz ist sollte fhem es mitbekommen.
Bei mir klappt es am besten wenn ich die interne pullups aktiviere und den gpio beim schalten auf gnd ziehe

klausw

Zitat von: cotecmania am 13 November 2016, 11:03:00
Das ist mir klar, aber es wird eben gar kein Zustandswechsel automatisch erkannt, auch nicht wenn ich "both" einstelle.
Das ist mein Problem ...
Muss man die Interrupt-Funktionalität erst irgendwie aktivieren ?

Nur wenn ich dann in FHEM auf ReadValue klicke, werden die Readings incl. Zeitangabe aktualisiert ...
Das ist ein seltsames Verhalten.
Der Interrupt muss nicht aktiviert werden.
Es könnte ein Rechteproblem sein, aber dann sollte gar nix gehen. Steht was im Log?

was bringt:
ls -l /sys/class/gpio/gpio18/
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

cotecmania

Die Zustände "high/low" bzw. "on/off" werden grundsätzlich erkannt, wenn ich auf ReadValue klicke ...
Nur die automatische Interrupt-Funktion bzw. das automatische setzen der Readings gehen nicht ...
Im Log habe ich nichts gefunden. Muss ich verbose hochsetzen ?

pi@raspberrypi ~ $ ls -l /sys/class/gpio/gpio18/
total 0
-rw-r--r-- 1 root root    4096 Nov 13 17:47 active_low
lrwxrwxrwx 1 root root       0 Nov 13 17:47 device -> ../../../20200000.gpio
-rw-r--r-- 1 root root    4096 Nov 13 13:24 direction
-rw-r--r-- 1 fhem dialout 4096 Nov 13 13:24 edge
lrwxrwxrwx 1 root root       0 Nov 13 13:24 subsystem -> ../../../../../../class/gpio
-rw-r--r-- 1 root root    4096 Nov 13 13:24 uevent
-rw-r--r-- 1 fhem dialout 4096 Nov 13 13:24 value



Gruss
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

Tueftler1983

Erste Problem was ich sehe das die rechte zerschossen sind. Eigentlich sollte da immer root     gpio  stehen nicht root      root
Hast du mal ein Upgrade weelzy auf jessie gemacht?

Dadurch kannst du die Funktionen active_low und pud_resistor nicht so einfach nutzen
Also wie gesagt wenn es nur darum geht auf das Klingeln zu reagieren geht es bei mir am besten über den counter.

Die Screenshots zeigen wie ich das Klingeln auswerte und reagiere

klausw

Fehlerhafte Dateizugriffe sollten eigentlich im Log auftauchen.
Aber wer weiß, vielleicht habe ich was übersehen. Verbose 5 kann nicht schaden.

Kann es sein, das du ein Update von wheezy auf jessie gemacht hast?
Die Dateien in /sys/class/gpio/ (export und unexport) haben die korrekten Rechte (-rwxrwx--- 1 root gpio)
Diese Rechte müssten auch die Dateien des GPIO nach Anlegen haben.
Nach einem Upgrade von wheezy auf jessie funktioniert das nicht mehr

Ist WiringPi installiert? Die Rechte von Edge und Value deuten darauf hin, aber die Pfadangabe ist leer, was wiederum auf das fehlen hindeutet.
Ist fhem in der Gruppe dialout?

mit
cat /sys/class/gpio/gpio18/edge
kannst du überprüfen ob die Datei korrekt geschrieben wurde
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

cotecmania

Hi,

WiringPi habe ich installiert.
Arbeite immer noch mit Wheezy, kein Jessy.

pi@raspberrypi /sys/class/gpio $ cat /sys/class/gpio/gpio18/edge
both


Ist fhem in der Gruppe dialout? - Wie finde ich das raus ?
Ich komme aus der Windows-Welt und bin in Linux nicht sehr firm.

Kann man nicht dem ganzen Pfad auf einmal die notwendigen Berechtigungen geben ?

Eine Anleitung der Linux-Befehle in der richtigen Reihenfolge, damit alles läuft, wäre sehr hilfreich.

Gruss Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

klausw

Zitat von: cotecmania am 13 November 2016, 19:09:36
WiringPi habe ich installiert.
Arbeite immer noch mit Wheezy, kein Jessy.

pi@raspberrypi /sys/class/gpio $ cat /sys/class/gpio/gpio18/edge
both


Hm, das passt doch an den Rechten kann es also nicht liegen.
An sich müsste es funktionieren. Jetzt wird es langsam schwierig.

Ist das Modul aktuell? Mache mal ein "update force"
Und dann mal mit verbose 5 starten (global und im Modul)


Zitat von: cotecmania am 13 November 2016, 19:09:36
Ist fhem in der Gruppe dialout? - Wie finde ich das raus ?
Ich komme aus der Windows-Welt und bin in Linux nicht sehr firm.

Kurzer Abriss über Linux User und Gruppen

Zitat von: cotecmania am 13 November 2016, 19:09:36
Kann man nicht dem ganzen Pfad auf einmal die notwendigen Berechtigungen geben ?

Jein, du kannst nach anlegen des GPIO die Rechte setzen. Das musst du aber nach jedem Reboot machen, da es nur virtuelle Dateien sind, die jedesmal beim booten neu erzeugt werden.

Zitat von: cotecmania am 13 November 2016, 19:09:36
Eine Anleitung der Linux-Befehle in der richtigen Reihenfolge, damit alles läuft, wäre sehr hilfreich.

Stehen in der commandref. So wie dort beschrieben funktioniert es üblicherweise.

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

cotecmania

Hi,

gestern bin ich "gezwungenermassen" von wheezy auf Jessie umgestiegen (knapp 7h update ;-)) , da ich sonst meinen Bluetooth-Thermostat von EQ-3 nicht zum laufen bekam.
Nun habe ich mal unter Jessie den GPIO18 wieder auf 3.3V gelegt und siehe da, der Interrupt wurde ausgelöst.

Gruss
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

Tueftler1983

Ja unter Jessie bin ich auch zufriedener mit der Ansteuerung und dem auslesen der GPIO'S

KNUT345

Hallo Zusammen,
habe seit kurzem meinen RPi3 mit Stretch Lite am Laufen.
FHEM läuft problemlos, wollte nun GPIO einbinden und bekomme permanent.
Zitat
2018.01.02 14:11:26 1: Can't open file: RasPi_Pin38, value
2018.01.02 14:13:29 1: Can't open file: RasPi_Pin38, value
2018.01.02 14:15:48 1: Can't open file: RasPi_Pin38, value
2018.01.02 14:17:16 5: wird an setextensions gesendet: RasPi_Pin38 ?
2018.01.02 14:17:16 5: wird an setextensions gesendet: RasPi_Pin38 ?
2018.01.02 14:17:16 5: wird an setextensions gesendet: RasPi_Pin38 ?
2018.01.02 14:17:16 5: RasPi_Pin38, in fileaccess: value
2018.01.02 14:17:16 1: Can't open file: RasPi_Pin38, value
2018.01.02 14:17:16 1: RasPi_Pin38 GetFn: readout of Pinvalue fail
2018.01.02 14:17:21 5: RasPi_Pin38, in fileaccess: value 0
2018.01.02 14:17:21 1: Can't open file: RasPi_Pin38, value
2018.01.02 14:17:21 5: wird an setextensions gesendet: RasPi_Pin38 ?

Hatte zuvor FHEM auf RasPi2 mit Wheezy am Laufen.
Wesentlicher Unterschied Stretch zu Wheezy ist, dass ich jetzt den Benutzer fhem mit definierten Rechten, kein root, angelegt habe.
Zitat
fhem@RasPi3:~ $ id
uid=1001(fhem) gid=1001(fhem) groups=1001(fhem),20(dialout),997(gpio)
fhem@RasPi3:~ $ groups
fhem dialout gpio
fhem@RasPi3:~ $

Zitat
fhem@RasPi3:~ $ ls -l /sys/class/gpio/gpio20/
total 0
-rwxrwx--- 1 root gpio 4096 Jan  2 14:10 active_low
lrwxrwxrwx 1 root gpio    0 Jan  2 14:10 device -> ../../../gpiochip0
-rwxrwx--- 1 root gpio 4096 Jan  2 14:15 direction
-rwxrwx--- 1 fhem fhem 4096 Jan  2 14:10 edge
drwxrwx--- 2 root gpio    0 Jan  2 14:10 power
lrwxrwxrwx 1 root gpio    0 Jan  2 14:10 subsystem -> ../../../../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Jan  2 14:10 uevent
-rwxrwx--- 1 fhem fhem 4096 Jan  2 14:20 value
fhem@RasPi3:~ $

Wenn ich Value manuell ändere, dann bekomme ich LED an GPIO auch zum Leuchten.
Ich vermute ein Rechteproblem, obwohl value Gruppe und Benutzer fhem volle Rechte haben.

Hat jemand einen Tipp?

Danke im Voraus
Knut

klausw

Komisch, die Rechte passen.
Hast du nach setzen der Rechte neu gestartet? Der Befehl reboot scheint da nicht immer zu funktionieren.
Bringt "{`id`}" in Fhem eingegeben die gleiche Zeile wie in deinem vorangegangenen Post?
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