Aktualizovat ghost_trigger.py

po prvním načtení skriptu se analyzuje složka s videi a udělá se seznam videí a jejich délka, aby pak přechod byl plynulejší. Dle délky souboru se pak i nastavuje zámek senzoru.
This commit is contained in:
zrnek 2025-10-30 21:33:56 +01:00
parent 01f8a22cb0
commit c8a7682eff

View file

@ -1,3 +1,53 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
=============================================================================
Skript pro ovládání "digitálního ducha" v zrcadle (Projekt Zrcadlo)
=============================================================================
:Název skriptu: ghost_trigger.py
:Autor: zrnek
:Verze: 2.0.0 (Finální verze s IPC ovládáním)
:Datum: 30. října 2025
:Popis:
Tento skript běží na Raspberry Pi Zero 2 W a ovládá iluzi "ducha"
pro Halloweenskou párty.
Hlavní funkce:
1. Při startu analyzuje video soubory ve složce 'videos' a zjistí jejich délku.
2. Spustí přehrávač 'mpv' v režimu na pozadí, který zobrazuje černý
obrázek ('black.png') a čeká na příkazy.
3. Monitoruje pohybový PIR senzor.
4. Při detekci pohybu:
a. Okamžitě uzamkne senzor, aby se zabránilo opakovanému spuštění.
b. Počká na krátké "zpoždění pro překvapení" (definované v config.yaml).
c. Pošle 'mpv' přes 'socat' příkaz k plynulému přehrání náhodného videa.
d. Po skončení videa pošle příkaz pro návrat k černé obrazovce.
e. Udrží senzor zamčený po přesnou dobu trvání videa.
f. Odemkne senzor a čeká na další pohyb.
:Závislosti:
- Python 3
- Knihovny: PyYAML (`python3-yaml`), gpiozero (`python3-gpiozero`)
- Systémové nástroje: `mpv`, `socat`, `ffprobe` (z balíku `ffmpeg`)
:Struktura projektu:
/home/zrnek/duch/
config/
config.yaml (Konfigurační soubor)
videos/
video1.mp4 (Soubory s videi duchů)
...
black.png (Obrázek pro černé pozadí)
ghost_trigger.py (Tento skript)
:Spuštění:
Skript je navržen pro automatické spuštění jako systémová služba
prostřednictvím 'ghost-player.service'.
"""
import os
import yaml
import random
@ -20,7 +70,7 @@ VIDEOS_DIR = os.path.join(os.path.dirname(__file__), config.get('videos_dir', 'v
BLACK_IMAGE_PATH = os.path.join(os.path.dirname(__file__), "black.png")
VIDEO_EXTENSIONS = tuple(config.get('video_extensions', ['.mp4', '.mkv']))
MPV_SOCKET_PATH = "/tmp/mpvsocket"
# <<< NOVINKA: Načtení hodnot ze souboru config.yaml >>>
# <<< Načtení hodnot ze souboru config.yaml >>>
SURPRISE_DELAY = config.get('surprise_delay', 1.5)
SENSOR_LOCK_DURATION = config.get('sensor_lock_duration', 30)
available_videos = []