TapHome

Fonestar WA-225W

Packet Parser → HTTP
Eingereicht von
Zuletzt aktualisiert: 03. 2026
Fonestar WA-225W

Der Fonestar WA-225W ist ein kompakter Wi-Fi-Stereoverstärker mit DLNA- und AirPlay-Unterstützung für Netzwerk-Audio-Streaming. TapHome kommuniziert mit dem Gerät über HTTP mittels UPnP/SOAP-XML-Nachrichten, die an Port 49152 gesendet werden. Die Vorlage zielt auf das Standard-UPnP-AV-Media-Renderer-Profil ab und sollte daher mit jedem Fonestar-Gerät funktionieren, das DLNA implementiert (WA-225W, FONCAST und ähnliche Modelle).

Die Vorlage bietet Lautstärkeregelung, Stummschaltung, Wiedergabesteuerung (Play, Pause, Stop, nächster Titel, vorheriger Titel) und einen Wiedergabemodus-Umschalter. Es ist keine Cloud-Verbindung erforderlich — die gesamte Kommunikation erfolgt im lokalen Netzwerk.

Konfiguration

Geben Sie beim Import der TapHome-Vorlage die IP-Adresse des Geräts ein. Der Standard-Platzhalter ist 192.168.0.1 und das Gerät lauscht auf Port 49152 (der Standard-UPnP-AV-Port).

Um die IP-Adresse des Geräts zu finden, prüfen Sie die DHCP-Client-Liste Ihres Routers oder verwenden Sie eine UPnP/SSDP-Scanner-App. Der WA-225W meldet sich im lokalen Netzwerk als UPnP-MediaRenderer an. Die Begleit-App MUZO (iOS/Android) zeigt ebenfalls verbundene Geräte und deren IP-Adressen an.

UPnP-Geräte verwenden SSDP für die Erkennung, nicht mDNS. Wenn sich die IP-Adresse des Geräts nach einer DHCP-Erneuerung ändert, müssen Sie die IP-Adresse in TapHome aktualisieren. Erwägen Sie die Zuweisung einer statischen IP-Adresse oder einer DHCP-Reservierung auf Ihrem Router, um Verbindungsprobleme zu vermeiden.

Gerätefunktionen

Lautstärkeregelung

Die Vorlage stellt die Lautstärke als Dimmer bereit. Die UPnP-Aktion GetVolume gibt einen Wert im Bereich 0–100 zurück, den die Vorlage für das TapHome-Dimmer-Modell auf 0,0–1,0 normalisiert (beim Lesen durch 100 dividiert, beim Schreiben mit 100 multipliziert). Das Einstellen der Lautstärke auf 50 % in TapHome sendet DesiredVolume=50 an das Gerät.

Stummschaltung

Die Stummschaltung wird als Schalter bereitgestellt. Sie liest den aktuellen Stummschaltungszustand über GetMute (gibt 0 oder 1 zurück) und schreibt über SetMute. Beide Operationen zielen auf den Master-Audiokanal des RenderingControl:1-Diensts ab.

Wiedergabesteuerung

Die Vorlage bietet fünf Tastengeräte zur Wiedergabesteuerung:

  • Play — sendet die Play-Aktion des AVTransport:1-Diensts (nimmt die Wiedergabe auf oder startet sie)
  • Pause — sendet die Pause-Aktion (hält die Wiedergabe an der aktuellen Position an)
  • Stop — sendet die Stop-Aktion (stoppt die Wiedergabe vollständig)
  • Nächster Titel — sendet die Next-Aktion (springt zum nächsten Titel)
  • Vorheriger Titel — sendet die Previous-Aktion (kehrt zum vorherigen Titel zurück)

Dies sind reine Schreib-Tasten. Die Wiedergabe muss zuerst von einer anderen Quelle gestartet werden (z. B. die MUZO-App oder ein anderer DLNA-Controller), da die Vorlage keine SetAVTransportURI-Aktion zum Festlegen der Medienquelle enthält.

Wiedergabemodus

Das Wiedergabemodus-Gerät ist ein Mehrwert-Schalter, der den Wiederholungsmodus über GetTransportSettings und SetPlayMode steuert. Drei Modi sind funktionsfähig:

PositionTapHome-BezeichnungUPnP PlayModeEffekt
0NormalNORMALSequenzielle Wiedergabe, keine Wiederholung
1Repeat AllREPEAT_ALLGesamte Warteschlange wiederholen
2Repeat OneREPEAT_TRACKAktuellen Titel wiederholen

Die Vorlage definiert 10 Mehrwert-Positionen, aber nur die Positionen 0–2 entsprechen tatsächlichen UPnP-Wiedergabemodi. Die Positionen 3–9 (bezeichnet als „Shuffle no repeat", „Shuffle" usw.) werden beim Schreiben auf NORMAL gesetzt, da der UPnP-Modus SHUFFLE im Vorlagen-Skript nicht zugeordnet ist. Verwenden Sie nur die ersten drei Positionen.

Weitere Funktionen

Der UPnP-AV-Standard stellt auch Wiedergabezustandsmeldungen (STOPPED, PLAYING, PAUSED), Informationen zu Titelposition und -dauer, URI-Medienverwaltung (SetAVTransportURI zum Einreihen von Titeln), Suchfunktion, Lautstärkeregelung in Dezibel, Loudness-Verbesserung und Rendering-Voreinstellungen bereit. Diese Funktionen können in einem zukünftigen Vorlagen-Update hinzugefügt werden.

Fehlerbehebung

Gerät antwortet nicht
  1. Stellen Sie sicher, dass der Verstärker eingeschaltet und mit Wi-Fi (oder Ethernet über RJ-45) verbunden ist
  2. Bestätigen Sie, dass die IP-Adresse in TapHome mit der aktuellen IP des Geräts übereinstimmt — prüfen Sie die DHCP-Client-Liste Ihres Routers
  3. Versuchen Sie, http://{geraete-ip}:49152/ im Browser aufzurufen — wenn das Gerät erreichbar ist, sollte ein UPnP-Beschreibungs-XML geladen werden
  4. Stellen Sie sicher, dass TapHome Core und der Verstärker im selben Netzwerk / VLAN sind — UPnP-Datenverkehr überquert standardmäßig keine Subnetzgrenzen
Wiedergabe-Tasten haben keine Wirkung

Die Wiedergabe-Tasten (Play, Pause, Stop, Nächster Titel, Vorheriger Titel) funktionieren nur, wenn bereits Medien auf dem Gerät geladen sind. Die Vorlage enthält keine SetAVTransportURI-Aktion, daher muss die Wiedergabe zuerst von einer anderen Quelle gestartet werden (z. B. die MUZO-App, ein DLNA-Medienserver oder ein anderer UPnP-Kontrollpunkt). Sobald Medien abgespielt werden, können die TapHome-Tasten die Wiedergabe steuern.

Lautstärkeänderungen werden nicht übernommen

Wenn Lautstärkeanpassungen aus TapHome keine Wirkung zeigen, stellen Sie sicher, dass das Gerät nicht stummgeschaltet ist. Einige DLNA-Renderer ignorieren Lautstärkeänderungen bei aktiver Stummschaltung. Bestätigen Sie außerdem, dass kein anderer Kontrollpunkt (z. B. die MUZO-App) gleichzeitig widersprüchliche Befehle sendet.

Verfügbare Geräte

Fonestar Modul
Lautstärke Dimmer

Hauptlautstärke — UPnP-Bereich 0–100, normalisiert auf die TapHome-Dimmer-Skala (0,0–1,0)

numeric Einheit: %

Lautstärke

Level lesen
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
Level schreiben
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\"");
Nächster Titel Taster
button

Nächster Titel

Tastenstatus schreiben
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\"");
Pause Taster
button

Pause

Tastenstatus schreiben
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 Taster
button

Play

Tastenstatus schreiben
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\"");
Vorheriger Titel Taster
button

Vorheriger Titel

Tastenstatus schreiben
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 Taster
button

Stop

Tastenstatus schreiben
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\"");
Stummschaltung Schalter
boolean
Werte / Zustände: ON · OFF

Stummschaltung

Schaltzustand lesen
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
Schaltzustand schreiben
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\"");
Wiedergabemodus Mehrwertschalter

Wiederholungsmodus — Normal, Repeat All, Repeat One sind funktional; Positionen 3–9 haben keine UPnP-Zuordnung und werden auf Normal gesetzt

enum
Werte / Zustände: Normal · Repeat all · Repeat one · Shuffle no repeat · Shuffle · Shuffle repeat one

Wiedergabemodus

Schaltzustand lesen
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
Schaltzustand schreiben
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\"");
Verbindung: Packet Parser → HTTP
Mögliche Verbesserungen (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)

Quellen