TapHome

Denon HEOS

Packet Parser → TCP
Dodane przez
Ostatnia aktualizacja: 04. 2026
Denon HEOS

Denon HEOS to bezprzewodowa platforma audio multiroom oparta na HEOS Command Line Interface (CLI) — protokole tekstowym, który udostępnia każdy głośnik, soundbar, wzmacniacz i komponent obsługujący HEOS w sieci lokalnej przez port TCP 1255. TapHome wykorzystuje ten protokół do sterowania odtwarzaniem, głośnością, wyciszeniem i trybem odtwarzania głośników HEOS bez żadnych zależności od chmury.

Szablon obejmuje całą bezprzewodową linię HEOS (HEOS 1, 3, 5, 7), soundbary HEOS Bar i HomeCinema, komponenty HEOS Amp / Link / Drive, HEOS Sub oraz nowsze głośniki Denon Home 150 / 250 / 350 i Sound Bar 550. Wystarczy jedno urządzenie HEOS w LAN — CLI udostępnia wszystkich pozostałych odtwarzaczy HEOS w sieci przez punkt końcowy player/get_players.

Ten szablon jest przeznaczony wyłącznie dla głośników HEOS, soundbarów i wzmacniaczy obsługujących HEOS. Amplitunery Denon i Marantz AVR (serie AVR-X, SR itd.) używają osobnego protokołu Denon/Marantz Telnet control na porcie 23 i nie są kompatybilne z tym szablonem, nawet w modelach wyposażonych również w HEOS Built-in.

Połączenie sieciowe

HEOS komunikuje się przez TCP na porcie 1255 za pomocą jawnych poleceń ASCII zakończonych \r\n i zwraca odpowiedzi w formacie JSON. Uwierzytelnianie nie jest wymagane — dowolne urządzenie w tej samej sieci LAN może połączyć się z portem CLI.

Zanim TapHome będzie mogło sterować urządzeniem, głośnik HEOS musi zostać skonfigurowany w aplikacji mobilnej HEOS:

  1. Zainstaluj aplikację HEOS App (Android / iOS) na telefonie lub tablecie w tej samej sieci Wi-Fi.
  2. Połącz urządzenie HEOS z Wi-Fi lub Ethernetem za pomocą kreatora konfiguracji w aplikacji.
  3. Upewnij się, że firmware jest aktualny (szablon opiera się na HEOS CLI v1.17, co odpowiada firmware 2.41.140 lub nowszemu).
  4. Zanotuj adres IP głośnika — znajdziesz go w aplikacji HEOS w Settings → My Devices → About albo na liście klientów DHCP w routerze.

Dla urządzenia HEOS, z którym łączy się TapHome, użyj statycznego IP lub rezerwacji DHCP. Głośnik działa jako brama do wszystkich pozostałych odtwarzaczy HEOS, więc stabilny adres utrzyma dostępność całego ekosystemu.

HEOS CLI nie ma żadnego uwierzytelniania. Utrzymuj głośnik w zaufanym segmencie LAN — każde urządzenie z dostępem sieciowym do portu 1255 może sterować odtwarzaniem.

Konfiguracja

Parametry połączenia w TapHome

Podczas importu szablonu w aplikacji TapHome podaj adres IP głośnika HEOS w parametrze IP Address. Port TCP 1255 i framing protokołu są już ustawione w szablonie. TapHome otwiera jedno trwałe połączenie TCP i przepuszcza przez nie polecenia HEOS CLI.

Inicjalizacja PlayerId

Każde polecenie heos://player/* wymaga player id (pid) — dużej liczby całkowitej ze znakiem, którą HEOS dynamicznie przypisuje każdemu głośnikowi w sieci. Szablon przechowuje go w zmiennej użytkownika PlayerId. Ponieważ HEOS generuje pid dynamicznie per sieć, szablon dostarczany jest z wartością zastępczą (-1857880384), którą trzeba podmienić przy pierwszej konfiguracji.

Moduł udostępnia dwie akcje serwisowe do wykrycia i przypisania pid. Uruchom je jednorazowo po imporcie szablonu:

  1. Get Players — wysyła heos://player/get_players i zapisuje odpowiedź JSON w zmiennej modułu PlayersResponse. Atrybut serwisowy modułu Players pokazuje następnie listę odtwarzaczy HEOS widocznych w sieci wraz z nazwą, pid, modelem i adresem IP.
  2. Set Player Id — przyjmuje parametr Index (pozycja 0-based w tablicy Players) i zapisuje odpowiedni pid do zmiennej użytkownika PlayerId. Wybierz indeks głośnika, który TapHome ma kontrolować — jeden moduł TapHome powiązany jest z jednym odtwarzaczem HEOS na raz.

Po tych dwóch krokach wszystkie urządzenia podrzędne (Volume, Mute, Play, Pause itd.) działają na wybranym głośniku. Aby sterować drugim odtwarzaczem HEOS, zaimportuj drugą instancję szablonu na ten sam (lub inny) adres IP HEOS i powtórz krok Set Player Id z innym indeksem.

Jeśli atrybut Players jest pusty przy pierwszym uruchomieniu, moduł HEOS CLI może być w trybie uśpienia. Uruchom Get Players ponownie po kilku sekundach — HEOS startuje rdzeń CLI przy pierwszym połączeniu i może chwilę potrwać, zanim wyliczy wszystkich odtwarzaczy.

Zmienne urządzenia

Dwa urządzenia podrzędne mają konfigurowalne zmienne po imporcie szablonu:

UrządzenieZmiennaDomyślnaUwagi
Play URLURLMP3 dzwonka z PixabayDowolny bezpośredni URL HTTP(S) do strumienia lub pliku audio
Volume Up / Volume DownStep5Zmiana głośności na naciśnięcie; specyfikacja HEOS ogranicza zakres do 1–10

W aplikacji TapHome otwórz szczegóły każdego urządzenia i ustaw te zmienne na potrzebne wartości. Znaki specjalne URL-encoded w URL-u strumienia (&, =, %) obsługuje skrypt szablonu.

Funkcje urządzenia

Szablon udostępnia 12 urządzeń podrzędnych obejmujących odtwarzanie, głośność, wyciszenie i strumieniowanie URL dla jednego odtwarzacza HEOS.

Sterowanie głośnością

Urządzenie Volume to ściemniacz, który odczytuje heos://player/get_volume (poziom 0–100) i skaluje go do zakresu ściemniacza 0.0–1.0 (Le := level / 100). Zapis wysyła heos://player/set_volume z ROUND(Le * 100). Głośność jest odpytywana co 2,5 sekundy, więc zewnętrzne zmiany głośności z aplikacji HEOS lub innego kontrolera odzwierciedlają się w TapHome w kolejnym cyklu.

Volume Up i Volume Down to urządzenia przyciskowe, które wysyłają heos://player/volume_up oraz heos://player/volume_down z konfigurowalnym krokiem Step. Przydatne do powiązania z fizycznymi przełącznikami ściennymi lub inteligentnymi regułami.

Wyciszenie

Mute to przełącznik, który odczytuje heos://player/get_mute i zapisuje heos://player/set_mute z state=on|off. Po wyciszeniu głośnik jest wyciszony bez zmiany podstawowego poziomu głośności.

Transport

Cztery urządzenia przyciskowe obejmują podstawowy transport:

  • Play — zapisuje heos://player/set_play_state?state=play
  • Pause — zapisuje heos://player/set_play_state?state=pause
  • Stop — zapisuje heos://player/set_play_state?state=stop
  • Next Track — zapisuje heos://player/play_next
  • Previous Track — zapisuje heos://player/play_previous

Są to przyciski tylko do zapisu — szablon nie odpytuje bieżącego stanu odtwarzania, więc przyciski transportu nie odzwierciedlają tego, czy głośnik faktycznie odtwarza.

Tryb odtwarzania

Play Mode to przełącznik wielowartościowy, który łączy flagi HEOS repeat i shuffle w jeden 6-stanowy enum. Odczyt i zapis przez heos://player/get_play_mode i heos://player/set_play_mode:

WartośćTryb
0Bez powtarzania, bez losowania
1Powtarzaj wszystkie
2Powtarzaj jeden utwór
3Losowo, bez powtarzania
4Losowo, powtarzaj wszystkie
5Losowo, powtarzaj jeden

Szablon XML rezerwuje w konfiguracji wielowartościowej sloty 6–9, ale są one nieużywane — tylko wartości 0–5 są osiągalnymi stanami.

Presety QuickSelect

Quick Select to wielowartościowy przełącznik tylko do zapisu (1–9), który uruchamia preset HEOS QuickSelect przez heos://player/play_quickselect?id={1-9}. Quick selecty są zapisane bezpośrednio na odtwarzaczu (zwykle przez sparowany Denon AVR lub HEOS Bar) i mogą przechowywać prekonfigurowane wejście, źródło lub stację.

Quick Select jest w specyfikacji HEOS §4.2.24 zdefiniowany jako polecenie AVR-only. Działa na HEOS Amp, HEOS Link, HEOS Bar i produktach AVR/receiver z obsługą HEOS, ale na samodzielnych bezprzewodowych głośnikach HEOS, takich jak HEOS 1, 3, 5 i 7, zwraca błąd.

Play URL (własny strumień)

Play URL to przycisk, który strumieniuje dowolny URL audio HTTP(S) do wybranego odtwarzacza HEOS przez heos://browse/play_stream?pid={PlayerId}&url={URL}. Zmienna URL urządzenia przechowuje cel strumienia — domyślnie jest to przykładowy MP3 dzwonka z Pixabay, typowo nadpisywany strumieniem radia internetowego, dźwiękiem powiadomienia lub dowolnym bezpośrednim URL audio.

Dobre zastosowania: powiadomienia dzwonka do drzwi, komunikaty głosowe z lokalnego serwera HTTP, odtwarzanie stałego URL radia internetowego bez użycia HEOS Favorites.

Dodatkowe możliwości

Protokół HEOS CLI udostępnia wiele więcej funkcji niż obecnie implementuje szablon. Można je dodać w przyszłej aktualizacji szablonu:

  • Metadane Now Playing (player/get_now_playing_media) — bieżący tytuł, wykonawca, album i URL okładki jako atrybuty tekstowe.
  • Informacja zwrotna o stanie odtwarzania (player/get_play_state) — odczyt play / pause / stop, aby przyciski transportu odzwierciedlały rzeczywisty stan.
  • Toggle Mute (player/toggle_mute) — jedno polecenie do przełączania wyciszenia bez wcześniejszego odczytu stanu.
  • Zarządzanie kolejką (player/get_queue, play_queue, clear_queue) — przeglądanie i modyfikacja bieżącej kolejki odtwarzania.
  • Ulubione i presety (browse/play_preset) — uruchamianie zapisanych HEOS Favorites po numerze presetu, prościej niż surowy Play URL dla zapisanych stacji.
  • Wybór wejścia fizycznego (browse/play_input) — przełączanie na AUX / Line-In w modelach HEOS Amp, Link i AVR.
  • Grupowanie multiroom (group/*) — tworzenie, rozwiązywanie i zbiorcze sterowanie głośnością grup HEOS dla synchronicznego odtwarzania w całym domu.
  • Konserwacja firmware (system/check_update, system/reboot) — uruchamianie sprawdzania aktualizacji firmware i zdalny restart.
  • Change events (system/register_for_change_events) — opcjonalne powiadomienia push o zmianach głośności, stanu i now-playing zamiast odpytywania.
  • Logowanie do konta HEOS (system/sign_in) — wymagane do dostępu do płatnych usług streamingowych (Tidal, Amazon Music, Deezer, własne stacje TuneIn) z TapHome.

Rozwiązywanie problemów

Atrybut Players po Get Players pozostaje pusty

HEOS uruchamia moduł CLI w trybie uśpienia i startuje rdzeń przy pierwszym połączeniu przez gniazdo, co może potrwać kilka sekund. Odczekaj 5–10 sekund i uruchom Get Players ponownie. Jeśli nadal jest pusty, sprawdź:

  1. TapHome CCU może osiągnąć adres IP głośnika na porcie TCP 1255 (ta sama LAN / podsieć, brak firewalla pomiędzy).
  2. Urządzenie HEOS jest w pełni online w aplikacji mobilnej HEOS — CLI jest niedostępne, dopóki wstępna konfiguracja Wi-Fi nie zostanie zakończona.
  3. Adres IP w module nadal odpowiada głośnikowi — odnowienia DHCP mogą go zmienić. Użyj rezerwacji DHCP lub statycznego IP.
Wszystkie polecenia urządzeń zwracają “ID Not Valid”

Zmienna użytkownika PlayerId albo wciąż utrzymuje domyślną wartość szablonu (-1857880384), albo wskazuje na pid, które już nie istnieje (np. głośnik został zresetowany fabrycznie). Uruchom ponownie Get Players, a następnie Set Player Id z poprawnym indeksem.

Akcja Play URL nic nie robi lub zwraca błąd

Skrypt Play URL w obecnym szablonie ma znaną osobliwość: odwołuje się do playerId (małe litery) zamiast do zmiennej użytkownika PlayerId. Jeśli akcja nie ma efektu, otwórz w aplikacji TapHome skrypt urządzenia Play URL i popraw nazwę zmiennej na PlayerId. Po tej poprawce akcja poprawnie wysyła heos://browse/play_stream. Upewnij się też, że URL strumienia jest osiągalny z głośnika HEOS i używa obsługiwanego formatu audio (MP3, AAC, WAV — strumienie HLS nie są niezawodnie akceptowane).

Quick Select zwraca błąd

Quick Select działa tylko na produktach AVR, wzmacniaczach i soundbarach obsługujących HEOS. Na bezprzewodowych głośnikach HEOS (HEOS 1, 3, 5, 7 oraz głośniki Denon Home bez funkcji soundbara) używaj zamiast tego Play URL lub ulubionych strumieni.

Zmiany dokonane w aplikacji HEOS nie są widoczne w TapHome

Szablon odpytuje stan co 2,5 sekundy dla Volume, Mute i Play Mode. Stan transportu (Play / Pause / Stop) nie jest odpytywany — to wyłącznie przyciski. Jeśli zewnętrzny kontroler zmienił tryb odtwarzania lub sparował nowe konto streamingowe, odłączenie i ponowne podłączenie modułu TapHome do głośnika wymusi nową sesję CLI.

Wielu odtwarzaczy HEOS — jak sterować więcej niż jednym

Jeden moduł TapHome steruje dokładnie jednym odtwarzaczem HEOS (jednym pid). Aby sterować drugim głośnikiem, zaimportuj drugą instancję szablonu Denon HEOS. Adres IP może wskazywać na to samo urządzenie HEOS — CLI jednego głośnika sięga każdego innego odtwarzacza HEOS w sieci — a akcja Set Player Id z innym indeksem powiąże drugi moduł z innym głośnikiem.

Dostępne urządzenia

Głośnik Denon HEOS Moduł
Atrybuty serwisowe
OdtwarzaczeTablica JSON odtwarzaczy HEOS dostępnych w sieci (nazwa, pid, model, IP, wersja). Wypełniana przez akcję Get Players; służy do wyboru indeksu dla Set Player Id.
Akcje serwisowe
Pobierz odtwarzaczeWykrywa wszystkie odtwarzacze HEOS w sieci wysyłając heos://player/get_players. Odpowiedź jest buforowana w atrybucie Odtwarzacze i musi być uruchomiona przed Set Player Id.
Ustaw Player IdWiąże ten moduł TapHome z jednym odtwarzaczem HEOS. Pobiera indeks 0-based z listy Odtwarzacze i zapisuje odpowiedni pid do zmiennej użytkownika PlayerId. Wymagane po Get Players, aby urządzenia podrzędne działały.
Zmienne niestandardowe

Denon HEOS speaker

Zapis (moduł)
# 1. Run Get Players action
					# 2. Save and go back
					# 3. Review the Players attribute in the top of page
					# 4. Run Set Player Id with index of your choice
Nasłuchiwanie
VAR response := TOSTRING(RECEIVEDBYTES);
					VAR command := PARSEJSON(response, "heos.command", 1);
					VAR result := PARSEJSON(response, "heos.result", 1);
					VAR message := PARSEJSON(response, "heos.message", 1);

					IF (result = "fail" AND INDEXOF(message, "ID Not Valid") >= 0)
					ADDERROR("PlayerId is not set properly.");
					END

					IF (command = "player/get_players")
					IF (result = "fail")
					ADDERROR("Error: " + message);
					ELSE
					PlayersResponse := response;
					END
					END
Atrybuty serwisowe
Players
PARSEJSON(PlayersResponse, "payload");
Akcje serwisowe
Get Players
SENDDATA("heos://player/get_players");
Set Player Id
Parametry: Index (0–20 Index)
PlayerId := PARSEJSON(PlayersResponse,"payload[" + Index + "].pid");
Wycisz głośnik Przełącznik

Wycisza lub wyłącza wyciszenie wyjścia audio na wybranym odtwarzaczu HEOS bez zmiany podstawowego poziomu głośności.

boolean switch
Wartości / Stany: Muted · Unmuted

Wycisz głośnik

Odczyt stanu przełącznika
SENDDATA("heos://player/get_mute?pid=" + PlayerId);
Zapis stanu przełącznika
VAR mute := SWITCH(St, 0, "off", 1, "on", "off");
							SENDDATA("heos://player/set_mute?pid=" + PlayerId + "&state=" + mute);
Nasłuchiwanie
VAR responseJson := TOSTRING(RECEIVEDBYTES);

							IF(PARSEJSON(responseJson, "heos.command", 1) = "player/get_mute")
							VAR mute := PARSETEXT(responseJson, "state=");
							St := SWITCH(mute, "off", 0, "on", 1, 0);
							END
Następny utwór Przycisk
button push

Następny utwór

Zapis stanu przycisku
SENDDATA("heos://player/play_next?pid=" + PlayerId);
Pauza Przycisk
button push

Pauza

Zapis stanu przycisku
SENDDATA("heos://player/set_play_state?pid=" + PlayerId + "&state=pause")
Odtwarzaj Przycisk
button push

Odtwarzaj

Zapis stanu przycisku
SENDDATA("heos://player/set_play_state?pid=" + PlayerId + "&state=play");
Tryb odtwarzania Przełącznik wielowartościowy

Połączony stan powtarzania i losowania jako 6-wartościowy enum — 0 bez powtarzania, 1 powtarzaj wszystkie, 2 powtarzaj jeden, 3 losowanie, 4 losowanie + powtarzaj wszystkie, 5 losowanie + powtarzaj jeden.

enum multi-value
Wartości / Stany: No repeat · Repeat all · Repeat 1 · Shuffle, no repeat · Shuffle, repeat all · Shuffle, repeat one

Tryb odtwarzania

Odczyt stanu przełącznika
SENDDATA("heos://player/get_play_mode?pid=" + PlayerId);
Zapis stanu przełącznika
VAR repeat := SWITCH( IF(Mu > 2, Mu - 3, Mu), 0, "off", 1, "on_all", 2, "on_one", "off");
							VAR shuffle := IF(Mu > 2, "on", "off");
							SENDDATA("heos://player/set_play_mode?pid=" + PlayerId + "&repeat=" + repeat + "&shuffle=" + shuffle);
Nasłuchiwanie
VAR responseJson := TOSTRING(RECEIVEDBYTES);
							VAR command := PARSEJSON(responseJson, "heos.command", 1);
							VAR result := PARSEJSON(responseJson, "heos.result", 1);

							IF (command = "player/get_play_mode")
							IF (result = "fail")
							VAR errorMessage := PARSEJSON(responseJson, "heos.message", 1);
							ADDERROR("Error: " + errorMessage);
							ELSE
							VAR repeat := PARSETEXT(responseJson, "repeat=", "&");
							VAR shuffle := PARSETEXT(responseJson, "shuffle=");
							Mu := SWITCH(repeat, "off", 0, "on_all", 1, "on_one", 2, 0) + SWITCH(shuffle, "off", 0, "on", 3, 0);
							END
							END
Odtwórz URL Przycisk

Strumieniuje dowolny URL audio HTTP(S) do odtwarzacza HEOS (dźwięki dzwonka, radio internetowe, komunikaty głosowe). URL konfigurowany per urządzenie przez zmienną użytkownika URL.

button push
Zmienna: URL

Odtwórz URL

Zapis stanu przycisku
SENDDATA("heos://browse/play_stream?pid=" + playerId + "&url=" + URL);
Nasłuchiwanie
VAR response := TOSTRING(RECEIVEDBYTES);
							VAR command := PARSEJSON(response, "heos.command", 1);
							VAR result := PARSEJSON(response, "heos.result", 1);
							VAR message := PARSEJSON(response, "heos.message", 1);

							IF (command = "browse/play_stream")
							IF (result = "fail")
							ADDERROR("Error: " + message);
							ELSE
							VAR success := response;
							END
							END
Poprzedni utwór Przycisk
button push

Poprzedni utwór

Zapis stanu przycisku
SENDDATA("heos://player/play_previous?pid=" + PlayerId);
Quick Select Przełącznik wielowartościowy

Uruchamia jeden z presetów HEOS QuickSelect 1–9 zapisanych na odtwarzaczu. Tylko AVR / HEOS Bar / HEOS Amp — niedostępne na samodzielnych bezprzewodowych głośnikach HEOS.

enum multi-value

Quick Select

Zapis stanu przełącznika
IF(Mu != 0)
							SENDDATA("heos://player/play_quickselect?pid=" + PlayerId + "&id=" + Mu);
							END

							# To make this work like a switch, create a following script.
							#
							# IF(Mu != 0)
							#   SLEEP(100);
							#   Mu := 0;
							# END
Zatrzymaj Przycisk
button push

Zatrzymaj

Zapis stanu przycisku
SENDDATA("heos://player/set_play_state?pid=" + PlayerId + "&state=stop")
Głośność Ściemniacz

Sterowanie ściemniacza głośności odtwarzacza HEOS. Poziom HEOS 0–100 mapowany jest na zakres ściemniacza 0.0–1.0 i odpytywany co 2,5 sekundy.

numeric Jednostka: % dimmer

Głośność

Odczyt poziomu
SENDDATA("heos://player/get_volume?pid=" + PlayerId)
Zapis poziomu
SENDDATA("heos://player/set_volume?pid=" + PlayerId + "&level=" + ROUND(Le*100))
Nasłuchiwanie
VAR responseJson := TOSTRING(RECEIVEDBYTES);
							VAR command := PARSEJSON(responseJson, "heos.command", 1);
							VAR result := PARSEJSON(responseJson, "heos.result", 1);

							IF (command = "player/get_volume")
							IF (result = "fail")
							VAR errorMessage := PARSEJSON(responseJson, "heos.message", 1);
							ADDERROR("Error: " + errorMessage);
							ELSE
							Le := PARSETEXT(responseJson, "level=") / 100.0;
							END
							END
Zmniejsz głośność Przycisk

Zmniejsza głośność o skonfigurowany krok Step (domyślnie 5, HEOS pozwala 1–10) poleceniem heos://player/volume_down.

button push
Zmienna: Step

Zmniejsz głośność

Zapis stanu przycisku
SENDDATA("heos://player/volume_down?pid=" + PlayerId + "&step=" + Step);
Zwiększ głośność Przycisk

Zwiększa głośność o skonfigurowany krok Step (domyślnie 5, HEOS pozwala 1–10) poleceniem heos://player/volume_up.

button push
Zmienna: Step

Zwiększ głośność

Zapis stanu przycisku
SENDDATA("heos://player/volume_up?pid=" + PlayerId + "&step=" + Step);
Połączenie: Packet Parser → TCP
Możliwe ulepszenia (14)
  • Now Playing Metadata — Current track artist, album, title, artwork URL, media_id — would require string attributes and a listener to cache the response
  • Play State (read) — Reads play|pause|stop back from the player. Template only writes play state (Play/Pause/Stop buttons) without feedback
  • Toggle Mute — Single-command mute toggle without reading current state; could be a second push-button
  • Check Firmware Update — Trigger firmware update check — useful as maintenance action
  • Heart Beat / Connection Health — Periodic heart_beat command for connection liveness; could map to a module-level online/offline sensor
  • Reboot Speaker — Remote reboot of the HEOS device — natural service action
  • Play Queue — Full queue management (get, play item, remove, save as playlist, clear, move). Template has no queue exposure
  • Music Sources / Browse — Browse and search streaming services (TuneIn, local library, favorites, playlists). Not exposed in template
  • Favorites / Preset Stations — Play a favorite station by preset number 1–N; simpler than Play URL for saved stations
  • Input Source (AUX / Line-In) — Switch to a physical input (inputs/aux_in_1, inputs/line_in_1, etc.) — only applicable to AVR/Amp/Link models
  • Group / Multi-Room Control — Create/destroy groups, group volume, group mute — enables multi-room synchronized playback across HEOS speakers. Not exposed in template
  • Player Info (name, model, version, IP) — Static metadata about the player; useful for diagnostics
  • Change Events (unsolicited push) — Register for change events via system/register_for_change_events and receive push updates (volume, state, now playing, queue). Template relies on polling only
  • HEOS Account Sign In / Out — Required for access to paid streaming services and cloud favorites; no hooks in template

Źródła