RuntimeError: Failed to add edge detection

  • Hi,

    Ich habe einen RPi welcher als Türklingel samt LCD Display und VoIP agiert - mit python.

    Dieses hat seit Jahren ohne Probleme funktioniert - bis jetzt. Ich habe per apt-get alle Pakete aktualisiert und rpi-update verwendet. Warum? Weil ich schon seit fast 2 Jahren nicht aktualisiert habe und dachte es wäre eine gute Idee - never touch a running system wäre hier wohl besser gewesen.

    Jedenfalls seit dem aktualisieren funktioniert das Skript nicht mehr, ich bekomme "RuntimeError: Failed to add edge detection" angezeigt. Mein Klingeltaster wird per Interrupt abgefragt, weil das die einzig zuverlässige Erkennung ist.

    Es wurde nichts an der Hardware verändert, bzw. am python Skript. Daher vermute ich dass irgendwas "kerneliges" jetzt Probleme macht.

    Anbei das Skript, welches ich aufs wesentliche gekürzt habe:

    Ich habe auch schon folgenden Thread gefunden, wo die Lösung war Raspberry OS anstelle von Ubuntu zu nutzen - leider habe ich das aber schon drauf, bringt mir also leider nichts:

    bigdadyx
    December 15, 2022 at 4:34 PM


    Vielleicht kann mir jemand helfen, danke ;)

  • Mein letzter "sudo apt upgrade" eines Pi4 am 15. März (= gestern) hat zu dem gleichen Fehler geführt. (RuntimeError: Failed to add edge detection)

    Letzter upgrade vorher war am 9.3. (= vor einer Woche) und danach hat GPIO.add_event_detect noch funktioniert.

    Problem tritt also auch ohne rpi-update auf.

  • Hi

    Bei mir funktionierte der Python Befehl
    GPIO.add_event_detect(GPIOxx, GPIO.BOTH, callback=Action)
    bis Anfang März 2024. Dann hatte ich auf den neuen Raspberrys den Fehler:
    „Failed to add edge detection“ (Im Python).
    Habe festgestellt, dass alle mit Raspi-OS 6.6 diesen Fehler hatten.
    Alle mit Raspi-OS 6.1 hatten das Problem nicht.
    Wen ich einen UpGrade von 6.1 auf 6.6 gemacht habe, kam der Fehler.
    Bei einem OS DownGrade auf 6.1 war wieder alles OK

    Werde mit meinen Geräten auf 6.1 weiter fahren und hoffen, dass das
    Problem gelöst werden wird.

    LG Manuel

  • Hallo,


    du könntest `gpiozero` anstatt `RPi.GPIO` nutzen.

    Falls du keinen 5er Pi nutzt musst du allerdings manuell noch die default Factory ändern, da mit Ausnahme des 5er Pi's gpiozero standardmäßig auch `RPI.GPIO` nutzt. Das ist aber kein Aufwand:

    24. API - Pins — gpiozero 2.0.1 Documentation


    Grüße

    Dennis

    🎧 The music, if you can call it that, physically assaults anyone dumb enough to listen 🎧

  • Hi Dennis

    Danke für den Hint

    Ich benutze folgenden Code und habe bis jetzt noch keine andere Möglichkeit
    gefunden, Software Zähler mit Raspi OS 6.6 zu nutzen.

    import RPi.GPIO as GPIO
    SW1Count = 0
    SW1GPIO = 21
    GPIO.setup(SW1GPIO, GPIO.IN, pull_up_down = GPIO.PUD_UP)
    GPIO.add_event_detect(SW1GPIO, GPIO.RISING, callback = IntSW1, bouncetime = 250)
    def IntSW1(SW1GPIO): # Interrupt Routine SW1
    global SW1Count
    SW1Count = SW1Count + 1

    LG Manuel

  • Der Code ist so nicht ausführbar. Wenn der Interpreter den Code durch geht, ist die Callback-Funktion noch nicht vorhanden.

    `as` ist zum umbennen da, du nennst `GPIO` ind `GPIO` um.

    Auf Modulebene, der Code ohne Einrückungen, darf kein ausführbarer Code stehen. Hier werden nur Konstanten, Klassen, Funktionen und der Einstiegspunkt in die `main`-Funktion definiert. Die `main`-Funktion fehlt bei dir. Hier wird der Programmablauf gesteuert, Funktionen aufgerufen, Argumente übergeben und Rückgabewerte entgegen genommen.

    Alle Namen in Python schreibt man klein_mit_unterstrich, Ausnahmen sind Konstanten GANZ_GROSS und Klassen in PascalCase-Schreibweise.

    `global` benutzt man nicht, das bringt undurchsichtigen Code zum Vorschein.

    `RPi.GPIO` sollte auch eine Fehlermeldung werfen, weil `setmode` nicht aufgerufen wird. Bei Beendigung des Programm sollte `GPIO.cleanup()` aufgerufen werden.

    Wenn man sich Zustände über den Aufruf hinweg merken will, benötigt man eine Klasse.

    Mit `RPi.GPIO`:


    Mit `gpiozero`


    Beides mal ungetestet.


    Grüße

    Dennis

    🎧 The music, if you can call it that, physically assaults anyone dumb enough to listen 🎧

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!