App für multiroom sendspin audio renderer und gpio nutzung mit mqtt ha integration

Hallo zusammen,

ich nutze schon ewig Logitech Media Server mit Squeezelite als Software-Player auf verschiedener Hardware zur Raumbeschallung — zentral ein Intel NUC mit drei USB-Soundkarten und drei Squeezelite-Instanzen, dazu ein Arduino Mega mit Firmata-Firmware und einem Python-Daemon für ein bisschen Hausautomatisierung.

Hier das repo zur lokalen Installation.

Nachdem ich in den letzten Monaten einiges mit KI gemacht habe, gieße ich genau diese Funktionen gerade in ein Home-Assistant-Addon bzw. eine lokale Installation für Linux (Debian, Ubuntu, Mint, AlmaLinux, Arch). Die Nicht-HA-Version läuft schon, das HA-Addon ist gerade im Bau. Das Schöne: bare-metal und Addon teilen sich denselben Code — nur die Umgebung unterscheidet sich.

Die Idee dahinter: euer Home Assistant OS um etwas erweitern, das es so nicht out-of-the-box gibt — nämlich beliebig viele USB-Soundkarten zur Multiroom-Beschallung und digitale Ein-/Ausgänge über Arduino (unterstützt werden Uno, Nano, Mega 2560 und Due) oder die Pi-GPIOs. Und das komplett ohne CLI oder YAML-Gefrickel — alles wird im Webinterface per Klick eingerichtet, von der Hardware-Zuordnung über MQTT bis zum Firmware-Flashen.

Die Anzahl der Räume/Player ist nur durch eure Hardware begrenzt — in der Praxis durch die CPU (das synchrone Decoding kostet etwas Rechenzeit) und die USB-Ports/-Bandbreite, praktisch nie durch den RAM: Jede Player-Instanz ist eine USB-Soundkarte plus ein eigener sendspin-Prozess und braucht grob ~128 MB RAM und ein paar Prozent CPU (live im System-Tab des Webinterfaces ablesbar). Heißt konkret: ein Pi Zero 2 W schafft realistisch einen Raum (da limitiert die CPU), ein Pi 3B+ zwei bis drei, und auf einem NUC oder x86-Mini-PC gehen euch eher die USB-Anschlüsse aus als die Ressourcen.

Multiroom-Audio: Über das Webinterface lassen sich mehrere Instanzen des sendspin-cli-Players (der Nachfolger des „Resonate"-Ansatzes, ein offener Standard für synchrones Multiroom-Audio) verwalten und ihnen die Hardware fest zuordnen. Die USB-Soundkarten werden per udev-Regeln stabil gefunden — zur Not über den physischen USB-Port-Pfad, weil identische USB-Soundkarten sonst oft keine eindeutige Seriennummer zur Unterscheidung haben. Danach werden die Player von Music Assistant entdeckt und ganz normal über Home Assistant gesteuert.

Status & Verstärker-Steuerung per MQTT: Jede Player-Instanz baut zusätzlich (sofern aktiviert) eine eigene MQTT-Verbindung auf und meldet ihren Status — offline, pause, play. Das offline ist über LWT (Last Will and Testament) umgesetzt, also setzt selbst eine Netzwerktrennung den Sensor zuverlässig auf offline (eigene Verbindung pro Raum, damit das LWT auch wirklich pro Raum greift). Praktisch, weil ich die Verstärker nur einschalte, wenn sie gebraucht werden. Alles taucht per MQTT-Autodiscovery automatisch in HA auf.

GPIO/Arduino — Firmware-Flashen direkt aus der Web-UI: Weil der NUC/Pi eh schon läuft, kann das Addon auch Raspberry-Pi-GPIOs oder per USB angeschlossene Arduinos ansteuern. Und das Beste: Die Firmata-Firmware wird direkt aus dem Webinterface auf den Arduino geflasht — angestecktes Board wird automatisch erkannt, StandardFirmata für Uno/Nano/Mega liegt bei (Flashen via avrdude bzw. bossac für den Due), eigene .hex geht auch. Kein Arduino-IDE, kein Terminal nötig. Die Pins weist man grafisch über das echte Board-Layout zu (40-Pin-Header beim Pi, physisches Layout beim Arduino, belegte Pins gesperrt) und konfiguriert sie als Ein- oder Ausgang — mit der Option, dass ein Eingang direkt einen Ausgang schaltet (Toggle wie ein Lichtschalter oder mit Hysterese-Timer wie ein Bewegungsmelder), ganz ohne Umweg über HA. Optional kann ein Ausgang auch einen Shell-Befehl auslösen. Ein-/Ausgänge erscheinen in HA als Switch bzw. Binary-Sensor.

Das Projekt heißt ha-roomhub. Sobald das Addon rund ist, stelle ich es hier genauer vor — über Feedback und Ideen freue ich mich schon jetzt!

Nun lassen wir Bilder sprechen:


Die Bilder sind von einem PI3 und die HA App ist im Test, also unter Proxmox mit USB Pass Through