Files
Halloween/SOFTWARE.md
T
2026-10-14 02:29:29 +02:00

129 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Erste Pi-Softwareversion
Diese Version implementiert ein Livebild des vorhandenen Camera Module 3 NoIR
über Picamera2, eine lokale WebUI, Moduswahl mit Speicherung und eine
**Simulation** des Effektablaufs. Sie steuert noch keine GPIOs, Motoren,
Servos, Lampen oder Lautsprecher. Eine lokale SQLite-Datenbank speichert
Testereignisse und Profilkennungen. Automatische Personenerkennung und
Profilzuordnung per Kamera, Clips und Maskierung sind noch nicht umgesetzt.
Die 30-Tage-Löschung ist für künftige Auto-Profile vorbereitet. Daher vorerst nur
im privaten Testbereich verwenden; die Kamera nicht auf öffentliche Flächen
richten.
## Auf dem Raspberry Pi 5 vorbereiten
Die Kamera mit passendem Kabel anschließen und mit `rpicam-hello --list-cameras`
prüfen. Danach im Projektordner:
```bash
sudo apt update
sudo apt install python3-picamera2 python3-venv
python3 -m venv --system-site-packages .venv
.venv/bin/python -m pip install -r requirements.txt
```
Picamera2 wird über die Raspberry-Pi-Pakete installiert; die virtuelle
Umgebung kann dieses Systempaket durch `--system-site-packages` verwenden.
Der Server bindet nur an `127.0.0.1` auf dem Pi. So ist das Livebild nicht
direkt im WLAN sichtbar.
### WebUI beim Hochfahren starten
Nach der Vorbereitung kann `tools/install_pi_service.sh` auf dem Pi einen
systemd-Dienst einrichten. Erst eine Vorschau ansehen, dann anwenden:
```bash
bash tools/install_pi_service.sh
bash tools/install_pi_service.sh --apply
systemctl status halloween-grab.service
```
Der Dienst läuft unter dem aktuellen Pi-Benutzer, startet `run.py` beim
Hochfahren und wird bei einem Fehler neu gestartet. Das Skript benötigt für
die Einrichtung `sudo` und überschreibt keine fremde Unit gleichen Namens.
Nach Code-Updates kann derselbe `--apply`-Aufruf den Dienst neu starten.
Zum Deaktivieren: `sudo systemctl disable --now halloween-grab.service`.
Bei Startproblemen: `sudo journalctl -u halloween-grab.service -n 80 --no-pager`.
Ein Browserfenster auf dem Laptop öffnet sich dadurch nicht automatisch.
## Vom Laptop aus ansehen
Mit dem geprüften Pi-Benutzer und Hostnamen ein SSH-Terminal offen lassen:
```bash
ssh -L 8000:127.0.0.1:8000 BENUTZER@HOST
```
Dann auf dem Laptop `http://127.0.0.1:8000` öffnen. Ein SSH-Passwort reicht;
ein Schlüssel ist nicht nötig. Ist Port 8000 auf dem Laptop belegt, links
vom ersten Doppelpunkt einen anderen freien Port wählen; rechts bleibt der
Pi-Port 8000, solange `run.py` dort mit dem Standardport läuft.
### Direkt im Heimnetz ansehen
Auf Nutzerwunsch ist für den aktuellen Test auch direkter Zugriff im Heimnetz
vorgesehen. Dafür auf dem Pi den laufenden Server mit `Strg+C` beenden und
im Ordner `~/halloween` starten:
```bash
.venv/bin/python -m uvicorn halloween.web:create_app --factory --host 0.0.0.0 --port 8000
```
Auf dem Laptop anschließend `http://raspi5wlan.local:8000` öffnen; kein
SSH-Tunnel nötig. `0.0.0.0` ist die Bind-Adresse, keine Browseradresse.
Die WebUI hat noch keinen Login: Geräte im erreichbaren Heimnetz können
Kamera und Bedienoberfläche nutzen. Eine öffentliche Internetfreigabe ist
damit nicht beauftragt. Direkter Browserzugriff im Heimnetz ist noch nicht
bestätigt. `run.py` und der bisherige systemd-Dienst bleiben bei Loopback.
## Ohne Kamera testen
Auf einem Rechner mit den Paketen aus `requirements.txt`:
```bash
python3 run.py --demo
```
Die Bildfläche trägt deutlich „DEMO – KEINE ECHTE KAMERA“. Über „Bereich
frei (Test)“ und danach „Testauslösung“ lässt sich die Zustandsfolge ohne
Aktoren durchspielen. „Stopp“ sperrt weitere Auslösungen bis „Zurücksetzen“
und erneuter Freigabe des Bereichs. Der Modus „voller Schreck“ ist nur bei
noch nicht vorhandenen Einstellungen der Standard. Ein WebUI-Wechsel wird
unter `data/settings.json` gespeichert und bleibt bei normalem Neustart
erhalten. Das Uploadskript überträgt diesen Laufzeitordner nicht.
## Ereignisdatenbank und Profile
Beim Start wird `data/events.sqlite3` angelegt. Erfolgreiche manuelle
Testauslösungen werden mit Zeitpunkt und Modus gespeichert und in der WebUI
aufgelistet. Profilkennungen lassen sich anlegen, Ereignissen zum Testen
zuordnen und wieder löschen. Beim Löschen eines Profils bleibt das Ereignis
ohne Zuordnung erhalten. Die Daten bleiben bei einem Neustart und bei
weiteren Uploads bestehen, weil das Uploadskript `data/` auslässt.
Der Nutzer wünscht später automatische Wiedererkennung per Kamera. Diese
Version erstellt noch keine Profile aus Kamerabildern und speichert keine
Bilder, Gesichtsmerkmale oder Clips aus Kamerabildern in der Datenbank.
Für künftig automatisch erstellte Profile sind Merkmalsvektoren und eine
30-Tage-Frist ab letzter Sichtung vorbereitet. Beim Start, stündlich und
beim Lesen der Ereignisse/Profile werden abgelaufene Auto-Profile mitsamt
Merkmalsvektoren entfernt. Manuelle Profile bleiben bis zur manuellen
Löschung bestehen; Ereignisse bleiben ohne Profilzuordnung erhalten.
Eine echte Zuordnung braucht noch Kameratests und eine Prüfung von
Fehlzuordnungen.
## Lokal prüfen
Für die Webtests zusätzlich `httpx` installieren:
```bash
.venv/bin/python -m pip install -r requirements-dev.txt
.venv/bin/python -m unittest discover -s tests -v
```
Der Host-Test prüft Demo-Bild und Webendpunkte. Kamera, Nachtbild, WLAN,
SSH-Tunnel und GPIOs müssen am echten Pi bzw. Aufstellort geprüft werden.
Technische Grundlagen: [Picamera2-Handbuch](https://datasheets.raspberrypi.com/camera/picamera2-manual.pdf),
[FastAPI-StreamingResponse](https://fastapi.tiangolo.com/advanced/stream-data/).