# Ein Detector je Kamera. Der Name hinter dem @ waehlt die Umgebungsdatei: # # systemctl enable --now vogelalbum-detector@futterhaus # -> liest /etc/vogelalbum-futterhaus.env # # Genau so vorgeschlagen im Kopf von vogelalbum-detector.service, umgesetzt am # 24.09.2026 beim Aufsetzen von LXC 112. # # Zugangsdaten je Kamera in /etc/vogelalbum-.env (chmod 600, root:root): # VOGELALBUM_SOURCE=http://vogelkamera.local:8080/stream # VOGELALBUM_API=http://sammlung.local:8000 # VOGELALBUM_TOKEN= # VOGELALBUM_SAVE_TO=/var/lib/vogelalbum//rohdaten # VOGELALBUM_LIVE_PORT=8131 # VOGELALBUM_KLASSIFIZIERE=2 # # 🔑 Ein Dienst je Kamera und nicht einer fuer beide: Der Detector liest # genau einen Bildstrom. Abwechselnd zu lesen hiesse, die Aufmerksamkeit je # Kamera zu halbieren -- und an der Traenke ist ein Vogel womoeglich kuerzer # da als am Futterhaus. [Unit] Description=Vogelalbum-Detector fuer Kamera %i After=network-online.target Wants=network-online.target [Service] Type=simple User=vogelalbum Group=vogelalbum WorkingDirectory=/opt/vogelalbum EnvironmentFile=/etc/vogelalbum-%i.env Environment=PYTHONUNBUFFERED=1 # Die Schwellwerte stehen bewusst hier und nicht im Code: sie gehören zur # Kamera, nicht zum Programm. 'gate detector' ignoriert Bewegung — nötig, # weil unsere Kamera auf eine Hecke schaut, die im Wind steht. # --nachtsicht ergaenzen, wenn die Kamera Infrarot hat. Ohne den Schalter # pausiert die Analyse, sobald das Bild zu dunkel zum Erkennen ist. ExecStart=/opt/vogelalbum/venv/bin/python -m detector watch \ --gate detector \ --classify-every ${VOGELALBUM_KLASSIFIZIERE} \ --cooldown 5 \ --min-bird-frames 1 \ --verbose # Der Stream reißt nachts gern mal ab; einfach wieder hochkommen. Restart=always RestartSec=15 # ⚠ Die Kameras lassen nur EINEN Zuschauer zu. Beim Neustart muss der alte # Prozess seine Verbindung erst loslassen, sonst bekommt der neue nichts. KillSignal=SIGTERM TimeoutStopSec=20 # Ein Bilderkenner braucht weder Schreibzugriff aufs System noch neue Rechte. NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true ProtectKernelTunables=true ProtectControlGroups=true RestrictSUIDSGID=true ReadWritePaths=/var/lib/vogelalbum StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target