Externe Integration - Subsonic

[Integration] Subsonic — Verbinden Sie Gladys mit Ihrem Musikserver (Navidrome, Airsonic…)

Hallo zusammen :wave:

Ich habe gerade Subsonic veröffentlicht, eine externe Integration, die Gladys mit jedem Musikserver verbindet, der die Subsonic-API implementiert: Navidrome, Airsonic-Advanced, Gonic, LMS, Subsonic…

Mein anfänglicher Bedarf war einfach: Gladys sollte wissen, was auf meiner Navidrome-Instanz passiert, und Musik von meinen Szenen aus abspielen können. Sie wurde zunächst für Navidrome entwickelt und getestet, aber nichts daran ist spezifisch für diesen Server.

:link: Repository: GitHub - guim31/gladys-subsonic · GitHub


Was es bietet

Gerät „Subsonic-Server“ — 6 Sensoren

Sensor Was er liefert
Now playing Das aktuell abgespielte Stück im Format Künstler — Titel (Hörer)
Albumcover Das Cover des gehörten Albums, aktualisiert bei jedem Stückwechsel
Aktive Streams Wie viele Stücke gerade gehört werden
Songs / Künstler / Alben in der Bibliothek Die Größe Ihrer Bibliothek

Albumcover auf dem Dashboard anzeigen

Das Cover nutzt den Bildkanal von Gladys: Fügen Sie ein Widget Kamera hinzu und wählen Sie das Gerät „Subsonic-Server“. Der Name des Widgets überrascht zunächst, aber es ist das einzige von Gladys, das das Bild eines Geräts anzeigt und sich in Echtzeit aktualisiert. Das Widget Foto akzeptiert dagegen nur eine Liste von statischen, manuell eingegebenen URLs: Es kann nicht verfolgen, was gerade gespielt wird.

Gerät „Subsonic-Jukebox“ (optional)

Steuerung der Wiedergabe seitens des Servers (Jukebox-Funktion der API): Abspielen/Pause, Vorheriges/Nächstes, Lautstärke und Wiedergabestatus. Muss explizit sowohl auf Gladys- als auch auf Serverseite aktiviert werden. Das Widget Musik des Dashboards steuert diese Befehle direkt.

Buttons im Konfigurationsbildschirm

  • Verbindung testen — zeigt die Serveridentität an (z. B. navidrome 0.63.2, API 1.16.1)
  • Musikbibliothek scannen
  • Jukebox: Zufällige Wiedergabe (N zufällige Stücke)
  • Jukebox: Wiedergabeliste abspielen (nach Namen)

Einige Szenenideen

  • Nicht stören: Wenn Aktive Streams > 0, den Staubsauger nicht starten oder die Lautsprecher ausschalten.
  • Weckruf mit Musik: Um 7 Uhr spielt die Aktion „Wiedergabeliste abspielen“ Ihre Morgen-Wiedergabeliste auf dem Jukebox.
  • Auf das Stück reagieren: Der Sensor „Now playing“ ist ein Text-Feature, und Gladys löst Szenen aus, wenn sich sein Wert ändert — Sie können also Ihre Installation auf jedes neue Stück reagieren lassen (Titel anzeigen, Lichter anpassen…).
  • Dashboard: Das Albumcover in Groß (Kamera-Widget), der aktuelle Titel und die Jukebox-Befehle nebeneinander.

Installation

Voraussetzung: Gladys 4.86.0 oder höher.

Über Integrationen → Integration installieren, suchen Sie im Katalog nach „Subsonic“.

Dann im Tab Konfiguration:

  1. Server-URL: Die Wurzel, ohne /rest — z. B. http://192.168.1.10:4533 (Standardport von Navidrome).
  2. Benutzername / Passwort: Ein Konto Ihres Servers (erstellen Sie ggf. ein dediziertes).
  3. Authentifizierungsmethode: Lassen Sie Token. Das Passwort wird nie übertragen, nur ein gesalzter MD5-Hash wird gesendet. Wechseln Sie nur auf Legacy, wenn der Server sehr alt ist (API < 1.13) oder ein LDAP-Konto das Token ablehnt.
  4. Klicken Sie auf Verbindung testen, dann holen Sie sich das Gerät im Tab Entdeckung.

Für den Jukebox

Er spielt die Musik auf der Maschine, die den Server hostet (die mit Ihren Lautsprechern verbunden ist). Er muss auf beiden Seiten aktiviert werden — in Navidrome:

[Jukebox]
Enabled = true

(oder ND_JUKEBOX_ENABLED=true), dann Gerät Jukebox aktivieren in der Konfiguration der Integration.


Was es nicht kann (um Missverständnisse zu vermeiden)

Es ist wichtig, die Grenzen zu kennen, die von der Subsonic-API selbst kommen:

  • Der Jukebox spielt auf dem Server-Host, nicht auf der Gladys-Maschine: Es ist keine Multiroom-Lösung.
  • Es ist unmöglich, einen anderen Client zu steuern (Ihr Telefon, der Web-Player): Die API erlaubt es nicht, die Wiedergabe eines Drittanbieter-Clients zu steuern.
  • Keine Sprachbenachrichtigung über diese Integration: Die Aktion „Benachrichtigung abspielen“ von Gladys sendet eine TTS-Audio-URL, aber der Subsonic-Jukebox kann nur Stücke aus der Bibliothek abspielen. Das bleibt das Terrain von Sonos / Chromecast.

Technische Details

Aufgebaut auf Basis des offiziellen JavaScript-Templates und des SDKs @gladysassistant/integration-sdk. Node 24 Alpine, Multi-Arch-Image (amd64 + arm64), read-only rootfs, Unit-Tests und CI (Prettier / ESLint / Tests) bei jedem Commit. Lizenz Apache-2.0.

Besondere Sorgfalt bei den Anfragen an den Server: Die vollständige Künstlerliste wird nur gelesen, wenn sich die Bibliothek geändert hat (Scan-Signatur) oder einmal pro Stunde, anstatt bei jedem Abruf neu heruntergeladen zu werden — die Werte werden dennoch bei jedem Zyklus veröffentlicht. Das Cover folgt derselben Logik: Es wird nur heruntergeladen, wenn sich das Stück ändert, und in der größten Größe, die unter der Bildkanal-Grenze liegt.


Feedback, Fehlerberichte und Funktionsvorschläge sind hier oder in den Issues des Repositories willkommen. Wenn Sie es mit etwas anderem als Navidrome ausprobieren, interessiert es mich sehr zu wissen, ob alles gut funktioniert :slight_smile:

Hallo @guim31, ich wollte wissen, wie ich mein LMS mit deiner Integration verbinden kann. Meine LMS-Konfiguration erfordert keine Authentifizierung, aber das ist in der Integration zwingend erforderlich. Gibt es eine Lösung?

Hallo @Tolkyen :wave:

Gute Nachricht: Es sollte ohne Änderungen funktionieren, aber du musst über einen API-Schlüssel gehen.

Es ist nicht die Integration, die zu anspruchsvoll ist: Das Subsonic-Protokoll transportiert Identifikatoren in jeder Anfrage, es hat einfach keinen „Ohne Authentifizierung“-Modus. Und auf der LMS-Seite (falls es sich um Lightweight Music Server handelt, den du verwendest), ist es noch klarer — seine Dokumentation besagt, dass seine Subsonic-API ausschließlich die Authentifizierung per API-Schlüssel akzeptiert, unabhängig davon, dass deine Weboberfläche dich nicht danach fragt.

Konkrete Schritte:

  1. In LMS, öffne die Einstellungen-Seite deines Benutzers und erstelle einen API-Schlüssel.
  2. In der Gladys-Integrationskonfiguration:
    • Benutzername: deine LMS-Kennung
    • Passwort: der API-Schlüssel (und nicht ein Kontopasswort)
    • Authentifizierungsmethode: lasse Token
  3. Klicke auf Verbindung testen.

Ich habe den LMS-Code überprüft: Mit der Token-Methode berechnet er den gesalzenen Hash jedes API-Schlüssels deines Benutzers und vergleicht ihn mit dem, den wir senden — also entspricht das Standard-Schema der Integration. Falls es Probleme gibt, wechsle zu Legacy, LMS unterstützt auch dieses Format.

Ein wichtiger Hinweis: Ich habe nur Navidrome getestet. Der Jukebox könnte sich beispielsweise anders verhalten — LMS hat seine eigene Implementierung. Dein Feedback interessiert mich sehr, du wärst der erste mit LMS :slight_smile:

Jetzt verstehe ich, woher mein Problem kommt, als ich LMS gelesen habe, dachte ich an Logitech Media Server und nicht an Lightweight Music Server :sweat_smile:

Ach Mist… stimmt, das konnte nicht funktionieren, Logitech Media Server basiert nicht auf der Subsonic-API! Da musst du wohl eine Integration für dich anfordern :wink:

Hallo,

Danke für diese Integration
Ich installiere sie gerade mit einem Navidrome-Server
Ich habe also einen dedizierten Benutzer erstellt
Die Verbindung ist okay, aber ich habe eine Fehlermeldung beim Scannen:

Ich habe einen klassischen Benutzer ohne Administratorrechte erstellt
Ich habe vielleicht etwas übersehen, aber ich sehe nicht was :sweat_smile:

Ich habe es über die Methode Token und Legacy getestet und habe das gleiche Ergebnis

Danke

Hallo @prohand, danke für das Feedback :slight_smile:

startScan ist der einzige Endpunkt, der von der Integration verwendet wird, die Navidrome für Administratoren reserviert (das ist im Subsonic-Router von Navidrome hart codiert). Da dein dedizierter Benutzer ein Standardkonto ist, lehnt Navidrome die Operation ab — daher der Fehler 50. Übrigens ist das auch der Grund, warum Jeton und Legacy dasselbe Ergebnis liefern: Die Authentifizierung funktioniert sehr gut (dein „Verbindung testen“ ist grün), aber die Berechtigung blockiert, und die Authentifizierungsmethode ändert nichts daran.

Zwei Optionen:

  • Nichts tun — das ist meine Empfehlung. Dieser Button ist nur ein Komfort-Shortcut: Navidrome scannt bereits selbstständig (laut Zeitplan und Überwachung der Ordner), und die Sensoren der Integration werden beim nächsten Abruf folgen. Keine andere Funktion benötigt Admin-Rechte.
  • Dieses Konto in Navidrome zu einem Administrator machen, wenn du den Scan von Gladys aus auslösen möchtest.

Alles andere funktioniert perfekt mit einem Standardkonto: die Sensoren, das aktuelle Stück, das Albumcover und sogar der Jukebox (hier zählt Jukebox.Enabled auf Serverseite, nicht die Admin-Rechte).

Der echte Fehler liegt auf meiner Seite: Die Meldung erscheint in Grün, wie ein Erfolg, obwohl es eine Ablehnung ist — und sie erklärt nicht die Ursache. Ich werde das korrigieren, damit sie klar als Fehler mit der Begründung erscheint. Danke, dass du es gemeldet hast!

Danke für das Feedback
Ich habe gerade überprüft und tatsächlich sehe ich meinen Server :slight_smile:

Danke :wink:

Ich weiß nicht, ob das ein Bug ist oder normal, aber ich habe gerade die Musik auf der Navidrome-Seite gestoppt und es zeigt mir an, dass immer noch ein Lied abgespielt wird.

Für die Musik, die weiterhin angezeigt wird: Das ist kein Bug, sondern das Verhalten der „Wiedergabeliste“ von Navidrome. Eine Sitzung wird dort nach dem Stoppen gespeichert — 30 Minuten, wenn der Player Pause oder Stopp gemeldet hat, sonst bis zum theoretischen Ende des Titels, da das klassische Subsonic-Protokoll keine „Stopp“-Funktion hat: Ein Client hört einfach auf, etwas anzufordern.

Aber ich habe eine Information nicht genutzt, die Navidrome bereitstellt: den tatsächlichen Status jeder Sitzung. Das ist in der nächsten Version behoben — nur noch tatsächlich abspielende Sitzungen werden gezählt, also wird dein Stopp beim nächsten Abruf (max. 60 s) berücksichtigt.

Es bleibt ein unabänderlicher Fall: Ein Player, der geschlossen wird, ohne den Server zu benachrichtigen, bleibt bis zum Ende des Titels aufgelistet. Da kann niemand etwas machen.

Und ich habe auch die Scan-Nachricht korrigiert: Sie wird jetzt in Rot mit der Erklärung (Admin-Rechte) angezeigt, statt eines rohen Fehlercodes. Danke für diese beiden Rückmeldungen!! :slight_smile:

Danke für die Korrekturen :smiling_face: