63 lines
1.8 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python3
import subprocess
import time
import os
import requests
from datetime import datetime
# --- CONFIG ---
STREAM_URL = "http://stream.genesis-radio.net:7454/stream"
DURATION = 30 # Seconds to monitor
SILENCE_THRESHOLD = "-50dB"
SILENCE_DURATION = 5 # Seconds of continuous silence to trigger alert
TELEGRAM_BOT_TOKEN = "8178867489:AAH0VjN7VnZSCIWasSz_y97iBLLjPJA751k"
TELEGRAM_CHAT_ID = "1559582356"
ALERT_FLAG_PATH = "/tmp/genesis_radio_silence.alerted"
# --- FUNCTIONS ---
def check_for_silence():
"""Run ffmpeg with silencedetect and return True if silence is detected."""
command = [
"ffmpeg",
"-i", STREAM_URL,
"-t", str(DURATION),
"-af", f"silencedetect=noise={SILENCE_THRESHOLD}:d={SILENCE_DURATION}",
"-f", "null", "-"
]
try:
output = subprocess.check_output(command, stderr=subprocess.STDOUT, text=True)
return "silence_start" in output
except subprocess.CalledProcessError as e:
return "silence_start" in e.output
def send_telegram_alert():
"""Send an alert to Telegram."""
message = f"🚨 Genesis Radio Alert [{datetime.now()}]: Possible dead air detected on the stream."
url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
payload = {
"chat_id": TELEGRAM_CHAT_ID,
"text": message
}
try:
requests.post(url, data=payload, timeout=10)
except requests.RequestException as e:
print(f"[!] Failed to send Telegram alert: {e}")
def main():
silence = check_for_silence()
if silence:
if not os.path.exists(ALERT_FLAG_PATH):
send_telegram_alert()
open(ALERT_FLAG_PATH, "w").close()
else:
if os.path.exists(ALERT_FLAG_PATH):
os.remove(ALERT_FLAG_PATH)
if __name__ == "__main__":
main()