Files
Halloween/PLAN.md
T
2026-10-14 05:07:07 +02:00

230 lines
14 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.
# Halloween – Projektregeln
## Ziel und aktueller Auftrag
Interaktives atmendes Grab für Halloween im Vorgarten der Schwester bauen.
Gewünscht sind ein kräftiger Schreckeffekt, Kamera, Weboberfläche und lokal
gespeicherte Bilder/Videoclips. Der Nutzer hat nun eine erste Pi-Software mit
Liveansicht und simuliertem Effektablauf beauftragt; das allgemeine
Uploadskript und die Blender-Konzeptvorschau wurden ebenfalls freigegeben.
Hardwarebau und Anschluss echter Aktoren folgen nach Klärung der Mechanik,
Versorgung und Sicherheit im Plan.
## Arbeitsweise
- Auf Deutsch, klar und knapp kommunizieren.
- `PLAN.md` als Arbeitsplan pflegen; erledigte Punkte, offene Entscheidungen
und verifizierte Ergebnisse getrennt dokumentieren.
- Diese `AGENTS.md` nach dauerhaften Änderungen an Architektur, Betrieb,
Sicherheit oder Werkzeugen im selben Arbeitsgang aktualisieren.
- Vor Änderungen in `halloween/`, `tools/`, `tests/` oder `preview/` die dortige
`instructions.md` lesen und bei geänderten Verträgen oder Abläufen
aktualisieren. Neue Modulordner erhalten eine eigene `instructions.md`.
- Vor Änderungen vorhandene Dateien und tatsächliche Hardware prüfen.
- Vorschläge und Annahmen ausdrücklich kennzeichnen; keine Kameramodelle,
Motorleistungen, Anschlüsse, Netzwerkadressen oder Preise erfinden.
- Produktvorschläge und Kaufverweise ausschließlich für Reichelt oder
Amazon; technische Herstellerunterlagen dürfen zur Prüfung dienen.
- Klein anfangen: einen vollständigen Effektablauf zuverlässig umsetzen,
anschließend zusätzliche Effekte ergänzen.
- Dokumentation übersichtlich halten; diese Datei unter 400 Zeilen halten.
- Im lokalen Git Code, Planung und bearbeitbare Blender-Szenen versionieren;
Renderdateien, Referenzclip, `.venv` und `data/` bleiben unversioniert.
- Gitea-Ziel für dieses Projekt: `https://gitea.fritz.box/marcinator_2/Halloween`;
Branch `main`, Repository zunächst privat. HTTPS-Zertifikatsprüfung aktiv
halten; das öffentliche Zertifikat nur lokal in Git konfigurieren.
Zugangsdaten gehören nicht in Git oder Chat.
## Hardware und Architektur
- Vorhanden laut Nutzer: Raspberry Pis 3–5; Pi 5 auf Nutzerfoto bestätigt,
RAM vermutlich 8 GB laut Nutzer, noch nicht am Gerät geprüft;
außerdem „2mini“ (genaue Geräte unbekannt), Camera Module 3 NoIR
(Beschriftung auf Nutzerfoto bestätigt), eventuell Display,
LEDs, Servos und Lötwerkzeug. 3D-Drucker laut Nutzer vorhanden;
Modell, Bauraum und Druckmaterial noch unbekannt.
PCA9685-Modul mit 16 Kanälen laut Nutzer vorhanden; konkrete Platine
und Anschlüsse noch nicht geprüft, kein Neukauf nötig.
Buchse/Buchse-Steuerleitungen laut Nutzer reichlich vorhanden;
kein Neukauf nötig, nicht für Servolast verwenden.
Weitere Teile dürfen vorgeschlagen werden.
Weiteres Nutzerfoto bestätigt einen 28BYJ-48-Schrittmotor mit 5-V-DC-
Beschriftung und OPITEC-Werkpackung 224105 mit Getriebeteilen.
Vollständigkeit, Treiber, Funktion und Lastfestigkeit noch ungeprüft.
OPITEC nennt für Werkpackung 224105 Motor R20 mit 1,5–4,5 V und
ca. 350–500 mA; Drehmoment fehlt. Fotografierter Einzelmotor nicht
unabhängig als R20 bestätigt; 6-V-Servoversorgung nicht direkt anschließen.
- Vorgeschlagene Aufteilung: Pi 5 für Kamera/WebUI/Ereignisse und Pi 3/4
für Effektsteuerung. Noch keine verbindliche Hardwareentscheidung.
- Für die NoIR-Kamera IR-Beleuchtung bei Dunkelheit und ein passendes
Standard-auf-Mini-Kamerakabel für Pi 5 einplanen; vorhandenes Kabel prüfen.
- GPIOs steuern geeignete Treiber; Motoren, Servos und größere LED-Lasten
erhalten eine passend dimensionierte Versorgung.
- Aktueller Nutzerumfang: zwei Antriebe, einer für die Hand und einer
für die Atemrotation. Nutzer sieht nun 230 V mit Relais für Rotation
vor; CHANCS 60KTYZ (Amazon B07WXFWYBZ, 220–240 V, ca. 2,5 U/min)
ist nun ausgewählt, Kauf noch nicht bestätigt. Waveshare RPI RELAIS 3CH
ist im aktuellen Warenkorb; Motorlastfreigabe noch offen. Versorgungsleitung
laut Nutzer vorhanden; Eignung vor Anschluss prüfen. Für die
Hand ist der Miuzei-35kg-/270°-Servo der aktuelle Kandidat, mit
separater stabilisierter 6-V-/5-A-Versorgung und Delock 65485 als
Anschlussadapter. Langsames Hervorkommen ist ausdrücklich akzeptiert.
Hub, Last, PWM-Steuerung und sichere Bewegungsgrenzen noch festlegen.
Motoren nicht gekauft oder praktisch geprüft.
GM40,5 625 12V / E192.12.625 war die vorherige Reserveoption für
Rotation; GM27 90 12V der frühere Kandidat für direkten Handhub.
Beide sind historische Vorschläge, keine verbindliche Auswahl.
Separate Pi-5-Versorgung ist der aktuelle Vorschlag;
Netzteilreserve anhand beider Anlauf-/Blockierströme prüfen.
- Atemrotation laut Nutzer: ca. 1,5 m lange waagerechte Stange mit zwei
leeren Kunststoffflaschen; vorgesehen ist Rotation um die Längsachse.
Abdeckungs- und Lagerwiderstand mitmessen, keine schwere Hubfläche
als Last voraussetzen.
Stangenlänge ist dabei kein Drehmomenthebel; wirksamen Abstand zur
Drehachse und Last über eine ganze Umdrehung prüfen. Keine
abgeschlossene Dimensionierung aus den früheren Kandidaten ableiten.
- Mechanik erst nach Klärung von Abmessungen, Gewicht, Hub und Bewegungsraum
auswählen. Atembewegung und kurzer Schreckimpuls getrennt bewerten.
- Neue Handidee: Gummizug für schnellen Hub, langsamer Motor zum
Rückspannen. Verriegelung mit vorab abgewickelter Schnurreserve oder
schaltbarer Kupplung ist noch ein Vorschlag. Ein zusätzlicher
Entriegelungsaktor wäre beim Riegelvorschlag nötig; nicht ausgewählt.
Motor muss die Spannkraft aufbringen; Gummizug ersetzt diese Last nicht.
- Elektrischer Linearantrieb ist eine zusätzliche Handoption; direktes
Ausfahren und langsames Spannen eines getrennten Federhubs unterscheiden.
Selbsthemmender Spindelantrieb gibt einen schnellen Federhub nicht
automatisch frei. Hand bleibt befestigt, geführt und im Grab begrenzt.
- Weitere Handoption auf Nutzerwunsch: Schwenkhebel nach einer
Industrieservo-Videovorlage. Günstiger Kandidat für direkten Handhub
ist JOY-IT COM-MOTOR02 (Reichelt GRABIT SERVO); noch nicht ausgewählt
oder getestet. Maximales Servomoment und Leerlaufgeschwindigkeit
sind keine zugesicherte kombinierte Lastleistung. Eigenes passendes
Servonetzteil und PWM-Steuerung vorsehen; keine Geschossfunktion.
- Neuer stärkerer Handkandidat vom Nutzer: Amazon Miuzei 35kg/270°,
ASIN B0CBBS6KX6. Anbieterwerte/Spitzenstrom und reale Last prüfen;
PWM-Winkelzuordnung und Bewegungsgrenzen für 270° auslegen.
Versorgungsvorschlag: getrenntes stabilisiertes 6-V-Netzteil mit
mindestens 5 A, Anlaufverhalten noch prüfen. Pi behält eigenes Netzteil;
bei nicht isolierter Steuerung gemeinsame Masse, Versorgungsplus getrennt.
ZHITING DS3235 ist laut Nutzer nicht lieferbar, SAIA-230-V-Kandidat
zu teuer; beide für die aktuelle Auswahl zurückgestellt.
Langsamen direkten Hub zuerst bewerten;
kein schneller Federimpuls zwingend erforderlich.
- Nutzer weist auf Verheddern abgewickelter Schnur hin. Die Variante mit
Schnurreserve ist erst nach Auslegung einer geführten Aufnahme sinnvoll.
Kurvenscheibe mit Hebel als schnurlose Alternative prüfen;
recherchierte Druck-/CAD-Vorlagen sind noch keine passende Handmechanik.
## Betriebsregeln
- Bewegung bleibt im Grab und außerhalb des Besucherwegs; Quetschstellen
abdecken. Leichte bewegte Bauteile und mechanische Anschläge vorsehen.
- Elektronik für Außeneinsatz geschützt planen; Kleinspannung am Grab
bleibt der bisherige Vorschlag. Für die neue 230-V-Relaisalternative
Netzspannungsseite geschlossen, berührungsgeschützt und für Außeneinsatz
auslegen; durch eine Elektrofachkraft aufbauen/prüfen lassen.
Pi-kompatible Steuerschnittstelle, geeignete Motorlastkontakte,
Zugentlastung und passende Stromversorgung vorsehen.
- Bei Start, Verbindungsverlust oder Fehler keine neue Schrecksequenz
auslösen; definierte sichere Zustände und lokalen Stopp vorsehen.
- Bei Gummizugmechanik stromlos haltende mechanische Verriegelung und
kontrollierte Entspannung für Wartung vorsehen. Motor-Stopp nimmt die
gespeicherte Energie nicht weg und hält einen entriegelten Hub nicht
sofort an; Führung, Befestigung und gedämpfte Anschläge begrenzen ihn.
- Sperrzeit und belegten Auslösebereich berücksichtigen.
- Kinder-/Sanftmodus anbieten. Kamerabasierte Größenhinweise sind unsicher
und dürfen nicht als zuverlässige Altersbestimmung gelten.
- Nutzerwunsch: „voller Schreck“ ist der anfängliche Standard und wird nach
neuem gültigem Trigger automatisch ausgelöst, ohne Einzelfreigabe.
Modi sind in der WebUI umstellbar; eine gewählte Einstellung soll einen
normalen Neustart überdauern. Nach Start erst freien Auslösebereich
abwarten; nach Stopp oder Fehler bewusst zurücksetzen. Kamerahinweise
gelten nicht als verlässliche Altersentscheidung; automatische Reaktion
auf Hinweise zu kleinen Besuchern vor Implementierung abstimmen.
## Kamera, Aufnahmen und Zugriff
- Personenerkennung für Auslösung und Profilzuordnung als getrennte Schritte
behandeln; unsichere Zuordnungen keinem Profil zuschreiben.
- Neuer Nutzerwunsch: Personenprofile und später automatische Zuordnung
wiederkehrender Besucher per Kamera. Aktuell ist nur die lokale Datenbank
mit manueller Zuordnung umgesetzt; automatische Erkennung nicht als
funktionsfähig ausgeben, bevor Verfahren und echte Kamera geprüft sind.
- Automatisch erzeugte Profile samt Merkmalsvektoren 30 Tage nach der letzten
Sichtung löschen. Manuell angelegte Profile bleiben bis zur Löschung bestehen.
- Clips mit Zeit, Vorschaubild und Ereignistyp zum manuellen Prüfen anbieten.
- Aufnahmebereich auf den vorgesehenen privaten Bereich begrenzen;
Maskierung, Aufbewahrung und Löschfrist vor Umsetzung festlegen.
- Tonwiedergabe und Tonaufnahme unterscheiden; Tonaufnahme standardmäßig aus.
- WebUI zunächst nur im lokalen Netz; keine öffentliche Freigabe ohne
ausdrücklichen Auftrag. Zugangsschutz einplanen.
## Erste Softwareversion
- `run.py` startet die FastAPI-WebUI nur auf `127.0.0.1`; Laptop-Zugriff
erfolgt per SSH-Tunnel. `--demo` kennzeichnet ein synthetisches Bild.
- Nutzer wünscht nun direkten Zugriff im Heimnetz. Manueller Start über
Uvicorn mit `--factory --host 0.0.0.0` ist in `SOFTWARE.md` beschrieben.
Aktuell ohne Login; keine öffentliche Internetfreigabe beauftragt.
`run.py` und systemd bleiben unverändert bei Loopback.
- Picamera2 liefert das MJPEG-Livebild; auf dem Entwicklungsrechner wurde
nur der Demo-Feed geprüft, nicht die echte Pi-Kamera.
- Moduswahl, simulierte Sequenz und lokale NanoDet-Personendetektion mit
gerichteter Linienüberquerung sind implementiert. Erkennung benötigt optional
OpenCV und ausdrücklich installiertes SHA-256-geprüftes Modell unter data/.
Am Pi fertige Systempakete python3-opencv/python3-numpy in einer Umgebung
mit --system-site-packages verwenden; OpenCV mindestens 4.10 prüfen.
requirements-detection.txt erlaubt nur Wheels, keinen impliziten Quellbuild.
Erkennung startet deaktiviert; Linie/Bereich/Richtung in der UI einstellen.
Gruppen verlangen neuen freien Bereich und Sperrzeit; Erkennungsfehler bei
aktivierter Automatik sperren bis zum bewussten Rücksetzen. Frames und
Personenrahmen werden synchron angezeigt; Tracks sind flüchtig, keine Profile.
Echte Personenauslösung am Pi, GPIO und Clip-Speicherung sind noch offen.
- SQLite speichert Testereignisse und Profilkennungen unter `data/`;
automatische Kamera-Zuordnung fehlt noch. Die Datenbank kann bereits
Merkmalsvektoren für Auto-Profile mit 30-Tage-Frist speichern; die Kamera
schreibt derzeit keine solchen Datensätze.
- Laufzeitdaten unter `data/` nicht mit dem Uploadskript überschreiben.
- Nutzer meldet am 14. Oktober 2026 die Pi-Kamera als angeschlossen;
Ausgabe von `rpicam-hello --list-cameras` bestätigt `imx708_noir`
mit 4608×2592 Pixeln. Nutzer bestätigt anschließend echtes Livebild
in der WebUI nach Einrichtung von Picamera2.
- Nutzer-Screenshot vom 14. Oktober 2026 bestätigt SSH-Zugang als
`marcinator_2` auf `raspi5wlan.local` und Projektdateien unter `~/halloween`.
Standgleichheit, Python-Einrichtung und laufende WebUI noch prüfen.
- Optionaler systemd-Autostart der WebUI wird mit `--install-service` beim
Upload eingerichtet; auf einem echten Pi noch nicht geprüft.
## Prüfung
- Softwareprüfungen, Hardwaretests und Außentests getrennt berichten.
- Erst ohne angeschlossene Aktoren simulieren, dann einzelne Aktoren testen,
anschließend Gesamtablauf und Fehlerfälle prüfen.
- Kamera bei tatsächlicher Dunkelheit, Beleuchtung und Verkleidungen testen.
- Sicheren Zustand bei Netzwerkausfall, Neustart und Stopp verifizieren.
- Dokumentationsänderungen erfordern keine zusätzlichen Softwaretests.
## Fiktive Videoeinblendungen
Scan-/Datenbankdarstellungen in Vorschauvideos verwenden erfundene
Avatare und IDs, mit sichtbarer Simulationskennzeichnung. Externe
Bildsequenzen eines Blender-Schnittprojekts bei Weitergabe mitnehmen.
- Nutzer-Ausgaben bestätigen Raspbian GNU/Linux 13 (trixie), Python 3.13.5
und Kernelarchitektur aarch64; Paket-/Python-Bitness noch nicht geprüft.
Nach Netzteilwechsel SSH wieder erreichbar, get_throttled=0x0;
keine Diagnose des vorherigen Ausfalls daraus ableiten. Kein OpenCV-Build
in der übermittelten Prozessliste; Dell-Netzteilwerte bleiben ungeprüft.
### Pi-Installation nach unterbrochenem OpenCV-Quellbuild
- Nutzer bestätigt Raspbian 13/trixie, Python 3.13.5, Kernel aarch64 und
`get_throttled=0x0`. Paketarchitektur ist damit noch nicht nachgewiesen.
- SSH nach Netzteilwechsel wieder möglich; Prozessliste zeigt nur PipeWire,
keinen laufenden pip-/Compiler-Build. Ausfallursache bleibt ungeklärt.
- Pi-Anleitung auf fertige Systempakete umgestellt; pip-Requirements erlauben
nur Wheels und brechen andernfalls ab. Kein weiterer Quellbuild vorgesehen.
- Offen: installierte OpenCV-Version/-Herkunft und echte Modellinferenz am Pi
prüfen. Dell-Netzteil laut Nutzer passend, Ausgangsprofile nicht verifiziert.