Rádió a fali tabletről Sonos hangfallal: így építettük fel Home Assistantban
17 perc olvasás • Ismeretterjesztő útmutató • Frissítve: 2026-10-21
Hét állomás, egyértelmű leállítás, állapotkártya és hangerő: a saját konyhai rádiónk teljes felépítése, mintákkal és hibakereséssel.
Miért került rádió az okosotthon főoldalára?
Amikor a családi kezelőfelületet építettük, nem csak a fűtésre, a kamerákra és az értesítésekre gondoltam. A konyhában olyan hétköznapi funkcióra is szükség volt, amelyhez nem kell külön alkalmazásban keresgélni. A rádió pontosan ilyen: legyen kéznél néhány ismert állomás, egy egyértelmű leállítás és a hangerő.
Nálunk a fali tablet a kezelőfelület, a hangot pedig a konyhai Sonos hangfal adja. A kettőt a Home Assistant kapcsolja össze. Ez a felosztás egyszerűnek tűnik, de a megértése sok későbbi hibakeresést megkönnyít: a tabletnek nem kell rádiólejátszóként működnie.
A célom az volt, hogy anyukám a már megszokott kezdőoldalon megtalálja a Rádió gombot, és néhány érthető választásból elindíthassa, amit hallgatni szeretne. A műszaki részleteket mi tettük a gombok mögé.
A tablet vezérel, a Sonos szól
A rendszerünkben három fő szerep különül el:
| Rész | Feladata nálunk | Amit nem érdemes összekeverni vele |
|---|---|---|
| Fali tablet, Fully Kiosk | A Home Assistant felületének megjelenítése, érintéses vezérlés | A rádió hangjának megszólaltatása |
| Home Assistant | Navigáció, szkriptek, médiaforrás és lejátszó összekapcsolása | Maga a rádióállomás |
| Sonos hangfal | A kiválasztott média lejátszása | A tablet böngészőjének hangerőszabályzója |
| Radio Browser | Állomások elérhető médiakatalógusa | Garancia minden állomás folyamatos elérhetőségére |
A hangfalunk a Sonos integrációban jelenik meg; a rendszerleltárban SYMFONISK Bookshelf modellként szerepel. A cikk példáiban a saját, hosszú entitásnevünket rövid mintanévre cseréltem.
A tablet hangerejének emelésétől tehát nem várom, hogy a Sonos hangosabb legyen. A rádióoldalon a Sonoshoz tartozó csúszkát használom. Ezt érdemes már a felület átadásakor tisztázni, mert kívülről mindkettő „hangerőnek” látszhat.
Így halad végig egy érintés
A főoldali Rádió gomb és az állomásgomb két külön dolgot tesz:
Főoldal → Rádió gomb → rádiónézet
Rádiónézet → állomásgomb → állomásszkript
Állomásszkript → media_player.play_media → Sonos
Leállítógomb → külön szkript → media_player.media_stop
A főoldali gomb csak navigál. Attól, hogy megnyitom a rádióoldalt, nálunk nem indul automatikusan adás. Az állomás kiválasztása tudatos, külön érintés.
Ezt a megoldást azért szeretem, mert a felület megnyitása és a tényleges eszközvezérlés nem mosódik össze. Ha valaki csak a hangerőt vagy az állapotot szeretné megnézni, nem kell közben új műsort indítania.
A folyamat megértéséhez a családbarát kezdőoldalunkról szóló cikk adja a nagyobb képet. Itt most az egyik gomb mögötti teljes rádiós útvonalat bontom ki.
Miből indulnék ki egy másik otthonban?
Először működő Home Assistant és a benne elérhető Sonos-lejátszó kell. A Sonos integráció hivatalos dokumentációja szerint az IKEA SYMFONISK készülékek is támogatottak. A beállítást az Eszközök és szolgáltatások felületén kezdeném, nem rögtön egy egyedi műszerfalkártyával.
Ezután választanék egy rádióforrást, majd egyetlen állomást és egyetlen célhangfalat. A hétgombos felületet csak akkor építeném meg, amikor ez az egyszerű párosítás már érthető.
A saját megvalósításunk Mushroom-kártyákat is használ, de a rádió működését nem ez a kiegészítő adja. A kártya az indítást és a visszajelzést teszi kényelmessé. Egy alap Home Assistant-gombbal is lehet szkriptet indítani.
A példák előtt a mentési útmutatónk alapján biztosítanám a visszaállítás lehetőségét. A kész családi felületet nem egyszerre alakítanám át hét új gombbal.
Hét állomás, azonos kezelési logika
A rádióoldalunkon a következő állomásokhoz van külön gomb és külön szkript:
| Gomb felirata | A szkript feladata | A jelenlegi forrás típusa |
|---|---|---|
| Retro Rádió | Az állomás megnyitása a Sonoson | Radio Browser, audio/mpeg |
| Danubius Rádió | Ugyanez a második állomással | Radio Browser, audio/mpeg |
| Juventus Rádió | Ugyanez a harmadik állomással | Radio Browser, audio/mpeg |
| Rocker Rádió | Ugyanez a negyedik állomással | Radio Browser, audio/mpeg |
| Petőfi Rádió | Ugyanez az ötödik állomással | Radio Browser, audio/aac |
| Kossuth Rádió | Ugyanez a hatodik állomással | Radio Browser, audio/aac |
| Sláger FM | Ugyanez a hetedik állomással | Radio Browser, audio/mpeg |
Ezek a saját konfigurációnkban szereplő választások. A felsorolás nem élő állomás-elérhetőségi jelentés: az internetes adás vagy a katalógusbejegyzés később változhat.
A következetesség itt fontosabb, mint a gombok száma. Minden állomásnál ugyanaz a mozdulat indít, azonos helyen van a leállítás, és egyetlen hangfal állapotát követjük.
Miért Radio Browser azonosító szerepel a szkriptben?
A saját szkriptjeink nem egy weboldal rádiólejátszóját nyitják meg. A media_content_id mezőben media-source://radio_browser/ kezdetű azonosító szerepel. Ez a Home Assistant médiarendszerén keresztül választja ki az állomást.
A Radio Browser hivatalos integrációja médiakatalógust ad; külön rádióentitást nem kell keresni minden állomáshoz. A Media felületen lehet böngészni, és a Play media művelethez választani forrást. Ez segít abban is, hogy ne egy böngésző címsorából másoljak be véletlenül egy rádió honlapjára mutató címet.
Az állomásazonosítót a saját Home Assistantomban választanám ki. Nem várnám el, hogy egy évekkel később bemásolt mintában szereplő katalógusbejegyzés biztosan ugyanazt az adást adja.
A saját állomáslistánk adását az olvasó rendszerébe sem automatikus tömeges másolással vinném át. Először egy forrást választanék és neveznék el következetesen.
Az első állomásszkript felépítése
A saját logikánk egyetlen lépésből áll: egy megadott médiát küld egy megadott lejátszóra. Az alábbi anonimizált szerkezeti minta nem másolható változtatás nélkül: a célentitást és az ALLLOMAS_AZONOSITO helyét a saját választásodra kell cserélni.
alias: Konyhai rádió – minta
mode: single
sequence:
- action: media_player.play_media
target:
entity_id: media_player.konyhai_sonos
data:
media:
media_content_id: media-source://radio_browser/ALLLOMAS_AZONOSITO
media_content_type: audio/mpeg
metadata: {}
Ez a beágyazott media szerkezet a saját jelenlegi szerkesztőből származó konfigurációnkat követi. A hivatalos műveletleírás közvetlen media_content_id és media_content_type mezőkkel is mutat példát. Új rendszerben a saját verzió vizuális médiaszerkesztőjével választanék állomást, és annak mentett YAML-ját ellenőrizném.
Az audio/mpeg nem általános szabály minden rádióra: nálunk két állomás audio/aac típussal szerepel. A kiválasztott forrás adatait tartom meg, nem találomra változtatom a típust.
Mit jelent a single mód?
A single ugyanazon szkript párhuzamos új futását korlátozza, amíg az előző futás tart. Egy rövid lejátszásindító művelet viszont hamar befejeződhet, miközben a rádió még sokáig szól.
Ezért nem tekintem úgy, hogy a single mód az egész rádiórendszert zárolja. A hét állomás hét külön szkript; nem alkotnak közös soros lejátszási várólistát. Két gyors állomásválasztás közös célhangfalnak adhat egymás után utasítást.
A felületet ezért nem folyamatos, gyors gombnyomkodásra tervezem. Állomásválasztás után megvárom a visszajelzést. Ha egy műsor nem indul, előbb a hiba helyét keresem meg, és nem küldök végtelen ismétlést.
A szkript futási állapota sem a rádióhallgatás állapota. A rádióoldal tetején ezért a media_player entitását figyeljük, nem azt, hogy az indítószkript éppen fut-e.
A főoldali navigáció maradjon egyszerű
A kezdőoldalra egy közönséges navigációs gomb elég. A saját belső útvonalunk helyett itt minta szerepel; ezt a saját műszerfalad és nézeted útjára kell cserélni.
type: button
name: Rádió
icon: mdi:radio
show_state: false
tap_action:
action: navigate
navigation_path: /dashboard-pelda/radio
hold_action:
action: none
A gombon a feladat neve szerepel, nem a hangfal entitásazonosítója. A hosszú nyomás nálunk nem indít rejtett második funkciót.
Ha a gomb látszik, de rossz helyre visz, először az útvonalat javítanám. Ezen a ponton még nincs értelme a rádióforrást vagy a Sonost hibáztatni: a navigáció önálló réteg.
A fali tablet és Fully Kiosk cikkben a kijelző nagyobb rendszerbeli szerepét is bemutatom. A rádióhoz azonban nem szükséges a tablet böngészőjében hangot lejátszó külön oldal.
Az állomásgomb feladata egyértelmű legyen
A saját nézetünkben Mushroom Template kártyák adják az állomásgombokat. Mindegyiken az állomás neve és az „Érintse meg a lejátszáshoz” felirat szerepel. Az ikon és a szín segít a megkülönböztetésben.
Az alábbi natív gomb ugyanezt az indítási elvet mutatja, Mushroom telepítése nélkül. A példában a script.konyhai_radio_pelda a korábban létrehozott saját szkript helyére kerül.
type: button
name: Kedvenc rádió
icon: mdi:radio
tap_action:
action: perform-action
perform_action: script.konyhai_radio_pelda
hold_action:
action: none
A két gombot szándékosan nem keverem: a főoldali navigate nézetet vált, az állomásgomb perform-action műveletet kér. Ha a rádióoldal helyett egy új böngészőlap nyílik meg, nem ugyanezt a működést építettem meg.
Mushroom használatakor a telepített verzió dokumentációjához igazítanám a megjelenési beállításokat. Egy régebbi kártyakonfiguráció vizuális paramétereit nem tekinteném minden későbbi kiadásban változatlan ígéretnek.
Mit mondjon az állapotkártya?
A rádióoldal tetején egy kártya a Sonos állapotát értelmezi. Nálunk az elérhetetlen hangfal külön üzenetet kap; lejátszáskor a médiacím, ennek hiányában a csatornanév, végül egyszerű „Rádió” felirat jelenik meg. Szüneteléskor más szöveg látszik.
A hangerőszázalék csak a lejátszóhoz visszakapott értékből készül. Nem a megnyomott állomásgomb neve dönti el, hogy mit írunk ki „Most szól” állapotként.
A jelenlegi saját sablon egyszerűsít: a külön nem kezelt állapotokat a „rádió nem szól” ágba teszi. Az unknown vagy az átmeneti buffering ettől még nem ugyanazt jelenti, mint a biztosan leállított lejátszás. Ha újra építeném ezt a részt, külön megjeleníteném az adathiányt és az előkészítést is.
Az állapotjelzés a vezérlés visszajelzése; önmagában nem mikrofonos igazolás arról, hogy a szobában valóban hallható a hang.
Hangerő: a megfelelő lejátszót állítom
A rádiónézetünk alján natív Tile kártya jeleníti meg a Sonos állapotát és hangerőcsúszkáját:
type: tile
entity: media_player.konyhai_sonos
name: Konyhai Sonos – hangerő és állapot
hide_state: false
features:
- type: media-player-volume-slider
features_position: bottom
A saját állomásszkriptjeink nem állítanak minden indításnál rögzített hangerőt. Emiatt nem számítok arra, hogy az állomásváltás automatikusan visszaállít egy általam kedvelt szintet.
A media_player volume_level skálája és a felületen megjelenő százalék kétféle megjelenítés. A 0,20 például 20%-nak felel meg; ez nem hangerősségmérés decibelben. Indítás előtt a némítás állapotát is ellenőrizném.
A csúszka legyen elég nagy, és a leállítás maradjon könnyen elérhető. Az apró technikai vezérlők helyett az volt a célunk, hogy a család a szokásos mozdulatokkal kezelje.
A leállítás nem áramtalanítás
A felületünkön „Rádió kikapcsolása” a gomb neve, de alatta media_player.media_stop fut. Ezzel a lejátszást állítjuk le; nem a hangfal áramellátását kapcsoljuk ki.
alias: Konyhai rádió leállítása – minta
mode: single
sequence:
- action: media_player.media_stop
target:
entity_id: media_player.konyhai_sonos
Ennek a különbségnek a hibakeresésnél is van jelentősége. Attól, hogy a rádió már nem szól, a Sonos továbbra is jelen lehet a hálózaton és fogadhat más műveletet.
A szüneteltetés megint más kérdés. Élő rádiónál nem feltételezem, hogy később pontosan ugyanott lehet folytatni, ahol megállítottam. Ha újra állomást választok, élő műsor indulhat.
A cikkben ezért leállításról beszélek akkor is, ha a családi gomb rövidebb, hétköznapi felirata „kikapcsolás”.
Hogyan adnék hozzá új állomást?
Először a Home Assistant médiaböngészőjében keresném meg az állomást. Ellenőrizném, hogy ugyanazt az adást választottam-e, amelyet szeretnék: azonos vagy hasonló név alatt több bejegyzés is lehet.
Ezután egy új szkriptben kiválasztanám a meglévő Sonost, és a médiaszerkesztővel hozzáadnám a forrást. A szkript neve, a műszerfalgomb neve és az állomás tartalma legyen összhangban.
Csak ezután kerülne a gomb a család által használt nézetbe. A meglévő kedvenceket nem cserélném le egyszerre egy új, még meg nem ismert listára. Az új elem elkülönített ellenőrzése után bővíteném a megszokott felületet.
Ha egyetlen állomás áll meg, először annak forrását keresném újra. Ha minden állomás elérhetetlen, inkább a közös lejátszó- vagy hálózati réteget vizsgálnám. Ezzel elkerülhető, hogy ugyanazt a közös hibát hét szkript átírásával próbáljam javítani.
Amikor a gomb látszik, mégsem indul zene
| Tapasztalt jelenség | Első vizsgálati pont | Következő lépés |
|---|---|---|
| A Rádió gomb rossz nézetre visz | navigate útvonal | A valódi nézetcím ellenőrzése |
| Az állomásgomb nem indítja a szkriptet | perform_action és script entitás | Szkriptnév és nyomkövetés |
| A szkript hibát jelez | Céllejátszó és médiaadat | A hibás lépés azonosítása |
| Egy állomás nem indul | Katalógusbejegyzés vagy adás | Forrás újraválasztása |
| Minden állomás néma | Sonos állapot, némítás, hangerő | Közös lejátszási út vizsgálata |
| A hang szól, a felirat késik | Állapotfrissítés | Hálózati visszajelzési út ellenőrzése |
A „gomb megnyomva” és a „hang hallható” között több lépés van. A nyomkövetés azt segít megérteni, hogy a Home Assistant meddig jutott; a szobai hallhatóságot továbbra is ténylegesen ellenőrizni kell.
Nem kezdenék rögtön újratelepítéssel. Előbb a legszűkebb hibát keresem: egy gomb, egy szkript, egy állomás vagy az egész hangfal érintett?
Hálózat és internet: külön hibalehetőségek
A tablet, a Home Assistant és a Sonos közötti elérés, valamint a rádióforrás internetes elérése nem ugyanaz a kapcsolat. A tablet megjelenítheti a már megnyitott felületet akkor is, amikor a lejátszási lánc más pontján van hiba.
A Sonos hivatalos integrációs leírása a visszirányú állapotfrissítés hálózati követelményeit is ismerteti. Ha a push út nem működik, a visszajelzés lassabb lekérdezésre válthat. Ezt nem oldanám meg a rendszer internet felőli, korlátlan megnyitásával.
A saját hálózat kialakításánál a hálózati alapvédelemről szóló cikkünkhöz kapcsolnám a szükséges ellenőrzést. A rádióhoz szükséges helyi elérést és a távoli adminisztrációt külön kezelném.
Ha a házi hálózat működik, de a rádióforrás nem érhető el, más hibát keresek, mint amikor a Sonos entitása unavailable. E két eset szétválasztása gyorsítja a helyes irány megtalálását.
Mi történik, ha közben bemondás érkezik?
A Sonost más háztartási funkciók is használják. A mérőóra-, villanyszámla- és kazánszerviz-emlékeztetőinkben szerepel állapotmentés, külön hangerő, szövegfelolvasás, várakozás és visszaállítás.
Ezért a rádió nem teljesen magányos szereplő. Ha éppen bemondás történik, az érintheti ugyanazt a lejátszót. A rádió szkriptjei önmagukban nem tartalmaznak közös, minden bemondásra kiterjedő prioritáskezelést.
A Sonos snapshot és restore műveletei a lejátszási állapot megőrzéséhez és visszaállításához kapcsolódnak, de ebből nem következtetek minden forrásra és minden párhuzamos eseményre hibátlan folytatásra. Különösen nem tekintem bizonyítottnak két egymásra érkező emlékeztető teljes kezelését.
A hangos háztartási emlékeztetőket külön cikkben bontjuk majd ki. Itt azt a határt szeretném világossá tenni, hogy az egyszerű állomásválasztás és a közös hangfal eseményeinek összehangolása két külön feladat.
Mit nem automatizáltunk a rádiógombokkal?
A jelenlegi állomásszkriptek nem keresnek automatikusan tartalék adást, nem várnak külön a playing állapotra, és nem hoznak létre naplózott hallhatósági igazolást. Nem a tablet ébredése indít rádiót.
Nincs bennük minden állomásváltásra külön hangerő-visszaállítás sem. A rádióoldal egyszerűsége éppen abból adódik, hogy nem próbál minden lehetséges helyzetre rejtett működést kitalálni.
A kártya állapotszövegét és a tényleges funkciót viszont összhangban kell tartani. Ha később hozzáadunk forrásváltást, időzített kikapcsolást vagy finomabb hibajelzést, annak látható és érthető helyet adnék.
A saját rendszerünk leírásánál ezt tartom jó iránynak: azt mutassuk be részletesen, amit valóban felépítettünk, és a következő fejlesztést külön nevezzük meg.
Ezzel az ellenőrzési sorrenddel adnám át
| Ellenőrzés | Mit szeretnék látni? |
|---|---|
| Főoldali gomb | A megfelelő rádiónézet nyílik meg, adás nem indul magától |
| Egy állomás választása | A megfelelő Sonos kapja a kiválasztott médiát |
| Állapotkártya | Nem pusztán a gomb feliratát ismétli, hanem a lejátszó adatát |
| Hangerő és némítás | A Sonoson történő változást jelzi |
| Leállítás | A lejátszás áll meg, nem szükséges áramtalanítás |
| Elérhetetlen eszköz | Érthető üzenet látszik, nem kitalált siker |
| Visszaút | A család visszatalál az okosotthon megszokott felületére |
Az éles használati próbát olyan időpontban végezném, amikor a hang nem zavar senkit. Kis hangerőről indulnék, egyetlen állomással, és előre ismert leállítással. Így a próbának is világos kezdete és lezárása van.
Az olvasó saját entitásnevei, állomásai és eszközei ettől eltérhetnek. A mintát a saját rendszeréhez kell igazítania.
Mitől lett ez családbarát megoldás?
Nem attól, hogy sok kiegészítőt kapcsoltunk össze, hanem attól, hogy a hétköznapi feladat rövid maradt: Rádió, állomás, hangerő, leállítás. Az állapot és a célhangfal neve segít, ha valami nem a várt módon történik.
A technikai oldalon külön maradt a navigáció, a szkript, a médiaforrás és a lejátszó. Ez nekünk is előny, mert egy új állomás vagy egy hibás cím nem teszi szükségessé az egész kezelőfelület újraépítését.
Ha most kezded, az okosotthon témaközpontban megtalálod az alapoktól a vezérlésig vezető sorrendet. Ha a rádiós megoldás valamelyik lépésénél elakadsz, a Közösség oldalon írd meg, melyik rétegig jutottál: megnyílik-e a nézet, indul-e a szkript, elérhető-e a hangfal, és csak egy vagy minden állomás érintett.
Így egy általános „nem szól” kérdésből már konkrétan vizsgálható probléma lesz. A család számára közben megmarad az egyszerű rádiógomb.
Végső ellenőrzőlista
- A navigáció nem indít rádiót.
- A szkript a megfelelő hangfalat célozza.
- Az állapot a lejátszó adataiból származik.
- A Sonos hangerejét és némítását vizsgálom.
- A leállítás nem áramtalanítás.
- A közös hangfal emlékeztetőit külön átgondolom.
Menj végig a pontokon a saját rendszereden.
A cikk tájékoztató jellegű, a technikai részletek eszközönként eltérhetnek.