2025-02-02 12:02:37 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 11:48:37 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 12:02:37 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 11:49:45 +01:00
2025-02-02 11:49:45 +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

Achtung: Frontend und Scan-Service müssen auf die gleiche Datenbankdatei konfiguriert werden!

Installation

Siehe auch https://pypi.org/project/cysystemd/

Fedora:

dnf install -y systemd-devel python3-venv
sudo usermod -G dialout -a $USER #den aktuellen User zu dialout hinzufügen

Ubuntu:

apt install build-essential libsystemd-dev systemd-dev python3-venv
sudo usermod -G dialout -a $USER #den aktuellen User zu dialout hinzufügen
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

USB Scanner betriebsbereit machen

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

Codes scannen

Folgende Codes scannen wir ein, um den Scanner korrekt zu konfigurieren: QR Code Config

Der Scanner kann zurückgesetzt werden, indem wir ihn per QR Code ausschalten und vom USB-Port trennen.

Datenbankoperationen

SQLite installieren:

Fedora:

sudo dnf install sqlite3

Ubuntu:

sudo apt install sqlite3

Datenbank per Shell leeren:

sqlite3 kugelstossmeeting-prod.db "DELETE FROM tickets;"
sqlite3 kugelstossmeeting-prod.db "DELETE FROM scans;"
sqlite3 kugelstossmeeting-prod.db "VACUUM;"

Datenbank per DB Browser for SQLite bearbeiten/ansehen:

Fedora:

sudo dnf install sqlitebrowser

Ubuntu:

sudo apt install sqlitebrowser

DB Browser for SQLite DB Browser for SQLite DB Browser for SQLite

Datenbankstruktur erzeugen:

Wichtig: Die Reihenfolge der Spalten in den Tabellen darf nicht verändert werden, da die GUI TreeViews fest zugewiesen sind!

CREATE TABLE "tickets" (
	"BarcodeContent" TEXT,                 /* Barcode (5-stellig) {str} */
	"Nr" INTEGER,                          /* Ticket Nummer {int} */
	"VIP" TEXT,                            /* VIP Status {y/n} - VIPs bekommen kostenfreie Verköstigung und Parkplatz */
	"Medium" TEXT,                         /* {Kartonage; Online-Ticket (PDF) */
	"Aushändigung" TEXT,                   /* {Barverkauf/Tageskasse; Persönliche Aushänding; Email} */
	"Bestellnummer/Verwendungszweck" TEXT, /* Bestellnummer Online (6-stellig) {str} */
	"Bezahlt am" TEXT,                     /* {TT.MM.JJJJ} */
	"Hinweise" TEXT,                       /* {str} - etwaige Bemerkungen */
	"Besteller" TEXT,                      /* {str} - Vor- und Zuname des Käufers */
	"Typ" TEXT                             /* {E = Erwachsen; K = Kind; 0 = kostenfrei} */
);
CREATE TABLE "scans" (
	"unixtimestamp_created"INTEGER NOT NULL, /* Zeitstempel, wann der Barcode gescannt wurde */
	"barcode" TEXT NOT NULL,                 /* Der 5-stellige Barcode */
	"validated" INTEGER,                     /* {0;1} - Barcode entwertet? */
	"hint"	TEXT,                            /* Der beim Scannen optional eingetragene Kommentar */
	"unixtimestamp_checked"	INTEGER,         /* Zeitstempel, wann der Barcode entwertet wurde */
	"skipped"	INTEGER                      /* {0;1} - Barcode übersprungen? */
);

Datenbankstruktur ändern (Spalten):

Die Reihenfolge der Spalten in der Tabelle ist entscheidend, da diese statisch im Quellcode referenziert wird. Anpassungen (Löschen) zum Beispiel wie folgt:

ALTER TABLE tickets DROP COLUMN 'BarcodeFile';
ALTER TABLE tickets DROP COLUMN 'Ticketbeschriftung';

Test-Scan mit Pseudo-Barcode und Zeitstempel erzeugen:

INSERT 
	INTO scans(unixtimestamp_created,barcode,validated,hint,unixtimestamp_checked,skipped) 
	VALUES(CAST(unixepoch('now') AS FLOAT)*1e9,'12345',0,'None',CAST(unixepoch('now') AS FLOAT)*1e9,0)
;

GUI starten

/opt/kugelstossmeeting-ticketing/venv/bin/python3 /opt/kugelstossmeeting-ticketing/sqlite.py

... oder

/opt/kugelstossmeeting-ticketing/sqlite.py #siehe python3 Header

... oder die .desktop-Verknüpfung benutzen

GUI

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
Languages
Python 98.9%
Shell 1.1%