2025-01-06 20:14:52 +01:00
# Scanner Service und Frontend Software (Kugelstoßmeeting Rochlitz)
- Geschrieben von Mario Voigt (2024 - 2025)
- License: MIT
## WARNUNG: UGLY SOFTWARE. Das ist ein "works for me" Projekt
## Konzept
- ein eigenständiger Scan-Service läuft permanent und speichert alle gescannten Barcodes, die von einem Eyoyo Barcode Scanner per USB-Anschluss kommen, in eine SQLite DB ab.
- der Scan-Service (usb-scanner.py) basiert auf https://github.com/vpatron/barcode_scanner_python/tree/master
- läuft nur, wenn der Scanner angeschlossen und aktiv ist. Anderfalls gibt es Fehlermeldungen
- wird als systemd Service installiert
- ein separat gestartetes Frontend (GUI) greift auf diese Datenbank zu und prüft die Eingaben bzw. reichert sie an
2025-01-06 20:28:15 +01:00
- Frontend (sqlite.py) basiert auf https://github.com/tonypdavis/Raspberry-Pi-Barcode-Scanner-/blob/master/ipad_bs_v1.2.py
2025-01-06 20:14:52 +01:00
- ruft die gleiche Datenbank auf und liest/schreibt Änderungen
**Achtung: Frontend und Scan-Service müssen auf die gleiche Datenbankdatei konfiguriert werden!**
## Installation
2025-01-06 20:25:40 +01:00
Siehe auch https://pypi.org/project/cysystemd/
Fedora:
2025-01-06 20:14:52 +01:00
```
dnf install -y systemd-devel python3-venv
sudo usermod -G dialout -a $USER #den aktuellen User zu dialout hinzufügen
```
2025-01-06 20:25:40 +01:00
Ubuntu:
```
apt install build-essential libsystemd-dev systemd-dev python3-venv
sudo usermod -G dialout -a $USER #den aktuellen User zu dialout hinzufügen
```
2025-01-06 20:14:52 +01:00
```
cd /opt/
git clone https://gitea.fablabchemnitz.de/vmario/kugelstossmeeting-ticketing.git
cd kugelstossmeeting-ticketing/
python3 -m venv venv
venv/bin/pip install -r requirements.txt
```
2025-01-06 20:30:34 +01:00
## USB Scanner betriebsbereit machen
2025-01-06 20:14:52 +01:00
USB-Geräte anzeigen und nach Scanner prüfen:
```
lsusb -v
#idVendor 0x0581 Racal Data Group
#idProduct 0x0115 Tera 5100
lsusb
#Bus 003 Device 003: ID 0581:0115 Racal Data Group Tera 5100
```
USB-Gerät Berechtigungen anpassen:
```
vim /etc/udev/rules.d/55-barcode-scanner.rules
```
```
# Set permissions to let anyone use barcode scanner
SUBSYSTEM=="usb", ATTR{idVendor}=="0581", ATTR{idProduct}=="0115", MODE="666"
```
Änderungen übernehmen:
```
udevadm control --reload-rules & & udevadm trigger
```
Dienst starten und prüfen:
```
ln -sf /etc/systemd/system/usb-scanner.service /opt/kugelstossmeeting-ticketing/usb-scanner.service
systemctl enable usb-scanner.service --now
journalctl -f -u usb-scanner.service
```
2025-01-06 20:44:43 +01:00
## Codes scannen
Folgende Codes scannen wir ein, um den Scanner korrekt zu konfigurieren:
![QR Code Config ](qrcodes.png )
**Der Scanner kann zurückgesetzt werden, indem wir ihn per QR Code ausschalten und vom USB-Port trennen.**
2025-01-06 20:30:34 +01:00
## Datenbankoperationen
**Datenbank per Shell leeren:**
2025-01-06 20:45:06 +01:00
2025-01-06 20:25:40 +01:00
Fedora:
2025-01-06 20:14:52 +01:00
```
sudo dnf install sqlite3
2025-01-06 20:25:40 +01:00
```
Ubuntu:
```
sudo apt install sqlite3
```
2025-01-06 20:45:06 +01:00
2025-01-06 20:25:40 +01:00
```
2025-01-06 20:14:52 +01:00
sqlite3 kugelstossmeeting-prod.db "DELETE FROM tickets;"
sqlite3 kugelstossmeeting-prod.db "DELETE FROM scans;"
2025-01-06 20:49:33 +01:00
sqlite3 kugelstossmeeting-prod.db "VACUUM;"
2025-01-06 20:14:52 +01:00
```
2025-01-06 20:30:34 +01:00
**Datenbank per DB Browser for SQLite bearbeiten/ansehen:**
2025-01-06 20:45:06 +01:00
2025-01-06 20:25:40 +01:00
Fedora:
```
sudo dnf install sqlitebrowser
```
Ubuntu:
2025-01-06 20:14:52 +01:00
```
2025-01-06 20:25:40 +01:00
sudo apt install sqlitebrowser
2025-01-06 20:14:52 +01:00
```
2025-01-06 20:40:40 +01:00
![DB Browser for SQLite ](db1.png )
![DB Browser for SQLite ](db2.png )
![DB Browser for SQLite ](db3.png )
2025-01-06 20:30:34 +01:00
## GUI starten
2025-01-06 20:14:52 +01:00
```
/opt/kugelstossmeeting-ticketing/venv/bin/python3 /opt/kugelstossmeeting-ticketing/sqlite.py
```
2025-01-06 20:29:30 +01:00
... oder
```
/opt/kugelstossmeeting-ticketing/sqlite.py #siehe python3 Header
```
2025-01-06 20:14:52 +01:00
... oder die .desktop-Verknüpfung benutzen
2025-01-06 20:47:12 +01:00
![GUI ](gui.png )
2025-01-06 20:14:52 +01:00
## Notwendig für den Betrieb
- Notebook mit Netzteil
- USB Scanner mit USB-C Kabel
- Stempel + Stempelfarbe
- Alle Tickets als PDF-Backup (falls es nicht klappt)
- eine aktuell befüllte SQ-Lite Datenbank
## Mögliche Verbesserungen der Software
- SQLite DB gegen netzwerkfähige MySQL/PGSQL tauschen und multimandantenfähig machen (2 Rechner, 2 Barcode Scanner)
- Programm so beschränken, dass es nicht mehrfach gestartet werden kann (PID Kontrolle o.ä.)
- siehe Code-Kommentare
- TK GUI modernisieren