TapHome

Fonestar WA-225W

Packet Parser → HTTP
Dodane przez
Ostatnia aktualizacja: 03. 2026
Fonestar WA-225W

Fonestar WA-225W to kompaktowy wzmacniacz stereo Wi-Fi z obsługą DLNA i AirPlay do strumieniowego przesyłania dźwięku przez sieć. TapHome komunikuje się z urządzeniem przez HTTP, wysyłając wiadomości UPnP/SOAP XML na port 49152. Szablon jest oparty na standardowym profilu UPnP AV Media Renderer, więc powinien działać z każdym urządzeniem Fonestar implementującym DLNA (WA-225W, FONCAST i podobne modele).

Szablon zapewnia sterowanie głośnością, wyciszenie, sterowanie odtwarzaniem (play, pauza, stop, następny utwór, poprzedni utwór) oraz przełącznik trybu odtwarzania. Nie jest wymagane połączenie z chmurą — cała komunikacja odbywa się w sieci lokalnej.

Konfiguracja

Podczas importu szablonu do TapHome podaj adres IP urządzenia. Domyślny symbol zastępczy to 192.168.0.1, a urządzenie nasłuchuje na porcie 49152 (standardowy port UPnP AV).

Aby znaleźć adres IP urządzenia, sprawdź listę klientów DHCP routera lub użyj aplikacji do skanowania UPnP/SSDP. WA-225W ogłasza się jako UPnP MediaRenderer w sieci lokalnej. Aplikacja towarzysząca MUZO (iOS/Android) również wyświetla podłączone urządzenia i ich adresy IP.

Urządzenia UPnP używają SSDP do wykrywania, nie mDNS. Jeśli adres IP urządzenia zmieni się po odnowieniu DHCP, konieczna będzie aktualizacja adresu IP w TapHome. Rozważ przypisanie statycznego adresu IP lub rezerwacji DHCP na routerze, aby uniknąć problemów z łącznością.

Funkcje urządzenia

Sterowanie głośnością

Szablon udostępnia głośność jako dimmer. Akcja UPnP GetVolume zwraca wartość z zakresu 0–100, którą szablon normalizuje do 0,0–1,0 dla modelu dimmera TapHome (przy odczycie dzieli przez 100, przy zapisie mnoży przez 100). Ustawienie głośności na 50% w TapHome wysyła DesiredVolume=50 do urządzenia.

Wyciszenie

Wyciszenie jest udostępnione jako przełącznik. Odczytuje aktualny stan wyciszenia przez GetMute (zwraca 0 lub 1) i zapisuje przez SetMute. Obie operacje są skierowane na kanał audio Master usługi RenderingControl:1.

Sterowanie odtwarzaniem

Szablon udostępnia pięć urządzeń przyciskowych do sterowania odtwarzaniem:

  • Play — wysyła akcję Play usługi AVTransport:1 (wznawia lub rozpoczyna odtwarzanie)
  • Pauza — wysyła akcję Pause (wstrzymuje odtwarzanie w bieżącej pozycji)
  • Stop — wysyła akcję Stop (całkowicie zatrzymuje odtwarzanie)
  • Następny utwór — wysyła akcję Next (przeskakuje do następnego utworu)
  • Poprzedni utwór — wysyła akcję Previous (wraca do poprzedniego utworu)

Są to przyciski tylko do zapisu. Odtwarzanie musi być najpierw uruchomione z innego źródła (np. aplikacja MUZO lub inny kontroler DLNA), ponieważ szablon nie zawiera akcji SetAVTransportURI do ustawienia źródła multimediów.

Tryb odtwarzania

Urządzenie trybu odtwarzania to przełącznik wielowartościowy, który steruje trybem powtarzania przez GetTransportSettings i SetPlayMode. Trzy tryby są funkcjonalne:

PozycjaEtykieta TapHomeUPnP PlayModeEfekt
0NormalNORMALOdtwarzanie sekwencyjne, bez powtarzania
1Repeat AllREPEAT_ALLPowtarzanie całej kolejki
2Repeat OneREPEAT_TRACKPowtarzanie bieżącego utworu

Szablon definiuje 10 pozycji wielowartościowych, ale tylko pozycje 0–2 odpowiadają rzeczywistym trybom odtwarzania UPnP. Pozycje 3–9 (oznaczone „Shuffle no repeat", „Shuffle" itp.) przy zapisie ustawiają się na NORMAL, ponieważ tryb UPnP SHUFFLE nie jest zmapowany w skrypcie szablonu. Używaj tylko trzech pierwszych pozycji.

Dodatkowe funkcje

Standard UPnP AV udostępnia również raportowanie stanu odtwarzania (STOPPED, PLAYING, PAUSED), informacje o pozycji i czasie trwania utworu, zarządzanie URI multimediów (SetAVTransportURI do kolejkowania utworów), funkcję wyszukiwania, sterowanie głośnością w decybelach, wzmocnienie loudness oraz presety renderowania. Te funkcje mogą zostać dodane w przyszłej aktualizacji szablonu.

Rozwiązywanie problemów

Urządzenie nie odpowiada
  1. Sprawdź, czy wzmacniacz jest włączony i podłączony do Wi-Fi (lub Ethernetu przez RJ-45)
  2. Potwierdź, że adres IP w TapHome odpowiada aktualnemu IP urządzenia — sprawdź listę klientów DHCP routera
  3. Spróbuj otworzyć http://{ip-urzadzenia}:49152/ w przeglądarce — jeśli urządzenie jest osiągalne, powinien załadować się plik XML opisu UPnP
  4. Sprawdź, czy TapHome Core i wzmacniacz są w tej samej sieci / VLAN — ruch UPnP domyślnie nie przekracza granic podsieci
Przyciski odtwarzania nie działają

Przyciski odtwarzania (Play, Pauza, Stop, Następny utwór, Poprzedni utwór) działają tylko wtedy, gdy multimedia są już załadowane na urządzeniu. Szablon nie zawiera akcji SetAVTransportURI, więc odtwarzanie musi być najpierw uruchomione z innego źródła (np. aplikacja MUZO, serwer multimediów DLNA lub inny punkt kontrolny UPnP). Po uruchomieniu odtwarzania przyciski TapHome będą je kontrolować.

Zmiany głośności nie są stosowane

Jeśli regulacje głośności z TapHome nie odnoszą skutku, sprawdź, czy urządzenie nie jest wyciszone. Niektóre renderery DLNA ignorują zmiany głośności przy aktywnym wyciszeniu. Upewnij się również, że żaden inny punkt kontrolny (np. aplikacja MUZO) nie wysyła jednocześnie sprzecznych poleceń.

Dostępne urządzenia

Fonestar Moduł
Głośność Ściemniacz

Główny poziom głośności — zakres UPnP 0–100 znormalizowany do skali dimmera TapHome (0,0–1,0)

numeric Jednostka: %

Głośność

Odczyt poziomu
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
Zapis poziomu
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\"");
Następny utwór Przycisk
button

Następny utwór

Zapis stanu przycisku
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 Przycisk
button

Pauza

Zapis stanu przycisku
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 Przycisk
button

Play

Zapis stanu przycisku
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\"");
Poprzedni utwór Przycisk
button

Poprzedni utwór

Zapis stanu przycisku
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 Przycisk
button

Stop

Zapis stanu przycisku
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\"");
Wyciszenie Przełącznik
boolean
Wartości / Stany: ON · OFF

Wyciszenie

Odczyt stanu przełącznika
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
Zapis stanu przełącznika
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\"");
Tryb odtwarzania Przełącznik wielowartościowy

Tryb powtarzania — Normal, Repeat All, Repeat One są funkcjonalne; pozycje 3–9 nie mają mapowania UPnP i ustawiają się na Normal

enum
Wartości / Stany: Normal · Repeat all · Repeat one · Shuffle no repeat · Shuffle · Shuffle repeat one

Tryb odtwarzania

Odczyt stanu przełącznika
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
Zapis stanu przełącznika
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\"");
Połączenie: Packet Parser → HTTP
Możliwe ulepszenia (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)

Źródła