diff --git a/ghost_trigger.py b/ghost_trigger.py index 36d180c..2127c32 100644 --- a/ghost_trigger.py +++ b/ghost_trigger.py @@ -19,17 +19,21 @@ PIR_PIN = config.get('pir_pin', 17) VIDEOS_DIR = os.path.join(os.path.dirname(__file__), config.get('videos_dir', 'videos')) 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" # Cesta k ovládacímu socketu +MPV_SOCKET_PATH = "/tmp/mpvsocket" +# <<< NOVINKA: 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 = [] -# --- Nové funkce pro ovládání mpv --- +is_playing = False + +# --- Funkce pro ovládání mpv --- def send_mpv_command(command_json): """Pošle JSON příkaz do běžícího mpv přes socat.""" full_command = f"echo '{command_json}' | socat - {MPV_SOCKET_PATH}" try: subprocess.run(full_command, shell=True, check=True, capture_output=True, text=True) except subprocess.CalledProcessError: - # Chybu ignorujeme, pokud socket není připraven, další pokus proběhne při příštím pohybu pass # --- Hlavní logika --- @@ -43,47 +47,52 @@ def load_videos(): available_videos = [] def play_random_ghost(): - """Pošle mpv příkaz k přehrání videa JEDNOU a návratu k černé obrazovce.""" - print("Pohyb detekován! Posílám příkaz do mpv...") + """Zpracuje detekci pohybu, počká a přehraje video, pokud již jiné neběží.""" + global is_playing - load_videos() - if not available_videos: + if is_playing: + print("Pohyb ignorován, video již běží.") return - video_to_play = random.choice(available_videos) - try: - # Příkaz č. 1: Načti a přehraj video, ale s vypnutou smyčkou (loop=no) + is_playing = True + + print(f"Pohyb detekován, čekám {SURPRISE_DELAY}s pro moment překvapení...") + # <<< NOVINKA: Použití proměnné ze souboru config.yaml >>> + time.sleep(SURPRISE_DELAY) + + print("Posílám příkaz do mpv...") + load_videos() + if not available_videos: + return + + video_to_play = random.choice(available_videos) + command1 = f'{{"command": ["loadfile", "{video_to_play}", "replace", "loop=no"]}}' send_mpv_command(command1) - # Příkaz č. 2: Po skončení videa se vrať k zobrazení černého obrázku command2 = f'{{"command": ["loadfile", "{BLACK_IMAGE_PATH}", "append-play"]}}' send_mpv_command(command2) - - except Exception: - pass + + finally: + print(f"Senzor bude znovu aktivní za {SENSOR_LOCK_DURATION}s.") + # <<< NOVINKA: Použití proměnné ze souboru config.yaml >>> + time.sleep(SENSOR_LOCK_DURATION) + is_playing = False + print("Senzor je opět aktivní.") + # --- Hlavní spuštění --- -# Ukončíme všechny staré instance mpv pro čistý start os.system("pkill -f mpv") time.sleep(1) - load_videos() -# Spustíme mpv na pozadí s otevřeným ovládacím socketem subprocess.Popen([ - "/usr/bin/mpv", - "--no-audio", - "--fullscreen", - "--loop-file=inf", - "--idle", # Zůstane aktivní, i když nic nehraje - f"--input-ipc-server={MPV_SOCKET_PATH}", # Klíčový parametr pro ovládání - BLACK_IMAGE_PATH + "/usr/bin/mpv", "--no-audio", "--fullscreen", "--loop-file=inf", "--idle", + f"--input-ipc-server={MPV_SOCKET_PATH}", BLACK_IMAGE_PATH ]) -time.sleep(2) # Dáme mpv čas na spuštění a vytvoření socketu +time.sleep(2) -# Nastavení senzoru pohybu pir = MotionSensor(PIR_PIN) pir.when_motion = play_random_ghost @@ -92,4 +101,4 @@ try: pause() except KeyboardInterrupt: print("Ukončuji aplikaci.") - os.system("pkill -f mpv") # Při ukončení uklidíme \ No newline at end of file + os.system("pkill -f mpv") \ No newline at end of file