TapHome

Fonestar WA-225W

Packet Parser → HTTP
Inviato da
Ultimo aggiornamento: 03. 2026
Fonestar WA-225W

Il Fonestar WA-225W è un amplificatore stereo Wi-Fi compatto con supporto DLNA e AirPlay per lo streaming audio di rete. TapHome comunica con il dispositivo via HTTP utilizzando messaggi UPnP/SOAP XML inviati alla porta 49152. Il template è basato sul profilo standard UPnP AV Media Renderer, quindi dovrebbe funzionare con qualsiasi dispositivo Fonestar che implementa DLNA (WA-225W, FONCAST e modelli simili).

Il template offre controllo del volume, silenziamento, controllo della riproduzione (play, pausa, stop, brano successivo, brano precedente) e un selettore della modalità di riproduzione. Non è necessaria alcuna connessione cloud — tutta la comunicazione avviene nella rete locale.

Configurazione

Durante l’importazione del template in TapHome, inserisci l’indirizzo IP del dispositivo. Il segnaposto predefinito è 192.168.0.1 e il dispositivo ascolta sulla porta 49152 (la porta standard UPnP AV).

Per trovare l’indirizzo IP del dispositivo, controlla l’elenco dei client DHCP del router o utilizza un’app scanner UPnP/SSDP. Il WA-225W si annuncia come UPnP MediaRenderer nella rete locale. L’app companion MUZO (iOS/Android) mostra anche i dispositivi connessi e i loro indirizzi IP.

I dispositivi UPnP utilizzano SSDP per la scoperta, non mDNS. Se l’indirizzo IP del dispositivo cambia dopo un rinnovo DHCP, dovrai aggiornare l’indirizzo IP in TapHome. Considera l’assegnazione di un IP statico o di una prenotazione DHCP sul router per evitare problemi di connettività.

Funzionalità del dispositivo

Controllo del volume

Il template espone il volume come un dimmer. L’azione UPnP GetVolume restituisce un valore nell’intervallo 0–100, che il template normalizza a 0,0–1,0 per il modello dimmer di TapHome (divide per 100 in lettura, moltiplica per 100 in scrittura). Impostare il volume al 50% in TapHome invia DesiredVolume=50 al dispositivo.

Silenziamento

Il silenziamento è esposto come un interruttore. Legge lo stato di silenziamento corrente tramite GetMute (restituisce 0 o 1) e scrive tramite SetMute. Entrambe le operazioni sono indirizzate al canale audio Master del servizio RenderingControl:1.

Controllo della riproduzione

Il template fornisce cinque dispositivi a pulsante per il controllo della riproduzione:

  • Play — invia l’azione Play del servizio AVTransport:1 (riprende o avvia la riproduzione)
  • Pausa — invia l’azione Pause (sospende la riproduzione nella posizione corrente)
  • Stop — invia l’azione Stop (interrompe completamente la riproduzione)
  • Brano successivo — invia l’azione Next (passa al brano successivo)
  • Brano precedente — invia l’azione Previous (torna al brano precedente)

Questi sono pulsanti di sola scrittura. La riproduzione deve essere prima avviata da un’altra sorgente (ad es. l’app MUZO o un altro controller DLNA), poiché il template non include l’azione SetAVTransportURI per impostare la sorgente multimediale.

Modalità di riproduzione

Il dispositivo modalità di riproduzione è un selettore multivalore che controlla la modalità di ripetizione tramite GetTransportSettings e SetPlayMode. Tre modalità sono funzionanti:

PosizioneEtichetta TapHomeUPnP PlayModeEffetto
0NormalNORMALRiproduzione sequenziale, senza ripetizione
1Repeat AllREPEAT_ALLRipetizione dell’intera coda
2Repeat OneREPEAT_TRACKRipetizione del brano corrente

Il template definisce 10 posizioni multivalore, ma solo le posizioni 0–2 corrispondono a modalità UPnP reali. Le posizioni 3–9 (etichettate “Shuffle no repeat”, “Shuffle” ecc.) si impostano su NORMAL in scrittura perché la modalità UPnP SHUFFLE non è mappata nello script del template. Utilizza solo le prime tre posizioni.

Funzionalità aggiuntive

Lo standard UPnP AV espone anche il report dello stato di riproduzione (STOPPED, PLAYING, PAUSED), informazioni sulla posizione e durata del brano, gestione URI dei media (SetAVTransportURI per accodare brani), funzionalità di ricerca, controllo del volume in decibel, miglioramento loudness e preset di rendering. Queste funzionalità potranno essere aggiunte in un futuro aggiornamento del template.

Risoluzione dei problemi

Il dispositivo non risponde
  1. Verifica che l’amplificatore sia acceso e connesso al Wi-Fi (o Ethernet tramite RJ-45)
  2. Conferma che l’indirizzo IP in TapHome corrisponda all’IP corrente del dispositivo — controlla l’elenco dei client DHCP del router
  3. Prova ad accedere a http://{ip-dispositivo}:49152/ nel browser — se il dispositivo è raggiungibile, dovrebbe caricarsi un XML di descrizione UPnP
  4. Verifica che TapHome Core e l’amplificatore siano sulla stessa rete / VLAN — il traffico UPnP non attraversa i confini di sottorete per impostazione predefinita
I pulsanti di riproduzione non hanno effetto

I pulsanti di riproduzione (Play, Pausa, Stop, Brano successivo, Brano precedente) funzionano solo quando i media sono già caricati sul dispositivo. Il template non include l’azione SetAVTransportURI, quindi la riproduzione deve essere prima avviata da un’altra sorgente (ad es. l’app MUZO, un media server DLNA o un altro punto di controllo UPnP). Una volta avviata la riproduzione, i pulsanti TapHome la controlleranno.

Le modifiche al volume non vengono applicate

Se le regolazioni del volume da TapHome non hanno effetto, verifica che il dispositivo non sia silenziato. Alcuni renderer DLNA ignorano le modifiche al volume quando il silenziamento è attivo. Conferma inoltre che nessun altro punto di controllo (ad es. l’app MUZO) stia inviando contemporaneamente comandi in conflitto.

Dispositivi disponibili

Fonestar Modulo
Volume Dimmer

Livello volume principale — intervallo UPnP 0–100 normalizzato alla scala dimmer TapHome (0,0–1,0)

numeric Unità: %

Volume

Lettura livello
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
Scrittura livello
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\"");
Brano successivo Pulsante
button

Brano successivo

Scrittura stato pulsante
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\"");
Pausa Pulsante
button

Pausa

Scrittura stato pulsante
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 Pulsante
button

Play

Scrittura stato pulsante
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\"");
Brano precedente Pulsante
button

Brano precedente

Scrittura stato pulsante
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 Pulsante
button

Stop

Scrittura stato pulsante
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\"");
Silenziamento Interruttore
boolean
Valori / Stati: ON · OFF

Silenziamento

Lettura stato interruttore
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
Scrittura stato interruttore
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\"");
Modalità di riproduzione Interruttore multivalore

Modalità di ripetizione — Normal, Repeat All, Repeat One sono funzionali; le posizioni 3–9 non hanno mappatura UPnP e si impostano su Normal

enum
Valori / Stati: Normal · Repeat all · Repeat one · Shuffle no repeat · Shuffle · Shuffle repeat one

Modalità di riproduzione

Lettura stato interruttore
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
Scrittura stato interruttore
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\"");
Connessione: Packet Parser → HTTP
Possibili miglioramenti (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)

Fonti