TapHome

Denon HEOS

Packet Parser → TCP
Beküldő
Utoljára frissítve: 04. 2026
Denon HEOS

A Denon HEOS vezeték nélküli multiroom audio platform, amely a HEOS Command Line Interface (CLI) köré épül — egy szöveges protokoll, amely a helyi hálózaton minden hangszórót, soundbart, erősítőt és HEOS-kompatibilis komponenst elérhetővé tesz a TCP 1255 porton. A TapHome ezt a protokollt használja a HEOS hangszórók lejátszásának, hangerejének, némításának és lejátszási módjának vezérlésére, felhőszolgáltatástól függetlenül.

A sablon lefedi a teljes vezeték nélküli HEOS kínálatot (HEOS 1, 3, 5, 7), a HEOS Bar és HomeCinema soundbarokat, a HEOS Amp / Link / Drive komponenseket, a HEOS Subot, valamint az újabb Denon Home 150 / 250 / 350 hangszórókat és a Sound Bar 550-et. Elegendő egyetlen HEOS eszköz a LAN-on — a CLI a player/get_players végponton keresztül minden további HEOS lejátszót elérhetővé tesz a hálózaton.

Ez a sablon kizárólag HEOS hangszórókhoz, soundbarokhoz és HEOS-kompatibilis erősítőkhöz készült. A Denon és Marantz AVR receiverek (AVR-X, SR sorozat stb.) külön Denon/Marantz Telnet control protokollt használnak a 23-as porton, és ezzel a sablonnal nem kompatibilisek, még a HEOS Built-in funkciót is tartalmazó modelleken sem.

Hálózati kapcsolat

A HEOS TCP-n kommunikál az 1255-ös porton, szöveges ASCII parancsokkal, amelyeket \r\n zár, és JSON válaszokat ad. Hitelesítésre nincs szükség — minden eszköz, amely ugyanazon LAN-on van, csatlakozhat a CLI porthoz.

Mielőtt a TapHome vezérelni tudná az eszközt, a HEOS hangszórót be kell állítani a HEOS mobilalkalmazáson keresztül:

  1. Telepítse a HEOS App-ot (Android / iOS) egy telefonra vagy tabletre ugyanazon Wi-Fi hálózaton.
  2. Csatlakoztassa a HEOS eszközt Wi-Fire vagy Ethernetre az alkalmazás kezdeti beállítási varázslójával.
  3. Ellenőrizze, hogy a firmware naprakész (a sablon a HEOS CLI v1.17-re épül, ami a 2.41.140 vagy újabb firmware-nek felel meg).
  4. Jegyezze fel a hangszóró IP-címét — megtalálható a HEOS alkalmazás Settings → My Devices → About menüjében vagy a router DHCP klienslistájában.

Használjon statikus IP-t vagy DHCP foglalást ahhoz a HEOS eszközhöz, amelyhez a TapHome csatlakozik. A hangszóró átjáróként szolgál az összes többi HEOS lejátszóhoz, így stabil cím mellett az egész ökoszisztéma elérhető marad.

A HEOS CLI nem rendelkezik hitelesítéssel. Tartsa a hangszórót megbízható LAN szegmensben — minden hálózati hozzáféréssel rendelkező eszköz az 1255 porton vezérelheti a lejátszást.

Konfiguráció

TapHome kapcsolati paraméterek

A sablon importálásakor a TapHome alkalmazásban adja meg a HEOS hangszóró IP-címét az IP Address paraméterbe. A TCP 1255 port és a protokoll keretezés már be van állítva a sablonban. A TapHome egyetlen tartós TCP kapcsolatot nyit, és ezen keresztül csatornázza a HEOS CLI parancsokat.

PlayerId inicializálása

Minden heos://player/* parancs player id (pid) megadását igényli — ez egy nagy előjeles egész szám, amelyet a HEOS minden hálózati hangszóróhoz dinamikusan rendel. A sablon a PlayerId egyedi változóban tárolja. Mivel a HEOS hálózatonként dinamikusan generálja a pid-et, a sablon egy helyőrző értékkel (-1857880384) érkezik, amelyet első beállításkor le kell cserélni.

A modul két szerviz műveletet kínál a pid felfedezésére és hozzárendelésére. Sablon importálása után futtassa ezeket egyszer:

  1. Get Players — elküldi a heos://player/get_players parancsot, és a JSON választ a PlayersResponse modulváltozóba gyorsítótárazza. A modul Players szerviz attribútuma ezután megjeleníti a hálózaton látható HEOS lejátszók listáját nevükkel, pid-jükkel, modelljükkel és IP-címükkel.
  2. Set Player Id — egy Index paramétert fogad (0-alapú pozíció a Players tömbben), és a megfelelő pid-et írja a PlayerId egyedi változóba. Válassza ki a vezérelni kívánt hangszóró indexét — egy TapHome modul egyszerre egy HEOS lejátszóhoz van kötve.

E két lépés után minden gyermekeszköz (Volume, Mute, Play, Pause stb.) a kiválasztott hangszóróval dolgozik. Egy második HEOS lejátszó vezérléséhez importálja a sablon második példányát ugyanazon (vagy másik) HEOS IP ellenében, és ismételje meg a Set Player Id lépést másik indexszel.

Ha a Players attribútum az első futtatáskor üres, a HEOS CLI modul alvó módban lehet. Néhány másodperc múlva futtassa újra a Get Playerst — a HEOS az első csatlakozáskor indítja a CLI magot, és egy pillanatig tarthat, amíg minden lejátszót felsorol.

Eszközváltozók

Két gyermekeszköz rendelkezik sablonimport után konfigurálható változókkal:

EszközVáltozóAlapértelmezettMegjegyzés
Play URLURLPixabay csengő MP3Bármely közvetlen HTTP(S) URL audio streamhez vagy fájlhoz
Volume Up / Volume DownStep5Hangerő változás gombnyomásra; a HEOS specifikáció a tartományt 1–10-re korlátozza

A TapHome alkalmazásban nyissa meg az egyes eszközök részleteit, és állítsa be ezeket a változókat a kívánt értékekre. A stream URL URL-kódolt speciális karaktereit (&, =, %) a sablon szkriptje kezeli.

Eszközfunkciók

A sablon 12 gyermekeszközt biztosít, amelyek lefedik a lejátszást, hangerőt, némítást és URL streamelést egyetlen HEOS lejátszóhoz.

Hangerő vezérlése

A Volume eszköz egy dimmer, amely olvassa a heos://player/get_volume értéket (0–100 szint), és a 0.0–1.0 dimmer tartományra skálázza (Le := level / 100). Íráskor a heos://player/set_volume parancsot küldi ROUND(Le * 100) értékkel. A hangerőt 2,5 másodpercenként lekérdezi, így a HEOS alkalmazásból vagy másik vezérlőből származó külső hangerőváltozások a következő ciklusban tükröződnek a TapHome-ban.

A Volume Up és Volume Down nyomógomb eszközök, amelyek a konfigurálható Step lépésközzel küldik a heos://player/volume_up és heos://player/volume_down parancsokat. Hasznos fizikai fali kapcsolókhoz vagy smart szabályokhoz kötéskor.

Némítás

A Mute egy kapcsoló, amely olvassa a heos://player/get_mute értéket, és a heos://player/set_mute parancsot írja state=on|off paraméterrel. Némításkor a hangszóró elnémul anélkül, hogy a tényleges hangerőszint megváltozna.

Transport

Négy nyomógomb eszköz fedi le az alapvető transport műveleteket:

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

Ezek csak írási gombok — a sablon nem olvassa vissza az aktuális lejátszási állapotot, így a transport gombok nem tükrözik, hogy a hangszóró ténylegesen játszik-e.

Lejátszási mód

A Play Mode egy multi-value kapcsoló, amely a HEOS repeat és shuffle jelzőit egy 6 állapotú enumba kombinálja. Olvasása és írása a heos://player/get_play_mode és heos://player/set_play_mode parancsokkal történik:

ÉrtékMód
0Nincs ismétlés, nincs véletlen
1Minden ismétlése
2Egy szám ismétlése
3Véletlen, nincs ismétlés
4Véletlen, minden ismétlése
5Véletlen, egy szám ismétlése

Az XML sablon a multi-value konfigurációban 6–9 sloto(ka)t foglal, de ezek használaton kívüliek — csak a 0–5 értékek érhetők el.

QuickSelect előbeállítások

A Quick Select csak írható multi-value kapcsoló (1–9), amely HEOS QuickSelect előbeállítást indít a heos://player/play_quickselect?id={1-9} parancson keresztül. A Quick selectek magán a lejátszón vannak elmentve (jellemzően párosított Denon AVR-en vagy HEOS Baron), és tartalmazhatnak előre beállított bemenetet, forrást vagy állomást.

A Quick Select a HEOS specifikáció §4.2.24 szerint AVR-only parancs. Működik a HEOS Amp, HEOS Link, HEOS Bar és HEOS-kompatibilis AVR/receiver termékeken, de a különálló vezeték nélküli HEOS hangszórókon, mint a HEOS 1, 3, 5 és 7, hibát ad vissza.

Play URL (egyedi stream)

A Play URL nyomógomb, amely tetszőleges HTTP(S) audio URL-t streamel a kiválasztott HEOS lejátszóra a heos://browse/play_stream?pid={PlayerId}&url={URL} parancson keresztül. Az eszköz URL változója tárolja a stream célt — alapértelmezésben egy Pixabay csengő MP3 mintát tartalmaz, és jellemzően internetes rádióra, értesítő hangra vagy bármilyen közvetlen audio URL-re írható át.

Jó felhasználás: csengő értesítések, hangbemondások helyi HTTP szerverről, fix internetes rádió URL lejátszása HEOS Favorites nélkül.

További képességek

A HEOS CLI protokoll sokkal több funkciót kínál, mint amit a sablon jelenleg megvalósít. Ezeket egy jövőbeli sablonfrissítésben lehet hozzáadni:

  • Now Playing metaadatok (player/get_now_playing_media) — aktuális szám címe, előadó, album és borítókép URL string attribútumként.
  • Lejátszási állapot visszajelzés (player/get_play_state) — play / pause / stop visszaolvasása, hogy a transport gombok a valódi állapotot tükrözzék.
  • Toggle Mute (player/toggle_mute) — egyetlen parancs a némítás váltásához az állapot előzetes olvasása nélkül.
  • Sorkezelés (player/get_queue, play_queue, clear_queue) — aktuális lejátszási sor böngészése és kezelése.
  • Kedvencek és előbeállítások (browse/play_preset) — mentett HEOS Favorites indítása előbeállítás-szám alapján, egyszerűbb, mint nyers Play URL a mentett állomásokhoz.
  • Fizikai bemenet választás (browse/play_input) — AUX / Line-In-re váltás HEOS Amp, Link és AVR modelleken.
  • Multiroom csoportosítás (group/*) — HEOS csoportok létrehozása, feloldása és közös hangerővezérlése szinkronizált, egész házra kiterjedő lejátszáshoz.
  • Firmware karbantartás (system/check_update, system/reboot) — firmware frissítés ellenőrzés indítása és távoli újraindítás.
  • Change events (system/register_for_change_events) — opcionális push értesítések hangerő-, állapot- és now-playing változásokra a pollozás helyett.
  • HEOS fiók bejelentkezés (system/sign_in) — szükséges a fizetős streamelési szolgáltatások eléréséhez (Tidal, Amazon Music, Deezer, egyedi TuneIn állomások) TapHome-ból.

Hibaelhárítás

A Players attribútum Get Players után üres

A HEOS alvó módban futtatja CLI modulját, és a magot az első socket csatlakozásnál indítja, ami néhány másodpercig tarthat. Várjon 5–10 másodpercet, majd futtassa újra a Get Players-t. Ha továbbra is üres, ellenőrizze:

  1. A TapHome CCU el tudja érni a hangszóró IP-jét TCP 1255 porton (azonos LAN / subnet, nincs tűzfal közöttük).
  2. A HEOS eszköz teljesen online a HEOS mobilalkalmazásban — a CLI nem érhető el, amíg a kezdeti Wi-Fi beállítás nem fejeződött be.
  3. A modulban szereplő IP-cím továbbra is megfelel a hangszórónak — a DHCP megújítások megváltoztathatják. Használjon DHCP foglalást vagy statikus IP-t.
Minden eszközparancs “ID Not Valid” hibát ad

A PlayerId egyedi változó vagy még a sablon alapértékét tartja (-1857880384), vagy egy már nem létező pid-re mutat (pl. a hangszórót gyári alaphelyzetre állították). Futtassa újra a Get Players-t, majd a Set Player Id-t a megfelelő indexszel.

A Play URL művelet nem csinál semmit vagy hibát ad

A jelenlegi sablon Play URL szkriptjének ismert sajátossága: a PlayerId egyedi változó helyett a playerId (kisbetűs) nevet hivatkozza. Ha a műveletnek nincs hatása, nyissa meg a TapHome alkalmazásban a Play URL eszköz szkriptjét, és javítsa a változónevet PlayerId-ra. A javítás után a művelet helyesen küldi a heos://browse/play_stream parancsot. Győződjön meg arról is, hogy a stream URL elérhető a HEOS hangszóróról, és támogatott audio formátumot használ (MP3, AAC, WAV — a HLS streameket nem fogadja megbízhatóan).

A Quick Select hibát ad

A Quick Select csak HEOS-kompatibilis AVR, erősítő és soundbar termékeken működik. Vezeték nélküli HEOS hangszórókon (HEOS 1, 3, 5, 7 és a soundbar funkció nélküli Denon Home hangszórókon) inkább használja a Play URL-t vagy a kedvenc streameket.

A HEOS alkalmazásban végzett módosítások nem látszanak a TapHome-ban

A sablon 2,5 másodpercenként kérdezi le a Volume, Mute és Play Mode állapotot. A transport állapotot (Play / Pause / Stop) nem kérdezi le — ezek csak nyomógombok. Ha külső vezérlő módosította a lejátszási módot vagy új streamelési fiókot párosított, a TapHome modul hangszóróról való leválasztása és újracsatlakoztatása új CLI munkamenetet kényszerít ki.

Több HEOS lejátszó — hogyan vezérelhető egynél több

Egy TapHome modul pontosan egy HEOS lejátszót vezérel (egy pid). Egy második hangszóró vezérléséhez importálja a Denon HEOS sablon második példányát. Az IP-cím mutathat ugyanarra a HEOS eszközre — egy hangszóró CLI-je eléri a hálózat minden más HEOS lejátszóját —, és a Set Player Id művelet másik indexszel a második modult egy másik hangszóróhoz köti.

Elérhető eszközök

Denon HEOS hangszóró Modul
Szerviz attribútumok
LejátszókA hálózaton elérhető HEOS lejátszók JSON tömbje (név, pid, modell, IP, verzió). A Lejátszók lekérése művelet tölti fel; a Player Id beállítása műveletben az index kiválasztásához használatos.
Szerviz műveletek
Lejátszók lekéréseFelfedezi a hálózaton lévő összes HEOS lejátszót a heos://player/get_players elküldésével. A válasz a Lejátszók attribútumba kerül, és a Player Id beállítása előtt kell futtatni.
Player Id beállításaHozzárendeli ezt a TapHome modult egy HEOS lejátszóhoz. 0-alapú indexet vesz a Lejátszók listából, és a megfelelő pid-et írja a PlayerId egyedi változóba. A Lejátszók lekérése után szükséges, mielőtt bármely gyermekeszköz működne.
Egyéni változók

Denon HEOS speaker

Írás (modul)
# 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
Figyelő
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
Szerviz attribútumok
Players
PARSEJSON(PlayersResponse, "payload");
Szerviz műveletek
Get Players
SENDDATA("heos://player/get_players");
Set Player Id
Paraméterek: Index (0–20 Index)
PlayerId := PARSEJSON(PlayersResponse,"payload[" + Index + "].pid");
Hangszóró némítása Kapcsoló

Elnémítja vagy bekapcsolja a kiválasztott HEOS lejátszó hangkimenetét anélkül, hogy a mögöttes hangerőszint megváltozna.

boolean switch
Értékek / Állapotok: Muted · Unmuted

Hangszóró némítása

Kapcsoló állapot olvasása
SENDDATA("heos://player/get_mute?pid=" + PlayerId);
Kapcsoló állapot írása
VAR mute := SWITCH(St, 0, "off", 1, "on", "off");
							SENDDATA("heos://player/set_mute?pid=" + PlayerId + "&state=" + mute);
Figyelő
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
Következő szám Nyomógomb
button push

Következő szám

Gombállapot írása
SENDDATA("heos://player/play_next?pid=" + PlayerId);
Szünet Nyomógomb
button push

Szünet

Gombállapot írása
SENDDATA("heos://player/set_play_state?pid=" + PlayerId + "&state=pause")
Lejátszás Nyomógomb
button push

Lejátszás

Gombállapot írása
SENDDATA("heos://player/set_play_state?pid=" + PlayerId + "&state=play");
Lejátszási mód Többértékű kapcsoló

Az ismétlés és véletlen állapot kombinálva 6-értékű enumként — 0 nincs ismétlés, 1 mind ismétlése, 2 egy ismétlése, 3 véletlen, 4 véletlen + mind ismétlése, 5 véletlen + egy ismétlése.

enum multi-value
Értékek / Állapotok: No repeat · Repeat all · Repeat 1 · Shuffle, no repeat · Shuffle, repeat all · Shuffle, repeat one

Lejátszási mód

Kapcsoló állapot olvasása
SENDDATA("heos://player/get_play_mode?pid=" + PlayerId);
Kapcsoló állapot írása
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);
Figyelő
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
URL lejátszása Nyomógomb

Tetszőleges HTTP(S) audio URL-t streamel a HEOS lejátszóra (csengőhangok, internetes rádió, hangbemondások). Az URL az eszköz URL egyedi változójában konfigurálható.

button push
Változó: URL

URL lejátszása

Gombállapot írása
SENDDATA("heos://browse/play_stream?pid=" + playerId + "&url=" + URL);
Figyelő
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
Előző szám Nyomógomb
button push

Előző szám

Gombállapot írása
SENDDATA("heos://player/play_previous?pid=" + PlayerId);
Gyorsválasztó Többértékű kapcsoló

A lejátszón tárolt HEOS QuickSelect előbeállítások 1–9 egyikét indítja. Csak AVR / HEOS Bar / HEOS Amp — önálló vezeték nélküli HEOS hangszórókon nem támogatott.

enum multi-value

Gyorsválasztó

Kapcsoló állapot írása
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
Leállítás Nyomógomb
button push

Leállítás

Gombállapot írása
SENDDATA("heos://player/set_play_state?pid=" + PlayerId + "&state=stop")
Hangerő Fényerőszabályzó

A HEOS lejátszó hangerejének dimmer-vezérlése. A 0–100 HEOS szint a 0.0–1.0 dimmer tartományra képződik le, és 2,5 másodpercenként lekérdezésre kerül.

numeric Egység: % dimmer

Hangerő

Szint olvasása
SENDDATA("heos://player/get_volume?pid=" + PlayerId)
Szint írása
SENDDATA("heos://player/set_volume?pid=" + PlayerId + "&level=" + ROUND(Le*100))
Figyelő
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
Hangerő csökkentése Nyomógomb

Csökkenti a hangerőt a konfigurált Step lépésközzel (alapértelmezett 5, HEOS 1–10-et engedélyez) a heos://player/volume_down parancson keresztül.

button push
Változó: Step

Hangerő csökkentése

Gombállapot írása
SENDDATA("heos://player/volume_down?pid=" + PlayerId + "&step=" + Step);
Hangerő növelése Nyomógomb

Növeli a hangerőt a konfigurált Step lépésközzel (alapértelmezett 5, HEOS 1–10-et engedélyez) a heos://player/volume_up parancson keresztül.

button push
Változó: Step

Hangerő növelése

Gombállapot írása
SENDDATA("heos://player/volume_up?pid=" + PlayerId + "&step=" + Step);
Kapcsolat: Packet Parser → TCP
Lehetséges fejlesztések (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

Források