Fehlermeldung wenn GPIOZero when_pressed/released auslöst / BadEventHandler

  • Ich grüße euch.


    Ich hatte letztes Jahr eine Alarmanlage für unsere Werkstatt gebaut und dazu ein eher unübersichtliches Script geschrieben.

    Danke nochmal an Gnom für die hilfe.


    Da ich jetzt Zeit habe wollte ich mich nochmal mit Python auseinander setzen und habe das Script neu geschrieben.


    Ich nutze Telegram um den Alarm Ein- bzw. Auszuschalten.

    Beim Einschalten soll zu erst geprüft werden ob alle Türen geschlossen sind. Wenn dies der fall ist schaltet der Alarm Ein ansonsten wird mir gesagt welche Tür noch offen ist bzw. geschlossen werden muss.

    Das Funktioniert soweit.


    Wenn ich den Alarm jetzt einschalte und die Tür geschlossen ist, bekomme ich folgende Meldung.



    Soweit ich das jetzt verstanden habe zeigt when_pressed mit dem finger auf die Funktion und sagt mach da weiter ohne irgendetwas zu übergeben.

    Muss ich dann für jedes Event eine eigene Funktion schreiben oder gibts dafür eine andere Lösung.


    Ist das Script generell schlecht aufgebaut?

    Kann man da etwas besser machen?


    Für Anregung und Vorschläge bin ich offen.


    beste Grüße

  • Der Klassiker. Du rufst deine Callbacks auf, statt sie nur als Rueckruffunktion zu uebergeben. Was also stattdessen passiert ist, dass deren Rueckgabewert (None) als Callback registriert wird. Und knallt. Ausserdem wird der Callback natuerlich schon zu Start und nicht nur bei einem IO-Event aufgerufen.


    Die Antwort liegt in der Verwendung von functools.partial oder lambdas.


    Code
    import functools
    
    holztuer.when_released = functools.partial(send_message, a=2, door ="Holztuer", openClose = "geöffnet")