Zum Hauptinhalt springen

Snapcast Smart-Home-Integration, kostenlos und Open Source

Snapcast-Integration für Gladys Assistant

Multiroom-Audio mit Snapcast: Lautstärke und Stummschaltung pro Raum, Streams, Gruppen, Szenen.

Snapcast spielt denselben Ton synchron in allen Räumen: ein snapserver empfängt die Streams (Spotify über librespot, AirPlay, MPD, ein Radio, eine Pipe…) und schickt sie an die snapclients, einen pro Raum. Diese Integration bringt den Server in Gladys: die Lautstärke und Stummschaltung jedes Raums, welcher Stream in welchem Raum läuft, die Raumgruppen und Szenen, wenn ein Lautsprecher offline geht oder ein Stream startet.

Die Integration spielt selbst keine Musik: Die Musik kommt aus den Quellen deines Snapcast-Servers (MPD, Spotify…). Getestet mit snapserver und snapclient 0.31 in Docker, ohne Lautsprecher: Rückmeldungen sind willkommen.

Voraussetzungen​

  • Ein Snapcast-Server (snapserver 0.26 oder neuer; 0.31 getestet), den Gladys im lokalen Netzwerk erreicht.
  • Sein JSON-RPC-Steuerport über TCP, standardmäßig 1705, aktiviert (das ist er, außer der Abschnitt [tcp] von snapserver.conf sagt enabled = false).
  • Gladys 5.1 oder neuer.

Konfiguration​

  1. Öffne in Gladys Integrationen, suche Snapcast und installiere sie.
  2. Serveradresse: die IP-Adresse oder der Hostname des Rechners, auf dem snapserver läuft, zum Beispiel 192.168.1.20. Ergänze :Port oder fülle Steuerport aus, wenn es nicht 1705 ist (nicht der HTTP-Port 1780 von Snapweb).
  3. Sprache: die Sprache der Funktionsnamen und der Texte, die die Integration erzeugt. Die Namen werden beim Hinzufügen eines Geräts festgelegt: wähle sie, bevor du die Geräte hinzufügst.
  4. Speichere. Die Integration verbindet sich und zeigt dann jeden Client und jeden Stream im Tab Erkennung der Integration: füge die gewünschten hinzu.

Die Integration hält eine Verbindung zum Server offen und folgt jeder Änderung live: Eine in Snapweb oder einer anderen App geänderte Lautstärke erscheint sofort in Gladys. Die Integration liest den ganzen Zustand jede Minute und nach jeder Wiederverbindung neu.

Geräte​

Clients (Räume)​

Jeder snapclient ist ein Gerät, mit dem Namen, den du ihm in Snapweb gegeben hast (sonst dem Namen seines Rechners).

FunktionWas sie tut
Lautstärke0 bis 100, in beide Richtungen
StummEin = Ton aus, in beide Richtungen
VerbundenOb der snapclient mit dem Server verbunden ist
StreamDer Stream des Raums; ein anderer schaltet seine ganze Gruppe um
WiedergabestatusWiedergabe, wenn sein Stream Ton hat
Aktuelle WiedergabeInterpret und Titel, wenn der Stream sie meldet, sonst Name und Status des Streams
Wiedergabe, PauseWirken auf den Stream des Raums, wenn ein Steuerskript ihn steuert (siehe Streams)
Vorheriger Titel, Nächster TitelEbenso

Ein Client hat Lautstärke, Wiedergabe, Pause und Wiedergabestatus, die die Gladys-Box Musik erwartet: Füge die Box einem Dashboard hinzu und wähle den Raum.

Streams​

Jeder Stream des Servers ist auch ein Gerät: sein Wiedergabestatus und was er spielt (aktuelle Wiedergabe). Ein Stream mit Steuerskript (librespot, MPD über meta_mpd.py, AirPlay, Plexamp… siehe Snapcast-Dokumentation) hat außerdem die Tasten Wiedergabe, Pause, Vorheriger Titel und Nächster Titel. Eine einfache Pipe hat keine: Snapcast kann nicht pausieren, was es nicht steuert.

Es gibt kein Gerät pro Gruppe: Snapcast löscht eine geleerte Gruppe und gibt einer neuen eine neue Kennung, was verwaiste Geräte in Gladys hinterlassen würde. Gruppen werden über ihre Clients gesteuert (Stream-Wahl, Aktionen unten).

Dashboard-Widget​

Snapcast-Räume:

  • ohne gewählten Raum: jeder Client mit dem, was er spielt, und seiner Lautstärke (oder „Stumm“, „Offline“), dazu eine Taste Alle stumm / Alle Ton an;
  • mit gewähltem Raum: sein Status und seine Lautstärke, die Tasten Leiser, Lauter, Stumm / Ton an, und Abspielen / Pause, wenn sich sein Stream steuern lässt, sonst Nächster Stream.

Szenen-Auslöser​

AuslöserWannVariablen
Client getrenntEin snapclient verlässt den Server (Lautsprecher aus, Netzwerk weg)Client-Name
Client verbundenEin snapclient verbindet sich wieder mit dem ServerClient-Name
Stream gestartetAuf einem Stream kommt Ton an (jemand spielt über Spotify…)Stream, Titel, Interpret
Stream gestopptEin Stream hört auf zu spielen (pausiert, kein Ton mehr)Stream, Titel, Interpret

Jeder Auslöser lässt sich auf einen Client oder einen Stream beschränken. Nichts wird ausgelöst für das, was passiert, während der Server selbst nicht erreichbar ist.

Szenen-Aktionen​

AktionWas sie tut
Lautstärke eines Raums einstellenLautstärke eines Clients, 0 bis 100
Überall stumm schalten oder Ton anAlle Clients des Servers; gibt zurück, wie viele geändert wurden
Anderen Stream in einem Raum spielenDie Gruppe des Clients wechselt auf den gewählten Stream
Stream steuernAbspielen, Pause, Abspielen/Pause, weiter, zurück, bei einem Stream oder dem eines Raums
Zwei Räume gruppierenDer erste Client tritt der Gruppe des zweiten bei, synchron
Raum aus der Gruppe lösenDer Client bildet eine eigene Gruppe, gleicher Stream

Lautstärke, Stummschaltung und Stream eines Raums lassen sich auch mit der Standardaktion „Gerätewert setzen“ von Gladys einstellen.

Szenen-Beispiele​

  • Ruhige Nacht: um 23 Uhr „Überall stumm schalten oder Ton an“ → Stumm. Um 7 Uhr Ton an.
  • Morgenradio: werktags um 7 Uhr „Anderen Stream in einem Raum spielen“ → Küche, Stream Radio, dann „Lautstärke eines Raums einstellen“ → Küche, 30.
  • Die Musik folgt dir: bei „Stream gestartet“ von Spotify „Zwei Räume gruppieren“ → das Wohnzimmer tritt der Küche bei.
  • Lautsprecher ausgesteckt: bei „Client getrennt“ im Bad eine Nachricht senden.

Fehlerbehebung​

  • „Der Snapcast-Server antwortet nicht“: Prüfe die Adresse, ob snapserver läuft und ob der Port der TCP-Steuerport ist (standardmäßig 1705), weder der Stream-Port 1704 noch der HTTP-Port 1780. Eine Firewall muss Gladys durchlassen.
  • Ein Raum zeigt „Offline“: Sein snapclient ist nicht mit dem Server verbunden (Rechner aus, falsche Serveradresse auf dem Client).
  • „Dieser Stream lässt sich nicht steuern“: Der Stream hat kein Steuerskript. Nutze eine Quelle, die ihren Player meldet (librespot, MPD mit meta_mpd.py…), oder steuere den Player selbst.
  • Ein Stream zeigt „Inaktiv“, obwohl sein Player spielt: Bei snapserver kommt kein Ton an; Snapcast meldet, was es empfängt.
  • Mehr Details: Setze den LOG_LEVEL der Integration auf debug.

Einschränkungen​

  • Ein Snapcast-Server pro Integration.
  • Keine Authentifizierung: Der Steuerport von snapserver hat standardmäßig keine. Ein Server, der eine verlangt (Option neuerer Versionen), wird nicht unterstützt.
  • Kein Gerät pro Gruppe (siehe Streams); die Latenz eines Clients und die Namen stellst du in Snapweb ein.
  • Der Aufbau eines Stream-Geräts hängt von seinem Steuerskript ab: Wird ein Stream später steuerbar, bietet Gladys im Tab Erkennung Aktualisieren an.
  • Getestet mit snapserver und snapclient 0.31 in Docker, mit einem Pipe-Stream und einem geskripteten Player, ohne Lautsprecher. Rückmeldungen im Forum sind willkommen.

Konfigurationseinstellungen​

Diese Einstellungen fragt Snapcast in seinem Konfigurationsbildschirm in Gladys ab.

EinstellungTypPflichtfeldBeschreibung
Verbinde deinen Snapcast-ServersectionNeinGib die Adresse des Rechners ein, auf dem snapserver läuft. Die Integration nutzt seinen JSON-RPC-Steuerport (TCP 1705, standardmäßig aktiv) und folgt jeder Änderung live. Jeder snapclient wird ein Gerät (ein Raum), jeder Stream auch.
ServeradressestringJaIP-Adresse oder Hostname von snapserver. Ergänze :Port, wenn sein Steuerport nicht 1705 ist.
SteuerportnumberNeinTCP-Port der JSON-RPC-Steuerung (Abschnitt tcp von snapserver.conf). Nicht der HTTP-Port 1780.
OptionensectionNeinSprache der Namen und Texte, die die Integration erzeugt (Funktionsnamen werden beim Hinzufügen des Geräts festgelegt).
SpracheselectNein

So installierst du Snapcast in Gladys​

  1. Öffne in Gladys Integrationen: Snapcast erscheint im Katalog neben den nativen Integrationen, mit einem Community-Badge.
  2. Klicke auf Installieren. Gladys lädt das Docker-Image (ghcr.io/guim31/gladys-snapcast:1.0.0) herunter, startet es in einer vom Kern isolierten Sandbox und erzeugt die Oberfläche der Integration (Geräte, Erkennung und Konfiguration).
  3. Öffne den Bildschirm Konfiguration der Integration, fülle die Einstellungen aus und speichere.
  4. Du kannst sie auch direkt über die URL ihres Repositorys installieren: https://github.com/guim31/gladys-snapcast.

Snapcast benötigt Gladys >=5.1.0. Der Katalog in Gladys wird stündlich aktualisiert, eine neue Version ist also spätestens eine Stunde nach ihrer Veröffentlichung verfügbar.

Du nutzt Gladys noch nicht? Es ist kostenlos und Open Source: folge der Installationsanleitung, um loszulegen.

Über externe Integrationen​

Snapcast ist eine externe Integration: eine Community-Integration, die als Docker-Container verpackt und auf GitHub veröffentlicht wird. Gladys installiert sie mit einem Klick und führt sie in einer vom Kern isolierten Sandbox aus. Sie wird von guim31 veröffentlicht und gepflegt, nicht vom Gladys-Kernteam.

Abonniere den Newsletter von Gladys Assistant

Ein paar E-Mails im Monat zu neuen Releases und Neuigkeiten aus dem Projekt. Verschickt von Pierre-Gilles Leymarie, dem Gründer des Projekts. Jederzeit abbestellbar 🙂