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

klausw

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

uwe.bart

Ich hab grade RPI_GPIO in mein fhem eingebaut und funktioniert super. Danke erstmal für die Mühe.
Ich hätte noch eine Idee / Wunsch:
Ich würd gern einen oder mehrere Taster an die GPIO-Ports hängen und damit verschiedene Lichter an und aus schalten.
Möchte dabei eine Logik einbauen, die bei einem kurzen Tastendruck ein Licht einschaltet, das nach ca. 30 Sekunden wieder ausgeht und bei einem langen Tastendruck (größer 2 sec) das Licht dauerhaft einschaltet.

Ist sowas mit RPI_GPIO denkbar? Oder evtl. so etwas wie "Doppelklick" und "Einfachklick" auf nen Taster?

klausw

Zitat von: uwe.bart am 08 Januar 2014, 18:22:46
Ich hätte noch eine Idee / Wunsch:
Ich würd gern einen oder mehrere Taster an die GPIO-Ports hängen und damit verschiedene Lichter an und aus schalten.
Möchte dabei eine Logik einbauen, die bei einem kurzen Tastendruck ein Licht einschaltet, das nach ca. 30 Sekunden wieder ausgeht und bei einem langen Tastendruck (größer 2 sec) das Licht dauerhaft einschaltet.

Ist sowas mit RPI_GPIO denkbar? Oder evtl. so etwas wie "Doppelklick" und "Einfachklick" auf nen Taster?

Über den langen Tastendruck habe ich auch schon nachgedacht, das müsste sich machen lassen. Ich schaue mir das am Wochenende mal an.
Da würde dann aber mithilfe eines Timers laufen. D.h. ich könnte ein weiteres Reading einbauen, das, sobald eine Taste länger als eine Sekunde gedrückt ist, auf on geht.
Doppelklick geht vielleicht auch auf diese Weise, aber dann müsste man zwischen zwei einfachklicks mind. 1s warten.
Der Timer kann minimal nur 1s.
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

klausw

So, habe eine neue Version eingecheckt. Morgen kann sie über update geholt werden.

Wenn das Attribut interrupt auf both gestellt ist, dann wird beim ersten setzten des GPIO auf high (für länger als 1s) das reading Longpress angelegt und auf on gesetzt. Beim loslassen wird es wieder auf off gesetzt.
Wenns benötigt wird kann man die Erkennungszeit noch einstellbar machen und auch das reading Longpress auf State ausgeben.

Für Doppelklick habe ich noch keine Idee wie ich ihn sinnvoll umsetze (soll ein reading bei doppelklick toggeln, oder kurz auf on gehen oder...).
Da brauche ich noch konkrete Beispiele.
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

uwe.bart

Danke, hast du toll gemacht.
Ich hab damit mal ein Treppenhauslicht realisiert.

  • normaler Tastendruck = Licht einschalten und nach 30 sek. geht es von selbst aus
  • langer Tastendruck = Licht geht an und bleibt an, bis man es wieder ausschaltet
Hier mal der Ausschnitt aus der fhem.cfg:
Zitat
# GPIO14
# Dummy-Schalter definieren
define gpio14 dummy
attr gpio14 room GPIO

# den Dummy überwachen
define n_gpio14 notify gpio14:toggle {\
    if(OldValue('gpio14') eq 'off'){\
        fhem("set gpio14 on");;\
        fhem("define a_tmp_gpio14 at +00:00:30 set gpio14  off");;\
    }elsif(OldValue('gpio14') eq 'on'){\
        fhem("set gpio14 off");;\
    }\
}
attr n_gpio14 room GPIO

# RPI_GPIO für pin 14 definieren
define pin0014 RPI_GPIO 14
attr pin0014 debounce_in_ms 50
attr pin0014 direction input
attr pin0014 interrupt both
attr pin0014 pud_resistor down
attr pin0014 room GPIO

# das on-Event von pin 14 überwachen
define n_pin0014 notify pin0014:on {Log 1,$EVENT;;\
    fhem("set gpio14 toggle");;\
    }
attr n_pin0014 room GPIO

# das Longpress-Event von pin 14 überwachen und den Timer damit löschen
define n_pin0014_longpress notify pin0014:Longpress.*on {\
    Log 1,$EVENT;;\
    fhem("delete a_tmp_gpio14");;\
    }
attr n_pin0014_longpress room GPIO

klausw

Der Dummy steht in Vertretung für dein Treppenlicht?
Wenn du vorhast es über einen GPIO Output schaltest kannst du auch die setextensions verwenden:
set myoutputpin on-for-timer 30
Dieser Timer lässt sich jederzeit mit "set myoutputpin on/off" abbrechen.
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

uwe.bart

Hab ich tatsächlich vor, bin aber noch nicht dazu gekommen mich mit RPI_GPIO als output zu beschäftigen. Danke für den Tip.

fruemmel

Hallo,

kann mir jemand verraten, woher die Gruppe "gpio" kommt? Das "sudo adduser fhem gpio" bringt die Meldung, dass die Gruppe gpio
nicht existiert.
Mit manuellem Setzen der Rechte scheint alles zu funktionieren.

Gruß Wolfgang

klausw

Gute Frage, wenn ich mich recht erinnere sollte die Gruppe gpio beim Raspbian von Anfang an mit dabei sein.
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

fruemmel

#39
Zitat von: klausw am 20 Januar 2014, 16:39:29
Gute Frage, wenn ich mich recht erinnere sollte die Gruppe gpio beim Raspbian von Anfang an mit dabei sein.

Achso, und ich habe die ganze Zeit die Installation von wiringPi als Erzeuger in Verdacht gehabt. Ich habe meinen Pi mit wheezy aufgesetzt, da ist (oder war) die Gruppe nicht vorhanden.
Ist aber nicht schlimm, läuft ja jetzt nach manueller Anpassung der Dateien auch so.

Vielen Dank auf jeden Fall für das tolle Engagement. Ich hatte mir bisher mit eigenem c-Code geholfen, das war etwas holprig.

Noch ein Wunsch: Es wäre super, wenn das  Modul die event-on-change-reading bzw. event-on-update-reading Attribute unterstützen könnte. das würde für die entstehenden Events beim Pollen sinnvoll sein.
Bisher hatte ich mit meiner eigenen Konstruktion das Problem, das irgendwann keine Interrupts mehr durchkamen. Dann rettet das Pollen den korrekten Zustand.

Gruß Wolfgang

StefanP

Hallo,
also bei mir gibt's die Gruppe nicht.
Ich habe die Platine von Locutus auf dem RPI laufen und da wird auch WiringPi benutzt:
http://forum.fhem.de/index.php/topic,14156.msg118637.html#msg118637

pi@fhemraspi ~ $ groups
pi adm dialout cdrom sudo audio video plugdev games users netdev input


Gruß StefanP

klausw

Hallo zusammen,

ich habe gerade nochmal einen SD Karte mit der Raspbian Version 2013-12-20-wheezy-raspbian.img bespielt.

pi@raspberrypi ~ $ groups
pi adm dialout cdrom sudo audio video plugdev games users netdev input spi gpio


Die Gruppe gpio ist bei mir vorhanden.
@Wolfgang: wie hast du die Anpassung manuell vorgenommen?

Zitat von: fruemmel am 20 Januar 2014, 17:13:50
Noch ein Wunsch: Es wäre super, wenn das  Modul die event-on-change-reading bzw. event-on-update-reading Attribute unterstützen könnte. das würde für die entstehenden Events beim Pollen sinnvoll sein.
Ist eingebaut und sollte beim nächsten Update dabei sein.

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

fruemmel

Zitat von: klausw am 20 Januar 2014, 23:10:41
Hallo zusammen,

ich habe gerade nochmal einen SD Karte mit der Raspbian Version 2013-12-20-wheezy-raspbian.img bespielt.

pi@raspberrypi ~ $ groups
pi adm dialout cdrom sudo audio video plugdev games users netdev input spi gpio


Die Gruppe gpio ist bei mir vorhanden.

Hallo Klaus,

mein wheezy ist deutlich älter (ca. Q2 2013), vielleicht liegt es daran.

Zitat von: klausw am 20 Januar 2014, 23:10:41
@Wolfgang: wie hast du die Anpassung manuell vorgenommen?
Ist eingebaut und sollte beim nächsten Update dabei sein.

Ich habe in allen Verzeichnissen unter  /sys/devices/virtual/gpio/ bei den Dateien edge und value den owner auf fhem gesetzt. Damit funktioniert es bei mir.

Zum Thema event-on-change-reading etc:
Zitat von: klausw am 20 Januar 2014, 23:10:41
Ist eingebaut und sollte beim nächsten Update dabei sein.
Super, vielen Dank!!

Gruß Wolfgang

klausw

Zitat von: fruemmel am 21 Januar 2014, 09:32:59
Ich habe in allen Verzeichnissen unter  /sys/devices/virtual/gpio/ bei den Dateien edge und value den owner auf fhem gesetzt. Damit funktioniert es bei mir.
Das machst du mit einem Script nach jedem reboot?
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

ollir

Hallo Klaus,

habe gerade dein Modul ausprobiert. SPITZE  ;D
Jetzt brauche ich nicht mehr umständlich mit sripten und notifys rumzuwerkeln.

Wenn ich das richtig verstehe setzt du WiringPi auf?

Wäre es dann auch möglich die PWM Funktion zu integrieren?  ::)

Dann wären alle Funktionen der GPIO's unterstützt.

Vielen Dank

Olaf