piface/usb_plain Keyboard Bug

  • Sobald ich als Keyboard usb_plain eintrage, funktionieren beim ersten Start die Eingänge des PiFace nicht.
    Falls ich DoorPi beenden kann (funktioniert nicht immer) und DoorPi neu starte funzt alles.
    Im Log vom ersten Start, sehe ich eine Fehlermeldung vom PiFace.



    Code
    1. ####################### Keyboards ##############################
    2. [keyboards]
    3. onboardpins = piface
    4. arduino = usb_plain

    putty.zip

  • Als Workaround habe ich im Keyboard from_piface.py die Fehlerstelle deaktiviert.

    Code
    1. def event_detect(self, event):
    2. if self.status_input(event.pin_num):
    3. self._fire_OnKeyDown(event.pin_num, __name__)
    4. if self._pressed_on_key_down: # issue 134
    5. self._fire_OnKeyPressed(event.pin_num, __name__)
    6. # else:
    7. # self._fire_OnKeyUp(event.pin_num, __name__)
    8. # if not self._pressed_on_key_down: # issue 134
    9. # self._fire_OnKeyPressed(event.pin_num, __name__)
  • Ich kann nicht nachvollziehen, warum bei Dir schon während des DoorPi Starts ein Event für PiFace erkannt wurde. Theoretisch sollte das nichts mit dem usb_plain zu tun haben.
    Die Fehlermeldung ist ja


    Das Attribut 'last_key' ist Bestandteil der Klasse KeyboardAbstractBaseClass und die ist Grundlage für die Klassen PiFace, UsbPlain und KeyboardHandler. Somit ist dieses Attribut zur Laufzeit auf jeden Fall für jede dieser Klassen (bzw. deren abgeleiteten Objekte) vorhanden. Aber wenn auf dieses Attribut _vor_ Abschluss der Objekt-Initialisierung zugegriffen werden soll, kann es zu dem Laufzeitfehler kommen.


    Führt alles wieder darauf zurück - warum wird bei Dir ein Event vom PiFace InputEventListener gemeldet, bevor die Initialisierung des Objektes abgeschlossen ist?


    Flattert oder prellt Dein PiFace Input oder sind andere Störungen, die dazu führen können?
    Hast Du den RPi in der Hand oder liegt er auf einem leitenden Untergrund?
    Ist das Problem auch, wenn alle Komponenten rund um den RPi entfernt sind (also nur Strom + PiFace)?
    Ist das Problem auch, wenn Du andere Eingänge für den PiFace definierst?

  • Nein, es flattert nicht's. ;-)
    dieser Fehler tritt auch nur auf, wenn usb_plain geladen wird, sonst nicht.
    Es sind keine weiteren Komponenten geladen und am PiFace ist nichts beschaltet.
    Am RPI3 hängt nur die Spannungsversorgung und der Arduino. Nach Beenden und Neustart vom DoorPi, tritt der Fehler nicht mehr auf.
    Der RPI ist in einem Gehäuse.
    Habe mir einen neuen Workaround in der AbstractBaseClass.py erstellt und suche weiter. :-)


  • Am Arduino liegt es auch nicht, habe eine USB/Seriell Wandler anstatt dem Arduino eingestöpselt, der Fehler bleibt bestehen.
    Wäre schön , wenn das jemand bestätigen könnte.
    Als Hardware braucht man einen RPI3, Piface ,(Arduino oder USB/Seriell Wandler).
    Nicht das mein Piface ne Macke hat, obwohl es funzt.