TapHome

Fonestar WA-225W

Packet Parser → HTTP
Přidal
Poslední aktualizace: 03. 2026
Fonestar WA-225W

Fonestar WA-225W je kompaktní Wi-Fi stereo zesilovač s podporou DLNA a AirPlay pro síťové streamování zvuku. TapHome komunikuje se zařízením přes HTTP pomocí UPnP/SOAP XML zpráv odesílaných na port 49152. Šablona cílí na standardní profil UPnP AV Media Renderer, takže by měla fungovat s jakýmkoli zařízením Fonestar implementujícím DLNA (WA-225W, FONCAST a podobné modely).

Šablona poskytuje ovládání hlasitosti, ztlumení, ovládání přehrávání (play, pause, stop, další skladba, předchozí skladba) a přepínač režimu přehrávání. Není potřeba žádné cloudové připojení — veškerá komunikace probíhá v lokální síti.

Konfigurace

Během importu šablony do TapHome zadejte IP adresu zařízení. Výchozí zástupná hodnota je 192.168.0.1 a zařízení naslouchá na portu 49152 (standardní UPnP AV port).

IP adresu zařízení zjistíte v seznamu DHCP klientů na routeru nebo pomocí aplikace pro skenování UPnP/SSDP. WA-225W se v lokální síti hlásí jako UPnP MediaRenderer. Doprovodná aplikace MUZO (iOS/Android) také zobrazuje připojená zařízení a jejich IP adresy.

UPnP zařízení používají pro vyhledávání SSDP, nikoli mDNS. Pokud se IP adresa zařízení změní po obnovení DHCP, budete muset aktualizovat IP adresu v TapHome. Zvažte přiřazení statické IP adresy nebo DHCP rezervace na routeru, abyste předešli problémům s připojením.

Možnosti zařízení

Ovládání hlasitosti

Šablona zpřístupňuje hlasitost jako dimmer. UPnP akce GetVolume vrací hodnotu v rozsahu 0–100, kterou šablona normalizuje na 0,0–1,0 pro dimmer model TapHome (při čtení dělí 100, při zápisu násobí 100). Nastavení hlasitosti na 50 % v TapHome odešle zařízení DesiredVolume=50.

Ztlumení

Ztlumení je zpřístupněno jako spínač. Čte aktuální stav ztlumení přes GetMute (vrací 0 nebo 1) a zapisuje přes SetMute. Obě operace cílí na Master audio kanál služby RenderingControl:1.

Ovládání přehrávání

Šablona poskytuje pět tlačítkových zařízení pro ovládání přehrávání:

  • Play — odešle akci Play služby AVTransport:1 (obnoví nebo spustí přehrávání)
  • Pause — odešle akci Pause (pozastaví přehrávání na aktuální pozici)
  • Stop — odešle akci Stop (zcela zastaví přehrávání)
  • Další skladba — odešle akci Next (přeskočí na další skladbu)
  • Předchozí skladba — odešle akci Previous (vrátí se na předchozí skladbu)

Jedná se o tlačítka pouze pro zápis. Přehrávání musí být nejprve spuštěno z jiného zdroje (např. aplikace MUZO nebo jiný DLNA ovladač), protože šablona neobsahuje akci SetAVTransportURI pro nastavení zdroje médií.

Režim přehrávání

Zařízení režimu přehrávání je vícepolohový přepínač, který ovládá režim opakování přes GetTransportSettings a SetPlayMode. Funkční jsou tři režimy:

PoziceOznačení v TapHomeUPnP PlayModeEfekt
0NormalNORMALSekvenční přehrávání, bez opakování
1Repeat AllREPEAT_ALLOpakování celé fronty
2Repeat OneREPEAT_TRACKOpakování aktuální skladby

Šablona definuje 10 vícepoložkových pozic, ale pouze pozice 0–2 odpovídají skutečným UPnP režimům přehrávání. Pozice 3–9 (označené „Shuffle no repeat", „Shuffle" atd.) se při zápisu nastaví na NORMAL, protože UPnP režim SHUFFLE není ve skriptu šablony namapován. Používejte pouze první tři pozice.

Další možnosti

Standard UPnP AV také zpřístupňuje hlášení stavu přehrávání (STOPPED, PLAYING, PAUSED), informace o pozici a délce skladby, správu URI médií (SetAVTransportURI pro řazení skladeb), funkci vyhledávání, ovládání hlasitosti v decibelech, vylepšení loudness a předvolby renderování. Tyto možnosti mohou být přidány v budoucí aktualizaci šablony.

Řešení problémů

Zařízení neodpovídá
  1. Ověřte, že zesilovač je zapnutý a připojený k Wi-Fi (nebo Ethernetu přes RJ-45)
  2. Potvrďte, že IP adresa v TapHome odpovídá aktuální IP zařízení — zkontrolujte seznam DHCP klientů na routeru
  3. Zkuste v prohlížeči otevřít http://{ip-zarizeni}:49152/ — pokud je zařízení dostupné, načte se UPnP popisný XML soubor
  4. Zkontrolujte, že TapHome Core a zesilovač jsou ve stejné síti / VLAN — UPnP provoz standardně nepřechází mezi podsítěmi
Tlačítka přehrávání nefungují

Tlačítka přehrávání (Play, Pause, Stop, Další skladba, Předchozí skladba) fungují pouze tehdy, když jsou média již načtena na zařízení. Šablona neobsahuje akci SetAVTransportURI, takže přehrávání musí být nejprve spuštěno z jiného zdroje (např. aplikace MUZO, DLNA media server nebo jiný UPnP ovládací bod). Po spuštění přehrávání je tlačítka TapHome budou ovládat.

Změny hlasitosti se neprojevují

Pokud úpravy hlasitosti z TapHome nefungují, ověřte, že zařízení není ztlumeno. Některé DLNA renderery ignorují změny hlasitosti během ztlumení. Také potvrďte, že žádný jiný ovládací bod (např. aplikace MUZO) současně neodesílá konfliktní příkazy.

Dostupná zařízení

Fonestar Modul
Hlasitost Stmívač

Hlavní hlasitost — rozsah UPnP 0–100 normalizovaný na dimmer škálu TapHome (0,0–1,0)

numeric Jednotka: %

Hlasitost

Čtení úrovně
VAR body := "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><u:GetVolume xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetVolume></s:Body></s:Envelope>";

VAR response := SENDHTTPREQUEST("/upnp/control/rendercontrol1", "POST", body, "SOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#GetVolume\"", "CONTENT-TYPE: text/xml; charset=\"utf-8\"" );

IF response.IsSuccess
    VAR responseXml := response.Content;
    RETURN(PARSEXML(responseXml, "//CurrentVolume") / 100.0);
ELSE
    ADDERROR(response.Content);
    RETURN(NaN);
END
Zápis úrovně
VAR body := "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><u:SetVolume xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel><DesiredVolume>" + ROUND(Le * 100) + "</DesiredVolume></u:SetVolume></s:Body></s:Envelope>";

SENDHTTPREQUEST("/upnp/control/rendercontrol1", "POST", body, "SOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#SetVolume\"", "CONTENT-TYPE: text/xml; charset=\"utf-8\"");
Další skladba Tlačítko
button

Další skladba

Zápis stavu tlačítka
VAR body := "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><u:Next xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:Next></s:Body></s:Envelope>";

SENDHTTPREQUEST("/upnp/control/rendertransport1", "POST", body, "SOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#Next\"", "CONTENT-TYPE: text/xml; charset=\"utf-8\"");
Pauza Tlačítko
button

Pauza

Zápis stavu tlačítka
VAR body := "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><u:Pause xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:Pause></s:Body></s:Envelope>";

SENDHTTPREQUEST("/upnp/control/rendertransport1", "POST", body, "SOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#Pause\"", "CONTENT-TYPE: text/xml; charset=\"utf-8\"");
Play Tlačítko
button

Play

Zápis stavu tlačítka
VAR body := "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><u:Play xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope>";

SENDHTTPREQUEST("/upnp/control/rendertransport1", "POST", body, "SOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#Play\"", "CONTENT-TYPE: text/xml; charset=\"utf-8\"");
Předchozí skladba Tlačítko
button

Předchozí skladba

Zápis stavu tlačítka
VAR body := "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><u:Previous xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:Previous></s:Body></s:Envelope>";

SENDHTTPREQUEST("/upnp/control/rendertransport1", "POST", body, "SOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#Previous\"", "CONTENT-TYPE: text/xml; charset=\"utf-8\"");
Stop Tlačítko
button

Stop

Zápis stavu tlačítka
VAR body := "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><u:Stop xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><Speed>1</Speed></u:Stop></s:Body></s:Envelope>";

SENDHTTPREQUEST("/upnp/control/rendertransport1", "POST", body, "SOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#Stop\"", "CONTENT-TYPE: text/xml; charset=\"utf-8\"");
Ztlumení Přepínač
boolean
Hodnoty / Stavy: ON · OFF

Ztlumení

Čtení stavu přepínače
VAR body := "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><u:GetMute xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetMute></s:Body></s:Envelope>";

VAR response := SENDHTTPREQUEST("/upnp/control/rendercontrol1", "POST", body, "SOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#GetMute\"", "CONTENT-TYPE: text/xml; charset=\"utf-8\"");

IF response.IsSuccess
    VAR responseXml := response.Content;
    RETURN(PARSEXML(responseXml, "//CurrentMute"));
ELSE
    ADDERROR(response.Content);
    RETURN(NaN);
END
Zápis stavu přepínače
VAR body := "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><u:SetMute xmlns:u=\"urn:schemas-upnp-org:service:RenderingControl:1\"><InstanceID>0</InstanceID><Channel>Master</Channel><DesiredMute>" + St +"</DesiredMute></u:SetMute></s:Body></s:Envelope>";

SENDHTTPREQUEST("/upnp/control/rendercontrol1", "POST", body, "SOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#SetMute\"", "CONTENT-TYPE: text/xml; charset=\"utf-8\"");
Režim přehrávání Vícestavový přepínač

Režim opakování — Normal, Repeat All, Repeat One jsou funkční; pozice 3–9 nemají UPnP mapování a nastaví se na Normal

enum
Hodnoty / Stavy: Normal · Repeat all · Repeat one · Shuffle no repeat · Shuffle · Shuffle repeat one

Režim přehrávání

Čtení stavu přepínače
VAR body := "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><u:GetTransportSettings xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID></u:GetTransportSettings></s:Body></s:Envelope>";

VAR response := SENDHTTPREQUEST("/upnp/control/rendertransport1", "POST", body, "SOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#GetTransportSettings\"", "CONTENT-TYPE: text/xml; charset=\"utf-8\"");

IF response.IsSuccess
    VAR responseXml := response.Content;
    VAR mode := PARSEXML(responseXml, "//PlayMode");
    RETURN(SWITCH(mode, "NORMAL", 0, "REPEAT_ALL", 1, "REPEAT_TRACK", 2, 0));
ELSE
    ADDERROR(response.Content);
    RETURN(NaN);
END
Zápis stavu přepínače
VAR mode := SWITCH(Mu, 0, "NORMAL", 1, "REPEAT_ALL", 2, "REPEAT_TRACK", "NORMAL");

VAR body := "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><u:SetPlayMode xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>0</InstanceID><NewPlayMode>" + mode +"</NewPlayMode></u:SetPlayMode></s:Body></s:Envelope>";

SENDHTTPREQUEST("/upnp/control/rendertransport1", "POST", body, "SOAPACTION: \"urn:schemas-upnp-org:service:AVTransport:1#SetPlayMode\"", "CONTENT-TYPE: text/xml; charset=\"utf-8\"");
Připojení: Packet Parser → HTTP
Možná vylepšení (8)
  • Set Media URI — Required action — sets the URI of the media to play. Without this, the device can only control already-playing media (started from another source like the MUZO app).
  • Transport State — Returns current TransportState (STOPPED, PLAYING, PAUSED_PLAYBACK, etc.) — useful for showing playback status in TapHome
  • Track Position Info — Returns current track number, duration, and playback position — would enable progress display
  • Media Info — Returns number of tracks and media duration
  • Seek — Required action — seek by track number, absolute or relative time
  • Volume in dB — Optional — volume control in decibels rather than 0-100 linear scale
  • Loudness — Optional — loudness enhancement toggle
  • Rendering Presets — Required actions — list and select rendering presets (e.g. EQ profiles)

Zdroje