Hi Community,
Vorneweg: Ich bin Absoluter Python-Noob, brauche aber ein Tool um Dinge zu tun.
Zum Projekt:
Ich habe einen RFID Scanner, der Inventarsticker scannen soll und in die entsprechende Software pasten soll. Der Scanner verhält sich Windows gegenüber wie eine Tastatur.
Das Problem ist, dass die RFID Tags wie üblich kodiert sind. Ich bekomme also einen HEX-Code vom Scanner, den ich etwas zurechtschneiden und in Ascii übersetzen muss.
Meine Idee wär also gewesen:
1. Eingabe vom Scanner abfangen
2. Zurechtschneiden
3. Übersetzen
4. Ergebnis ins Eingabefeld der Software Pasten.
5. Enter drücken
Zur Frage: Ist das überhaupt etwas, das via Python realisierbar ist?
Danke schonmal fürs lesen. Leider hab ich keine Kartoffel für das Ende des langen Posts.
VG
PS
Tastatureingaben Manipulieren
Hallo,
nur um dich richtig zu verstehen, das Scannen findet nicht mit Python statt sondern mit einer fertigen Software?
Wenn du den Scanner direkt mit Python ansprechen kannst, dann sehe ich keine Probleme.
Grüße
Dennis
nur um dich richtig zu verstehen, das Scannen findet nicht mit Python statt sondern mit einer fertigen Software?
Wenn du den Scanner direkt mit Python ansprechen kannst, dann sehe ich keine Probleme.
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
- __blackjack__
- User
- Beiträge: 13684
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Dennis89: Für das Scannen braucht man keine Software, der Scanner ”ist eine Tastatur”. Der wird per USB angestöpselt und wenn man da einen Tag dran hält, dann ist das als wenn die ID von dem Tag über eine Tastatur eingegeben wird. Wenn da gerade ein Texteditor den Fokus hat, landet das dort. Wenn es im E-Mail-Programm die Subjekt-Zeile ist, dann halt da, usw.
„Incorrect documentation is often worse than no documentation.“ — Bertrand Meyer
- DeaD_EyE
- User
- Beiträge: 1141
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Um das zu erreichen, muss man 3 Aufgaben erledigen.
1) Eingaben des USB-Scanners verhindern. Keine Ahnung wie, aber unter Linux ist nichts unmöglich. Sicherlich gibt es auch Unterschiede zwischen X11 und Wayland.
2) Eingaben des USB-Scanners mit Python abfragen. Das ist einfach.
3) Den eingelesenen Barcode in einer DB suchen, um dann programmatisch die Tastatureingabe des gefundenen Datensatzes erledigen.
Für die letzten 2 Aufgaben kann man z.B. pynput verwenden.
Ich hatte das mal unter Wayland getestet. Die Abfrage funktioniert und in anderen Fenstern kann ich nichts mehr schreiben, solange das Programm läuft.
Hier der Beispielcode:
Ich hatte gerade noch die Verrückte Idee einen Microcontroller (z.B. ESP32 oder RP Pico W) zu verwenden, um daten via WLAN zu senden. Aber soweit ich weiß gibt es nicht die Möglichkeit mit Micropython den Microcontroller als USB-Host zu betreiben. Umgekehrt geht es. Ich habe mal eingaben mit einem RP Pico für das Spiel HELLDIVERS2 gemacht.
1) Eingaben des USB-Scanners verhindern. Keine Ahnung wie, aber unter Linux ist nichts unmöglich. Sicherlich gibt es auch Unterschiede zwischen X11 und Wayland.
2) Eingaben des USB-Scanners mit Python abfragen. Das ist einfach.
3) Den eingelesenen Barcode in einer DB suchen, um dann programmatisch die Tastatureingabe des gefundenen Datensatzes erledigen.
Für die letzten 2 Aufgaben kann man z.B. pynput verwenden.
Ich hatte das mal unter Wayland getestet. Die Abfrage funktioniert und in anderen Fenstern kann ich nichts mehr schreiben, solange das Programm läuft.
Hier der Beispielcode:
Code: Alles auswählen
from pynput.keyboard import Listener, Events
class BarcodeScanner:
def __init__(self):
self.listener = self._listener()
def _listener(self):
listener = Listener(suppress=True)
listener.on_press = self.on_press
listener.start()
return listener
def join(self):
self.listener.join()
def on_press(self, event: Events):
print(event, type(event))
if __name__ == "__main__":
scanner = BarcodeScanner()
scanner.join()
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
-
- User
- Beiträge: 2
- Registriert: Donnerstag 7. November 2024, 13:42
Danke schonmal für die Antworten.
Mein begrenztes Wissen würde auch sagen, dass das Abfangen der Eingabe das größte Problem darstellen würde.
Im Zweifel würde man die Eingabe auch über eine API realisieren können. Das geht aber über ein kleines Nebenprojekt neben der eigentlichen Arbeit hinaus.
Mein begrenztes Wissen würde auch sagen, dass das Abfangen der Eingabe das größte Problem darstellen würde.
Im Zweifel würde man die Eingabe auch über eine API realisieren können. Das geht aber über ein kleines Nebenprojekt neben der eigentlichen Arbeit hinaus.
-
- User
- Beiträge: 1
- Registriert: Donnerstag 21. November 2024, 14:02
Servus,
mir würde noch eine "dirty"-Variante einfallen. Du könntest ein Textfeld erstellen (evtl. auch versteckt) und den Fokus drauf legen. Sobald die Texteingabe vom Scanner in das Feld erfolgt könnte man über eine Event (z.B. Change) den Input checken (ggf. Länge, Regex), die Daten verarbeiten und letztlich in ein sichtbares Ergebnisfeld schreiben. Nicht schön, aber relativ einfach umsetzbar.
mir würde noch eine "dirty"-Variante einfallen. Du könntest ein Textfeld erstellen (evtl. auch versteckt) und den Fokus drauf legen. Sobald die Texteingabe vom Scanner in das Feld erfolgt könnte man über eine Event (z.B. Change) den Input checken (ggf. Länge, Regex), die Daten verarbeiten und letztlich in ein sichtbares Ergebnisfeld schreiben. Nicht schön, aber relativ einfach umsetzbar.