RFT Adrett Radiostation mit LEDs (Icecast/Liquidsoap)

Icecast hat eine praktische Status-Webseite als JSON-File: http://icecast-ip:8000/status-json.xsl (btw: keine Authentifizierung notwendig). Über die kann man diverse Icecast-Parameter abfragen und ein paar LEDs ansteuern. Ich habe insgesamt drei LEDs (die erste Blaue ist für On/Off). Die zweite Blaue zeigt an, ob der Stream eingeschaltet ist (GPIO 21) und die Gelbe zeigt an, ob grade Zuhörer (Listener) aktiv sind (GPIO 16).
Anbei Movie, das die Listener-Funktion illustriert, VLC startet hier den Stream.


import time
import requests
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
LED_STREAM = 21     # Stream active
LED_LISTENERS = 16  # Listeners present
GPIO.setup(LED_STREAM, GPIO.OUT)
GPIO.setup(LED_LISTENERS, GPIO.OUT)
URL = "http://localhost:8000/status-json.xsl"
def get_status():
    try:
        r = requests.get(URL, timeout=2)
        data = r.json()
        source = data["icestats"].get("source")
        if not source:
            return False, 0
        # handle multiple mountpoints
        if isinstance(source, list):
            source = source[0]
        listeners = source.get("listeners", 0)
        return True, listeners
    except:
        return False, 0
while True:
    stream_on, listeners = get_status()
    # LED 1: Stream running
    GPIO.output(LED_STREAM, GPIO.HIGH if stream_on else GPIO.LOW)
    # LED 2: Listeners connected
    GPIO.output(LED_LISTENERS, GPIO.HIGH if listeners > 0 else GPIO.LOW)
    time.sleep(5)