Funktionsweise filesystem Keyboard

  • Hilfe / Ratschläge
  • in Arbeit

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

Da in jedem Forum ein paar Regeln eingehalten werden müssen, möchte ich diese auch vorher hier festlegen und niederschreiben. Die grundsätzliche Netiquette setze ich bei Jedem voraus. Darüber hinaus möchte ich nur spezielle Regeln ansprechen:
- Unterlasse FullQuote sondern nutze Alternativen wie Inline-Quoting
-> siehe auch https://de.wikipedia.org/wiki/Fullquote vs. https://de.wikipedia.org/wiki/TOFU#Alternativen_zu_TOFU
- Unterlasse nichtssagende Antworten wie "Danke" oder "werde ich mal testen" oder ähnliches, sofern Du nicht der Threadersteller bist und einen Lösungsvorschlag angeboten bekommen hast.
- Vermeide Doppel-Posts (zwei Beiträge von Dir hintereinander) sondern editiere wenn möglich Deine Posts.

Danke...

  • Funktionsweise filesystem Keyboard

    motom001 wrote:

    Ist das Thema noch aktuell bzw. braucht Ihr noch weitere Infos
    Hallo Thomas,
    ich greife das nochmal auf, da ich ein sehr komisches Problem habe. Ich benutze das Filesystem für Andy42gr sein Dämmerungsschalter.
    beim Start des DoorPi legt das Filesystem die 2 Dateien an und schreibt false rein. Warum?? Weil dadurch habe ich vermutlich immer wieder das Problem, wenn die Dateien durch das Script des Twilight gelöscht und dann neu erstellt werden,steht ab und zu nicht die gewünschte 1 sondern wieder false drin. Ist aber kein Problem des Scriptes. Habe das gleiche phänomen wenn ich das File über nano erstelle, ne 1 reinschreibe und speichere. Öffne ich die Datei wieder und überschreibe das false und speichere dann, ist alles gut.
    Wie genau arbeitet das Filesystem und warum werden die Input Dateien mit false erstellt. Bei Output kann ich das nachvollziehen, da ja dort das Filesystem "Ausgänge" erstellt.
    ?(

    Gruß Peter
  • @fraeggle Ich hab es mal als extra Thema rausgenommen, hoffe das ist okay so...

    Das was Du beschreibst ist die automatische Rücksetzfunktion des filesystem-Keyboard. Ziel ist ein Taster-ähnliches Verhalten auf Dateien zu projizieren.
    In der Config gibt es für das Keyboard die Möglichkeit das Verhalten zu deaktivieren

    Source Code

    1. [keyboards]
    2. virtual = filesystem
    3. [virtual_keyboard]
    4. base_path_input = /var/DoorPI/keyboard/inputs/
    5. base_path_output = /var/DoorPI/keyboard/outputs/
    6. reset_input = false
    Entsprechende Stellen im Quellcode sind:
    github.com/motom001/DoorPi/blo…d/from_filesystem.py#L126
    github.com/motom001/DoorPi/blo…rd/from_filesystem.py#L38
    --
    MfG Thomas
  • Ich klinke mich hier mal ein, sonst hätte ich ein neues Thema eröffnet dazu.

    Source Code

    1. [keyboards]
    2. onboardpins = gpio
    3. virtual = filesystem
    4. [virtual_keyboard]
    5. base_path_input = !BASEPATH!/keyboard/inputs/
    6. base_path_output = !BASEPATH!/keyboard/outputs/
    7. bouncetime = 2000
    8. pressed_on_keydown = True
    9. reset_input = True
    10. [virtual_InputPins]
    11. virtual_klingel = os_execute:/usr/local/etc/DoorPi/script/telegram_klingel.sh
    Display All


    Es wird also eine Datei "virtual_klingel" erzeugt mit dem Wert "False", schreibe ich in die Datei also ein True, wird das Script ausgeführt.
    Ein erneutes reinschreiben in die Datei (egal ob False oder True) erzeugt kein erneutes ausführen der ScriptDatei.
    Erst beim dritten mal wieder und dann immer abwechselnd. Wenn ich aber nun den Wert "reset_input" auf False setze, ändert sich nichts im Handling.

    Source Code

    1. ...
    2. __reset_file = None
    3. ...
    4. self.__reset_input = doorpi.DoorPi().config.get_bool(section_name, 'reset_input', True)
    5. ...
    6. def on_modified(self, event):
    7. if 'FileModifiedEvent' not in str(event): return
    8. if self.__reset_file:
    9. if self.__reset_file == event.src_path:
    10. self.__reset_file = None
    11. logging.debug('reset inputfile will not fire event (%s)', event.src_path)
    12. return
    13. self.__reset_file = event.src_path
    14. self.__set_input(event.src_path, 'false')
    15. input_pin = path_leaf(event.src_path)
    16. if input_pin not in self._InputPins: return
    17. if self.status_input(input_pin):
    18. self.__reset_file = event.src_path
    19. self._fire_OnKeyPressed(input_pin, __name__)
    20. self._fire_OnKeyDown(input_pin, __name__)
    21. else:
    22. self._fire_OnKeyUp(input_pin, __name__)
    Display All
    Die Variable "self.__reset_input", welche den Wert aus der ConfigDatei "reset_input" enthält (Default True) wird weiter in diesem code nicht benutzt. Somit ist es egal mit was die Variable beschrieben ist.

    Ich habe den Code mal abgeändert auf den unten stehenden.
    reset_input = TRUE --> TRUE in die Datei -> Script, erneutes TRUE oder FALSE, kein Script, wieder TRUE --> Script
    reset_input = FALSE --> TRUE in Datei -> Script, erneutes TRUE -> Script, erneutes TRUE -> Script, False oder was anderes - kein Script, TRUE -> SCRIPT
    Somit ist jetzt bei jedem erneutem reinschreiben nach TRUE erstmal der Reset auf FALSE und es wird kein Script ausgeführt.
    Oder habe ich den Sinn der Funktion missverstanden ? EDIT Zeile 3,7, 9,10

    Source Code

    1. def on_modified(self, event):
    2. if 'FileModifiedEvent' not in str(event): return
    3. if self.__reset_input: # KATER432 - GEÄNDERT, vorher war hier "self.__reset_input"
    4. if self.__reset_file == event.src_path:
    5. self.__reset_file = None
    6. logging.debug('reset inputfile will not fire event (%s)', event.src_path)
    7. self.__set_input(event.src_path, 'false') # KATER432 - Zeile unten gelöscht, dafür hier
    8. return
    9. # KATER432 self.__reset_file = event.src_path
    10. # KATER432 self.__set_input(event.src_path, 'false')
    11. input_pin = path_leaf(event.src_path)
    12. if input_pin not in self._InputPins: return
    13. if self.status_input(input_pin):
    14. self.__reset_file = event.src_path
    15. self._fire_OnKeyPressed(input_pin, __name__)
    16. self._fire_OnKeyDown(input_pin, __name__)
    17. else:
    18. self._fire_OnKeyUp(input_pin, __name__)
    Display All
    Gruss Kater432