- CSS 81.7%
- Python 14.3%
- JavaScript 4%
| app | ||
| etc | ||
| static | ||
| .gitignore | ||
| .python-version | ||
| app.css | ||
| NOTES.md | ||
| package-lock.json | ||
| package.json | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
WebUI und Edge-Server für "Der Intelligente Einkaufskorb"
Die Kinder wollten einen Korb mit Scanner bauen. Der Code hier ist ein in paar Stunden entstandener MVP um einen ZXing Web-Scanner und eine BLE-Waage (Mi Scale 2) miteinander zu verbinden. Damit konnten die Kinder am praktischen Beispiel sehen welche technischen Möglichkeiten und vor allem Einschränkungen man in so einem Szenario hat. Aus meiner Sicht war das Thema für die Kinder gut um die Komplexität zu verstehen aber ungeeignet um eigene Kreativität zu entfalten.
Voraussetzungen
Entwicklungsumgebung
Werkzeuge
Das Projekt ist mit Python implementiert und nutzt npm für eine Reihe von Frontend-Code. Eine Reihe von Abhängigkeiten sind mittels Vendoring schon vorhanden. Grundsätzlich sind zwei Abhängigkeiten auf dem Entwicklungssystem vorausgesetzt:
npm,bunoderdenoum TailwindCSS und DaisyUI zu nutzenpython >= 3.13.0für die Laufzeitumgebunguvfür die Erstellung der virtuellen Laufzeitumgebung.venv
Vorbereitung
Installation der WebUI Komponenten tailwindcss und daisyui
[dev@machine] npm install
Installation der Python Laufzeitumgebung
[dev@machine] uv sync
Development Modus
[dev@machine] uv run uvicorn app.main:app --reload
https via Caddy
Das App-Frontend benötigt eine https (sichere Verbindung) um die Media-API der jeweiligen Browser zu benutzen. Beispielhaft ist im Verzeichnis etc ein Caddyfile für den webserver caddy um die Verbindung auf dem Entwicklungsrechner umzuleiten.
Auf einer Linux-Installation kann man zur Entwicklung die folgenden Parameter nutzen:
[dev@machine] export DEIK_IP=`hostname -i` && caddy run --config etc/Caddyfile
TODO
Nur als Beispiel der Prozess beim Hineinlegen von Ware in den Korb:
- Web-Scanner sendet EAN-Daten und vielleicht eine Bilderkennung an Edge-Server Endpoint
- Edge-Server lädt EAN Datenbank oder Daten aus einem ERM (Bilderkennung zur zusätzlichen Validierung)
- Edge-Server liesst Daten aus der Waage mit temporalen Auszug aller Messdaten
- Edge-Server vergleicht Scan-Daten (z.B. Packungsgrössen) mit dem der Waage
- per Back-Channel (Websocket oder SSR) wird der "Einkauf" freigegeben