feat: make alarm music file configurable via env var and CLI arg

This commit is contained in:
2026-06-18 17:01:26 +02:00
parent 434c49b609
commit dfc9f0cd94
3 changed files with 39 additions and 6 deletions
+21 -5
View File
@@ -63,8 +63,14 @@ BUTTON_PIN = 17
LED_PIN = 27
def setup():
DEFAULT_MUSIC_FILE = "Laid Back - Sunshine Reggae.mp3"
def setup(music_file: str | None = None):
"""Initialize GPIO and audio hardware. Call once before running."""
if music_file is None:
music_file = os.environ.get("MUSIC_FILE", DEFAULT_MUSIC_FILE)
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
@@ -74,7 +80,7 @@ def setup():
pygame.mixer.init()
try:
pygame.mixer.music.load("Laid Back - Sunshine Reggae.mp3")
pygame.mixer.music.load(music_file)
pygame.mixer.music.set_volume(1.0)
except Exception as e:
logging.error(f"Error loading audio file: {e}")
@@ -200,8 +206,8 @@ class AlarmClock:
return True # Keep running
def run_alarm(test_mode=False):
setup()
def run_alarm(test_mode=False, music_file: str | None = None):
setup(music_file=music_file)
logging.info("Alarm clock started. Music is playing in an endless loop.")
if "pygame" in globals() and hasattr(pygame, "mixer") and pygame.mixer.get_init():
pygame.mixer.music.play(-1)
@@ -231,9 +237,19 @@ def run_alarm(test_mode=False):
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="Raspberry Pi alarm clock.")
parser.add_argument(
"--music-file",
default=os.environ.get("MUSIC_FILE", DEFAULT_MUSIC_FILE),
help="Path to the MP3 file to play (default: $MUSIC_FILE or default track).",
)
args = parser.parse_args()
ensure_single_instance()
try:
run_alarm()
run_alarm(music_file=args.music_file)
finally:
pygame.mixer.quit()
GPIO.cleanup()