
Denon HEOS ist eine drahtlose Multiroom-Audio-Plattform, die auf dem HEOS Command Line Interface (CLI) aufbaut — einem textbasierten Protokoll, das jeden Lautsprecher, jede Soundbar, jeden Verstärker und jede HEOS-fähige Komponente im lokalen Netzwerk über TCP-Port 1255 verfügbar macht. TapHome nutzt dieses Protokoll, um Wiedergabe, Lautstärke, Stummschaltung und Wiedergabemodus von HEOS-Lautsprechern ohne Cloud-Abhängigkeit zu steuern.
Das Template deckt die gesamte kabellose HEOS-Produktreihe (HEOS 1, 3, 5, 7), die Soundbars HEOS Bar und HomeCinema, die Komponenten HEOS Amp / Link / Drive, den HEOS Sub sowie die neueren Denon Home 150 / 250 / 350 Lautsprecher und die Sound Bar 550 ab. Ein einziges HEOS-Gerät im LAN genügt — das CLI macht jeden anderen HEOS-Player im Netzwerk über den Endpunkt player/get_players erreichbar.
Dieses Template ist ausschließlich für HEOS-Lautsprecher, Soundbars und HEOS-fähige Verstärker gedacht. Denon- und Marantz-AVR-Receiver (AVR-X-Serie, SR-Serie usw.) verwenden ein separates Denon/Marantz Telnet-Control-Protokoll auf Port 23 und sind mit diesem Template nicht kompatibel — auch nicht auf Modellen mit integriertem HEOS Built-in.
Netzwerkverbindung
HEOS kommuniziert über TCP auf Port 1255 mit Klartext-ASCII-Befehlen, die mit \r\n abgeschlossen werden, und gibt JSON-Antworten zurück. Eine Authentifizierung ist nicht erforderlich — jedes Gerät im gleichen LAN kann sich mit dem CLI-Port verbinden.
Bevor TapHome das Gerät steuern kann, muss der HEOS-Lautsprecher über die HEOS-Mobile-App eingerichtet sein:
- Installieren Sie die HEOS App (Android / iOS) auf einem Smartphone oder Tablet im gleichen WLAN-Netzwerk.
- Verbinden Sie das HEOS-Gerät über den Einrichtungsassistenten der App mit WLAN oder Ethernet.
- Stellen Sie sicher, dass die Firmware aktuell ist (das Template basiert auf HEOS CLI v1.17, entspricht Firmware 2.41.140 oder neuer).
- Notieren Sie die IP-Adresse des Lautsprechers — zu finden in der HEOS-App unter Settings → My Devices → About oder in der DHCP-Client-Liste des Routers.
Verwenden Sie für das HEOS-Gerät, mit dem sich TapHome verbindet, eine statische IP oder eine DHCP-Reservierung. Der Lautsprecher dient als Gateway zu allen anderen HEOS-Playern, daher hält eine stabile Adresse das gesamte Ökosystem erreichbar.
Das HEOS CLI hat keine Authentifizierung. Halten Sie den Lautsprecher in einem vertrauenswürdigen LAN-Segment — jedes Gerät mit Netzwerkzugriff auf Port 1255 kann die Wiedergabe steuern.
Konfiguration
Verbindungsdaten in TapHome
Geben Sie beim Template-Import in der TapHome-App die IP-Adresse des HEOS-Lautsprechers in den Parameter IP Address ein. Der TCP-Port 1255 und das Protokoll-Framing sind im Template bereits festgelegt. TapHome öffnet eine einzige persistente TCP-Verbindung und leitet HEOS-CLI-Befehle gebündelt darüber.
PlayerId-Initialisierung
Jeder heos://player/*-Befehl benötigt eine Player ID (pid) — eine große vorzeichenbehaftete Ganzzahl, die HEOS jedem Lautsprecher im Netzwerk dynamisch zuweist. Das Template speichert sie in der benutzerdefinierten Variable PlayerId. Da HEOS die pid pro Netzwerk dynamisch generiert, enthält das Template einen Platzhalterwert (-1857880384), der bei der Ersteinrichtung ersetzt werden muss.
Das Modul bietet zwei Service-Aktionen zur Ermittlung und Zuweisung der pid. Führen Sie diese nach dem Template-Import einmalig aus:
- Get Players — sendet
heos://player/get_playersund speichert die JSON-Antwort in der ModulvariablePlayersResponse. Das Service-Attribut Players des Moduls zeigt danach die Liste der im Netzwerk sichtbaren HEOS-Player mit Name, pid, Modell und IP-Adresse. - Set Player Id — nimmt einen
Index-Parameter entgegen (0-basierte Position im Players-Array) und schreibt die zugehörige pid in die benutzerdefinierte VariablePlayerId. Wählen Sie den Index des Lautsprechers, den TapHome steuern soll — ein TapHome-Modul ist jeweils an einen HEOS-Player gebunden.
Nach diesen beiden Schritten arbeiten alle untergeordneten Geräte (Volume, Mute, Play, Pause usw.) mit dem gewählten Lautsprecher. Um einen zweiten HEOS-Player zu steuern, importieren Sie eine zweite Template-Instanz gegen dieselbe (oder eine andere) HEOS-IP und wiederholen den Set-Player-Id-Schritt mit einem anderen Index.
Wenn das Players-Attribut beim ersten Aufruf leer ist, befindet sich das HEOS-CLI-Modul möglicherweise im Ruhezustand. Starten Sie Get Players nach einigen Sekunden erneut — HEOS bringt den CLI-Kern beim ersten Verbindungsaufbau hoch und benötigt einen Moment, bis alle Player aufgezählt sind.
Gerätevariablen
Zwei untergeordnete Geräte verfügen nach dem Template-Import über konfigurierbare Variablen:
| Gerät | Variable | Standard | Hinweise |
|---|---|---|---|
| Play URL | URL | Pixabay-Türklingel MP3 | Beliebige direkte HTTP(S)-URL zu einem Audio-Stream oder einer Audiodatei |
| Volume Up / Volume Down | Step | 5 | Lautstärkeänderung pro Tastendruck; die HEOS-Spezifikation begrenzt den Bereich auf 1–10 |
Öffnen Sie in der TapHome-App das Detail jedes Geräts und setzen Sie diese Variablen auf die gewünschten Werte. URL-codierte Sonderzeichen in der Stream-URL (&, =, %) übernimmt das Template-Skript.
Gerätefunktionen
Das Template stellt 12 untergeordnete Geräte bereit, die Wiedergabe, Lautstärke, Stummschaltung und URL-Streaming für einen HEOS-Player abdecken.
Lautstärkesteuerung
Das Gerät Volume ist ein Dimmer, der heos://player/get_volume liest (Pegel 0–100) und auf den Dimmer-Bereich 0.0–1.0 skaliert (Le := level / 100). Beim Schreiben wird heos://player/set_volume mit ROUND(Le * 100) gesendet. Die Lautstärke wird alle 2,5 Sekunden gepollt — externe Lautstärkeänderungen aus der HEOS-App oder einem anderen Controller werden in TapHome im nächsten Zyklus übernommen.
Volume Up und Volume Down sind Taster, die heos://player/volume_up und heos://player/volume_down mit der konfigurierbaren Schrittweite Step senden. Praktisch zur Anbindung an physische Wandschalter oder Smart Rules.
Mute
Mute ist ein Schalter, der heos://player/get_mute liest und heos://player/set_mute mit state=on|off schreibt. Bei Stummschaltung wird der Lautsprecher leise geschaltet, ohne den eigentlichen Lautstärkepegel zu verändern.
Transport
Vier Taster decken den grundlegenden Transport ab:
- Play — schreibt
heos://player/set_play_state?state=play - Pause — schreibt
heos://player/set_play_state?state=pause - Stop — schreibt
heos://player/set_play_state?state=stop - Next Track — schreibt
heos://player/play_next - Previous Track — schreibt
heos://player/play_previous
Es handelt sich um reine Schreibaktionen — das Template pollt den aktuellen Wiedergabestatus nicht zurück, die Transport-Taster spiegeln daher nicht wider, ob der Lautsprecher tatsächlich abspielt.
Wiedergabemodus
Play Mode ist ein Multi-Value-Schalter, der die HEOS-Flags repeat und shuffle in einen einzelnen 6-Wert-Enum kombiniert. Er wird über heos://player/get_play_mode und heos://player/set_play_mode gelesen und geschrieben:
| Wert | Modus |
|---|---|
| 0 | Keine Wiederholung, keine Zufallswiedergabe |
| 1 | Alles wiederholen |
| 2 | Einzeltitel wiederholen |
| 3 | Zufall, keine Wiederholung |
| 4 | Zufall, alles wiederholen |
| 5 | Zufall, Einzeltitel wiederholen |
Das XML-Template reserviert in der Multi-Value-Konfiguration die Slots 6–9, diese sind jedoch ungenutzt — nur die Werte 0–5 sind erreichbare Zustände.
QuickSelect-Presets
Quick Select ist ein reiner Schreib-Multi-Value-Schalter (1–9), der ein HEOS-QuickSelect-Preset über heos://player/play_quickselect?id={1-9} auslöst. Quick Selects werden direkt im Player abgelegt (typischerweise über einen gekoppelten Denon AVR oder HEOS Bar) und können einen voreingestellten Eingang, eine Quelle oder einen Sender speichern.
Quick Select ist in der HEOS-Spezifikation §4.2.24 als AVR-only-Befehl definiert. Er funktioniert auf HEOS Amp, HEOS Link, HEOS Bar und HEOS-fähigen AVR-/Receiver-Produkten, liefert jedoch auf eigenständigen kabellosen HEOS-Lautsprechern wie HEOS 1, 3, 5 und 7 einen Fehler zurück.
Play URL (benutzerdefinierter Stream)
Play URL ist ein Taster, der eine beliebige HTTP(S)-Audio-URL über heos://browse/play_stream?pid={PlayerId}&url={URL} an den gewählten HEOS-Player streamt. Die Gerätevariable URL hält das Stream-Ziel — standardmäßig eine Pixabay-Türklingel-MP3 als Beispiel und wird typischerweise mit einem Internetradio-Stream, Benachrichtigungston oder einer beliebigen direkten Audio-URL überschrieben.
Sinnvolle Anwendungen: Türklingelbenachrichtigungen, Sprachdurchsagen von einem lokalen HTTP-Server, Wiedergabe einer festen Internetradio-URL ohne HEOS Favorites.
Weitere Funktionen
Das HEOS-CLI-Protokoll stellt deutlich mehr Funktionen bereit, als das Template aktuell implementiert. Folgende Punkte lassen sich in einem künftigen Template-Update ergänzen:
- Now-Playing-Metadaten (
player/get_now_playing_media) — aktueller Titel, Künstler, Album und Cover-URL als String-Attribute. - Wiedergabestatus-Feedback (
player/get_play_state) — Rücklesen von play / pause / stop, damit Transport-Taster den tatsächlichen Status widerspiegeln. - Toggle Mute (
player/toggle_mute) — einzelner Befehl zum Umschalten der Stummschaltung ohne vorheriges Lesen des Status. - Queue-Verwaltung (
player/get_queue,play_queue,clear_queue) — Durchsuchen und Manipulieren der aktuellen Wiedergabeliste. - Favoriten und Presets (
browse/play_preset) — Auslösen gespeicherter HEOS Favorites über die Preset-Nummer, einfacher als rohes Play URL für gespeicherte Sender. - Auswahl physischer Eingänge (
browse/play_input) — Umschalten auf AUX / Line-In an HEOS Amp-, Link- und AVR-Modellen. - Multiroom-Gruppierung (
group/*) — Erstellen, Auflösen und gesammelte Lautstärkeregelung von HEOS-Gruppen für synchrone Wiedergabe im gesamten Haus. - Firmware-Wartung (
system/check_update,system/reboot) — Auslösen von Firmware-Update-Prüfungen und Fern-Neustart. - Change Events (
system/register_for_change_events) — optionale Push-Benachrichtigungen für Lautstärke-, Status- und Now-Playing-Änderungen statt Polling. - HEOS-Konto-Anmeldung (
system/sign_in) — erforderlich für den Zugriff auf kostenpflichtige Streaming-Dienste (Tidal, Amazon Music, Deezer, eigene TuneIn-Sender) aus TapHome.
Fehlerbehebung
Players-Attribut bleibt nach Get Players leer
HEOS betreibt sein CLI-Modul im Ruhezustand und startet den Kern beim ersten Socket-Verbindungsaufbau, was einige Sekunden dauern kann. Warten Sie 5–10 Sekunden und führen Sie Get Players erneut aus. Ist es weiterhin leer, überprüfen Sie:
- Die TapHome CCU kann die IP des Lautsprechers auf TCP-Port 1255 erreichen (gleiches LAN / Subnetz, keine Firewall dazwischen).
- Das HEOS-Gerät ist in der HEOS-Mobile-App vollständig online — das CLI ist erst verfügbar, nachdem die erste WLAN-Einrichtung abgeschlossen ist.
- Die IP-Adresse im Modul entspricht weiterhin dem Lautsprecher — DHCP-Erneuerungen können sie ändern. Verwenden Sie eine DHCP-Reservierung oder eine statische IP.
Alle Gerätebefehle liefern “ID Not Valid”
Die benutzerdefinierte Variable PlayerId enthält entweder noch den Template-Default (-1857880384) oder verweist auf eine pid, die nicht mehr existiert (z. B. nach einem Werksreset). Führen Sie Get Players und anschließend Set Player Id mit dem korrekten Index erneut aus.
Play-URL-Aktion bleibt wirkungslos oder liefert einen Fehler
Das Play-URL-Skript im aktuellen Template hat eine bekannte Eigenart: Es referenziert playerId (Kleinschreibung) statt der benutzerdefinierten Variable PlayerId. Bleibt die Aktion wirkungslos, öffnen Sie in der TapHome-App das Skript des Play-URL-Geräts und korrigieren Sie den Variablennamen zu PlayerId. Nach dieser Korrektur sendet die Aktion heos://browse/play_stream korrekt. Stellen Sie außerdem sicher, dass die Stream-URL vom HEOS-Lautsprecher aus erreichbar ist und ein unterstütztes Audioformat verwendet (MP3, AAC, WAV — HLS-Streams werden nicht zuverlässig akzeptiert).
Quick Select liefert einen Fehler
Quick Select funktioniert nur auf HEOS-fähigen AVR-, Verstärker- und Soundbar-Produkten. Verwenden Sie auf kabellosen HEOS-Lautsprechern (HEOS 1, 3, 5, 7 und Denon Home Lautsprecher ohne Soundbar-Funktionen) stattdessen Play URL oder Favoriten-Streams.
Änderungen in der HEOS-App sind in TapHome nicht sichtbar
Das Template pollt den Status alle 2,5 Sekunden für Volume, Mute und Play Mode. Der Transport-Status (Play / Pause / Stop) wird nicht gepollt — das sind reine Taster. Hat ein externer Controller den Wiedergabemodus geändert oder ein neues Streaming-Konto gekoppelt, erzwingt das Trennen und erneute Verbinden des TapHome-Moduls mit dem Lautsprecher eine neue CLI-Sitzung.
Mehrere HEOS-Player — wie steuert man mehr als einen?
Ein TapHome-Modul steuert genau einen HEOS-Player (eine pid). Für einen zweiten Lautsprecher importieren Sie eine zweite Instanz des Denon-HEOS-Templates. Die IP-Adresse kann auf dasselbe HEOS-Gerät zeigen — das CLI eines Lautsprechers erreicht jeden anderen HEOS-Player im Netzwerk — und die Aktion Set Player Id mit einem anderen Index bindet das zweite Modul an einen anderen Lautsprecher.
