TapHome

Bluesound

Packet Parser → HTTP
Dodane przez
Ostatnia aktualizacja: 08. 2026

To urządzenie obsługuje mDNS

Zamiast adresu IP możesz połączyć się z urządzeniem pod adresem:

{MODEL}-{MAC4}.local

Zastąp {MAC} adresem MAC urządzenia (wielkie litery, bez dwukropków).

TapHome obsługuje mDNS — użycie nazwy hosta jest bardziej niezawodne niż statyczny IP.

Bluesound

Bluesound to seria urządzeń audio multiroom zbudowana na BluOS, platformie strumieniowej firmy Lenbrook dla dźwięku bezstratnego do 24 bitów/192 kHz. Każdy odtwarzacz BluOS udostępnia w sieci lokalnej BluOS Custom Integration API: zwykłe żądania HTTP GET na porcie TCP 11000, odpowiedzi w formacie UTF-8 XML, bez uwierzytelniania i bez konta w chmurze. TapHome komunikuje się z odtwarzaczem bezpośrednio przez sieć lokalną.

Szablon nie jest przypisany do konkretnego modelu — nie zawiera żadnego powiązania z modelem ani producentem i korzysta wyłącznie z API HTTP, więc obejmuje całą aktualną serię (NODE, NODE X, NODE NANO, NODE ICON, POWERNODE, POWERNODE EDGE, PULSE, PULSE M, PULSE MINI, PULSE FLEX, PULSE CINEMA, PULSE CINEMA MINI, PULSE SOUNDBAR, VAULT i HUB) oraz wcześniejsze generacje. Ponieważ BluOS dostarczają także NAD Electronics, DALI, PSB Speakers, Monitor Audio, Roksan, Cyrus i Peachtree, odtwarzacze tych marek udostępniają to samo API i odpowiadają na te same żądania.

Połączenie sieciowe

Nie ma nic do okablowania. Odtwarzacz BluOS dołącza do sieci domowej przez Ethernet lub Wi-Fi za pomocą kreatora w aplikacji BluOS Controller, a TapHome sięga do niego następnie przez HTTP. Jedynym wymaganiem jest, aby jednostka sterująca TapHome i odtwarzacz znajdowały się w tym samym segmencie sieci, a port 11000 był między nimi otwarty.

Port 11000 obowiązuje w każdym odtwarzaczu BluOS z jednym udokumentowanym wyjątkiem: NAD CI580 mieści cztery węzły strumieniowe w jednej obudowie na portach 11000 / 11010 / 11020 / 11030. Szablon adresuje wyłącznie port 11000, więc w CI580 steruje węzłem 1.

Konfiguracja

Znajdowanie adresu IP odtwarzacza

Adres jest widoczny na ekranie Diagnostics w aplikacji BluOS Controller:

  • Android / iOS — zakładka Players → wybierz odtwarzacz → zakładka HomeSettings → w sekcji Help & Support dotknij Diagnostics.
  • Windows / macOSPlayer Drawer → wybierz odtwarzacz → lewy Navigation DrawerHelp → Diagnostics.

Ten sam ekran wypisuje pod pozycją Other Players także adresy pozostałych odtwarzaczy w sieci. Bez aplikacji otwarcie adresu http://<ip_odtwarzacza>:11000/SyncStatus w przeglądarce zwraca atrybut id odtwarzacza (adres i port) wraz z jego atrybutem mac.

Utrzymanie stałego adresu

Szablon adresuje odtwarzacz po adresie IP, więc zmieniona dzierżawa DHCP po cichu zatrzymuje integrację. Lenbrook wyraźnie zaleca rezerwację DHCP na routerze zamiast adresu statycznego ustawionego w samym odtwarzaczu:

  1. Otwórz panel administracyjny routera i znajdź ustawienia rezerwacji DHCP / LAN.
  2. Wprowadź adres MAC odtwarzacza — zawiera go odpowiedź /SyncStatus, więc można go odczytać przez HTTP bez aplikacji.
  3. Przypisz adres, który odtwarzacz ma zachować, i zapisz.
  4. Uruchom odtwarzacz ponownie, aby odnowił dzierżawę, i sprawdź, czy przejął zarezerwowany adres.
Import szablonu

Szablon ma jeden parametr importu, IpAddress (wartość zastępcza 192.168.0.1). Wprowadź adres odtwarzacza; port 11000 i format żądań są już częścią szablonu.

Wymagana konfiguracja po imporcie — Grupuj z odtwarzaczem

Przełącznik Grupuj z odtwarzaczem jest dostarczany ze zmienną IP ustawioną na dosłowny symbol zastępczy 192.168.x.x. To nie jest działająca wartość domyślna — dopóki jej nie zmienisz, skrypt odczytu szuka 192.168.x.x wśród odtwarzaczy podrzędnych, nigdy go nie znajduje, a przełącznik pozostaje trwale wyłączony.

Po zaimportowaniu szablonu otwórz urządzenie Grupuj z odtwarzaczem w aplikacji TapHome i ustaw IP na adres odtwarzacza, który ma zostać dołączony jako podrzędny element grupy. Skorzystaj z opisanego wyżej ekranu Diagnostics (pozycja Other Players wypisuje dokładnie te adresy) albo odczytaj /SyncStatus na dowolnym odtwarzaczu w sieci.

Wszystkie pozostałe urządzenia szablonu działają od razu po wypełnieniu parametru IpAddress. Grupuj z odtwarzaczem to jedyne urządzenie, które po imporcie wymaga drugiej wartości — jeśli zostawisz 192.168.x.x, przełącznik będzie sprawiał wrażenie zepsutego, zamiast zgłosić błąd.

Funkcje urządzenia

Sterowanie odtwarzaniem

Odtwarzaniem steruje pięć przycisków:

  • Play — uruchamia bieżące źródło dźwięku. Wznawia wstrzymany odtwarzacz, ale nie uruchamia ponownie zatrzymanego.
  • Pauza — wysyła przełączenie, więc tym samym przyciskiem wstrzymuje się grający odtwarzacz i wznawia wstrzymany. Jeśli gra budzik z limitem czasu, wstrzymanie anuluje również ten limit.
  • Stop — zatrzymuje odtwarzanie. W odróżnieniu od pauzy zatrzymanego odtwarzacza nie można wznowić przyciskiem Play. Zatrzymanie także anuluje działający limit budzika.
  • Następny utwór — przechodzi naprzód w kolejce odtwarzania, a na końcu kolejki wraca do pierwszego utworu, niezależnie od ustawienia powtarzania.
  • Poprzedni utwór — uruchamia bieżący utwór od początku, jeśli jest odtwarzany dłużej niż cztery sekundy, w przeciwnym razie cofa się do poprzedniego utworu.

Te przyciski działają na kolejce odtwarzania. Gdy odtwarzacz strumieniuje stację radiową lub gra z wejścia fizycznego, kolejka nie jest źródłem dźwięku, a przechodzenie naprzód i wstecz jest niedostępne — API obsługuje ten przypadek osobnym endpointem, którego szablon nie wykorzystuje.

Głośność

Głośność to ściemniacz. Odczytuje poziom odtwarzacza (0–100) i skaluje go do zakresu ściemniacza 0,0–1,0; przy zapisie odsyła wartość jako pełny procent. Wyłączenie ściemniacza wysyła polecenie wyciszenia zamiast głośności 0, dzięki czemu własny poziom odtwarzacza zostaje zachowany i wraca po wyłączeniu wyciszenia.

Oba zapisy zawierają tell_slaves=1, co odpowiada suwakowi głośności grupy w aplikacji BluOS Controller: gdy odtwarzacz jest nadrzędnym elementem grupy, głośność zmienia się jednocześnie we wszystkich odtwarzaczach grupy, a nie tylko w adresowanym.

Użyteczny zakres głośności ustawia się w aplikacji BluOS Controller w Settings → Player → Audio i wynosi zazwyczaj −80…0 dB. Wszystkie poziomy są przycinane do tego zakresu, więc ściemniacz TapHome na 100 % nie musi oznaczać 0 dB. Odtwarzacze ze stałym poziomem liniowym na wyjściu w ogóle nie zgłaszają użytecznej głośności, a ściemniacz pokazuje wtedy bezsensowny poziom zamiast błędu.

Ściemniacz głośności odpytuje odtwarzacz co 2,5 sekundy, podczas gdy API BluOS oczekuje od integracji bez long pollingu co najwyżej jednego żądania na 30 sekund. Przy pojedynczym odtwarzaczu to garść drobnych żądań na minutę, ale w domu pełnym odtwarzaczy sumuje się to — miej to na uwadze przy obciążonej sieci Wi-Fi, a tam gdzie sieć jest zajęta, wybieraj odtwarzacze podłączone kablem.

Odtwarzanie losowe i powtarzanie

Odtwarzanie losowe włącza i wyłącza mieszanie kolejki. Mieszanie przebudowuje kolejkę; po wyłączeniu wraca pierwotna kolejność.

Powtarzanie to przełącznik trójstanowy — Bez powtarzania, Powtórz jeden i Powtórz wszystko. TapHome porządkuje te sloty odwrotnie niż API, a szablon stosuje to samo przemapowanie przy odczycie i przy zapisie, więc oba kierunki pozostają spójne.

Oba urządzenia odczytują swój stan z wartości, którą moduł zapisuje przy własnym 30-sekundowym odpytaniu stanu, zamiast wysyłać własne żądania. Ogranicza to ruch sieciowy, ale kosztuje nawet 30 sekund opóźnienia, zanim zmiana wprowadzona w aplikacji BluOS pojawi się w TapHome.

Presety

Preset przywołuje preset zapisany w odtwarzaczu — stację radiową, playlistę lub wejście. Presety można tworzyć i usuwać wyłącznie w aplikacji BluOS Controller; API potrafi je tylko wczytać.

Urządzenie działa tylko do zapisu: wysyła polecenie presetu, ale nigdy nie odczytuje z powrotem, który preset jest odtwarzany, więc przełącznik nie odzwierciedla rzeczywistego stanu odtwarzacza.

Używaj slotów presetów 1–9. Slot 0 wysyła identyfikator presetu 64 zamiast 0, co wygląda raczej na pozostawiony symbol zastępczy niż na rzeczywisty preset. Identyfikatory presetów nie muszą być kolejne — odtwarzacz może mieć presety 1, 2, 3, 5, 7 i 8 — dlatego sprawdź w aplikacji BluOS Controller, które identyfikatory faktycznie istnieją, zanim wepniesz slot w scenę.

Grupowanie multiroom

Grupuj z odtwarzaczem dołącza do tego odtwarzacza drugi odtwarzacz BluOS. Odtwarzacz adresowany przez TapHome staje się nadrzędny: wybiera źródło muzyki i rozprowadza swój dźwięk, natomiast odtwarzacz wskazany zmienną IP dołącza jako podrzędny. Wyłączenie urządzenia usuwa ten odtwarzacz z grupy. Stan jest odczytywany z listy dołączonych odtwarzaczy podrzędnych, więc grupowanie wykonane z aplikacji BluOS również jest widoczne w TapHome.

Ze sposobu działania grupowania w BluOS wynikają dwie konsekwencje:

  • Do reszty grupy docierają tylko wejścia zewnętrzne podłączone do odtwarzacza nadrzędnego. Jeśli dźwięk z telewizora przez wejście optyczne lub HDMI ma grać wszędzie, TapHome musi adresować odtwarzacz, do którego to wejście jest podłączone.
  • Aplikacja BluOS Controller obsługuje najwyżej osiem grup po osiem odtwarzaczy albo cztery grupy po szesnaście. Jeden przełącznik TapHome obsługuje jedną parę nadrzędny–podrzędny, więc grupa trzech odtwarzaczy wymaga drugiego przełącznika.

Żądania grupowania używają zapisu parametrów mieszającego liczbę pojedynczą i mnogą z API. W praktyce działa to, ponieważ port 11000 jest udokumentowaną wartością domyślną, ale warto o tym wiedzieć, gdyby któreś polecenie grupowania zachowało się nieoczekiwanie.

Przyciski przykładowe — demonstracje, a nie funkcje odtwarzacza

Szablon zawiera dwa przyciski o nazwach Przykład – Jungle i Przykład – Wyłączenie. Są to demonstracje strumieniowania z adresu URL, a nie możliwości odtwarzacza: każdy z nich zatrzymuje odtwarzanie, czyści kolejkę i odtwarza jeden plik dźwiękowy spod adresu zapisanego w zmiennej urządzenia.

Są przeznaczone do edycji lub usunięcia. Przykład Jungle wskazuje na zewnętrzny serwer z próbkami, poza kontrolą TapHome, i przestanie działać, gdy tamta strona się zmieni. Przykład Wyłączenie wskazuje na plik MP3 hostowany przez TapHome i jest użytecznym wzorcem dla dźwięku dzwonka lub komunikatu, jeśli podmienisz adres na własny — pamiętaj, że adres musi być zapisany w kodowaniu procentowym, ponieważ trafia do odtwarzacza bez zmian.

Rozwiązywanie problemów

Odtwarzacz nie odpowiada
  1. Otwórz w przeglądarce http://<ip_odtwarzacza>:11000/SyncStatus — odpowiedź w formacie XML oznacza, że odtwarzacz jest osiągalny, a API działa.
  2. Jeśli nie odpowiada, sprawdź adres na ekranie Diagnostics w aplikacji BluOS Controller; mogło go przesunąć odnowienie DHCP. Skonfiguruj opisaną wyżej rezerwację DHCP, aby przestało się to zdarzać.
  3. Spróbuj użyć nazwy hosta mDNS odtwarzacza zamiast adresu IP.
  4. Sprawdź, czy jednostka sterująca TapHome i odtwarzacz są w tej samej sieci / VLAN i czy nic nie blokuje między nimi portu 11000.
Przełącznik grupowania nigdy się nie włącza

Zmienna IP w urządzeniu Grupuj z odtwarzaczem wciąż zawiera symbol zastępczy 192.168.x.x albo adres, który nie należy do odtwarzacza BluOS. Ustaw ją na rzeczywisty adres odtwarzacza podrzędnego — zobacz konfigurację po imporcie powyżej.

Preset nic nie robi

Albo za danym slotem nie ma w tym odtwarzaczu żadnego presetu, albo użyto slotu 0. Otwórz aplikację BluOS Controller, sprawdź, które identyfikatory presetów odtwarzacz faktycznie posiada, i przypisz sloty TapHome do tych identyfikatorów. Presety trzeba najpierw utworzyć w aplikacji — szablon ich nie tworzy.

Następny / Poprzedni nic nie robią

Odtwarzacz nie gra ze swojej kolejki. Strumienie radiowe i wejścia fizyczne nie są oparte na kolejce, a przechodzenie naprzód i wstecz ich nie dotyczy. Uruchom odtwarzanie z playlisty, albumu lub kolejki, a przyciski znów zaczną działać.

Zmiany wprowadzone w aplikacji BluOS pojawiają się z opóźnieniem

Odtwarzanie losowe i powtarzanie są odczytywane z zapisanego stanu modułu, który odświeża się co 30 sekund. Głośność jest odpytywana częściej. Przyciski odtwarzania i Preset działają tylko do zapisu i w ogóle nie odzwierciedlają zmian zewnętrznych.

Odtwarzacz jest wyciszony, ale TapHome pokazuje poziom

Wyciszenie zapisuje się przy wyłączeniu ściemniacza głośności, ale stan wyciszenia nigdy nie jest odczytywany z powrotem. Odtwarzacz wyciszony z aplikacji BluOS Controller lub jego pilotem nadal pokazuje w TapHome poprzedni poziom ściemniacza. Wyłącz i ponownie włącz ściemniacz, aby zsynchronizować oba stany.

Dostępne urządzenia

Bluesound Moduł
Zmienne niestandardowe

Bluesound

Odczyt (moduł)
var response := SENDHTTPREQUEST("/Status");
shuffle := PARSEXML(response.Content, "//shuffle");
repeat := PARSEXML(response.Content, "//repeat");
Następny utwór Przycisk

Przechodzi do następnego utworu w kolejce odtwarzania; na końcu kolejki wraca do pierwszego utworu niezależnie od ustawienia powtarzania

button push

Następny utwór

Zapis stanu przycisku
SENDHTTPREQUEST("/Skip");
Głośność Ściemniacz

Głośność odtwarzacza — wyłączenie ściemniacza wycisza odtwarzacz zamiast ustawiać poziom na zero, a zmiana obejmuje wszystkie odtwarzacze w grupie

numeric Jednostka: % dimmer

Głośność

Odczyt poziomu
var response := SENDHTTPREQUEST("/Volume");
PARSEXML(response.Content, "//volume") / 100;
Zapis poziomu
if St
	SENDHTTPREQUEST("/Volume?level=" + round(Le*100) + "&tell_slaves=1");
else
	SENDHTTPREQUEST("/Volume?mute=1&tell_slaves=1");
end
Odtwarzanie losowe Przełącznik

Stan odtwarzania losowego kolejki — stan jest odczytywany z zapisanej w module wartości /Status, a zapis odbywa się przez HTTP

boolean switch
Wartości / Stany: ${shuffle} · ${noShuffle}

Odtwarzanie losowe

Odczyt stanu przełącznika
shuffle
Zapis stanu przełącznika
var response := SENDHTTPREQUEST("/Shuffle?state=" + St);
shuffle := PARSEXML(response.Content, "//playlist/@shuffle");
Powtarzanie Przełącznik wielowartościowy

Tryb powtarzania — bez powtarzania, powtarzanie jednego utworu lub powtarzanie całej kolejki

enum multi-value
Wartości / Stany: Bez powtarzania · Powtórz jeden · Powtórz wszystko

Powtarzanie

Odczyt stanu przełącznika
switch(repeat,0,2,1,1,0)
Zapis stanu przełącznika
var tmp := switch(Mu,0,2,1,1,0);
var response := SENDHTTPREQUEST("/Repeat?state=" + switch(Mu,0,2,1,1,0));
repeat := PARSEXML(response.Content, "//playlist/@repeat");
Pauza Przycisk

Przełącza między pauzą a odtwarzaniem — ponowne naciśnięcie przycisku wznawia odtwarzanie

button push

Pauza

Zapis stanu przycisku
SENDHTTPREQUEST("/Pause?toggle=1");
Poprzedni utwór Przycisk

Jeśli bieżący utwór jest odtwarzany dłużej niż cztery sekundy, uruchamia go od początku; w przeciwnym razie cofa się do poprzedniego utworu w kolejce

button push

Poprzedni utwór

Zapis stanu przycisku
SENDHTTPREQUEST("/Back");
Play Przycisk

Uruchamia odtwarzanie bieżącego źródła dźwięku — wznawia wstrzymany odtwarzacz, ale nie zatrzymany

button push

Play

Zapis stanu przycisku
SENDHTTPREQUEST("/Play");
Preset Przełącznik wielowartościowy

Ładuje preset zapisany w odtwarzaczu — stacje radiowe, playlisty i wejścia, tworzone wyłącznie w aplikacji BluOS Controller. Tylko do zapisu, więc przełącznik nie pokazuje, który preset jest odtwarzany

enum multi-value

Preset

Zapis stanu przełącznika
SENDHTTPREQUEST("/Preset?id=" + Mu);
Przykład – Jungle Przycisk

Demonstracja strumieniowania z adresu URL, a nie funkcja odtwarzacza — zatrzymuje odtwarzanie, czyści kolejkę i odtwarza jeden plik dźwiękowy ze skonfigurowanego adresu

button push
Zmienna: encodedURLZakodowany w formacie URL adres strumienia audio odtwarzanego przez ten przycisk. Domyślna wartość wskazuje na zewnętrzny serwer z próbkami i powinna zostać zmieniona

Przykład – Jungle

Zapis stanu przycisku
SENDHTTPREQUEST("/Stop");
SENDHTTPREQUEST("/Clear");
SENDHTTPREQUEST("/Play?url=" + encodedURL);
Przykład – Wyłączenie Przycisk

Druga demonstracja strumieniowania z adresu URL — zatrzymuje odtwarzanie, czyści kolejkę i odtwarza jeden plik dźwiękowy ze skonfigurowanego adresu

button push
Zmienna: encodedURLZakodowany w formacie URL adres strumienia audio odtwarzanego przez ten przycisk

Przykład – Wyłączenie

Zapis stanu przycisku
SENDHTTPREQUEST("/Stop");
SENDHTTPREQUEST("/Clear");
SENDHTTPREQUEST("/Play?url=" + encodedURL);
Grupuj z odtwarzaczem Przełącznik

Dołącza drugi odtwarzacz BluOS jako podrzędny element grupy — odtwarzacz sterowany z TapHome staje się nadrzędny i rozprowadza swój dźwięk. Po imporcie trzeba uzupełnić adres IP drugiego odtwarzacza

boolean switch
Wartości / Stany: ON · OFF
Zmienna: IPAdres IP odtwarzacza BluOS, który ma zostać dołączony jako podrzędny element grupy. Dostarczona wartość 192.168.x.x to symbol zastępczy i musi zostać zmieniona, w przeciwnym razie przełącznik pozostanie trwale wyłączony

Grupuj z odtwarzaczem

Odczyt stanu przełącznika
var response := SENDHTTPREQUEST("/SyncStatus");
var slaves := PARSEXML(response.Content, "//SyncStatus/slave/@id");
indexof(slaves, IP) >= 0
Zapis stanu przełącznika
if St
	SENDHTTPREQUEST("/AddSlave?slave=" + IP + "&ports=11000");
else
	SENDHTTPREQUEST("/RemoveSlave?slave=" + IP + "&ports=11000");
end
Stop Przycisk

Zatrzymuje odtwarzanie — w odróżnieniu od pauzy zatrzymanego odtwarzacza nie można wznowić przyciskiem Play

button push

Stop

Zapis stanu przycisku
SENDHTTPREQUEST("/Stop");
Połączenie: Packet Parser → HTTP • Hostname: {MODEL}-{MAC4}.local
Możliwe ulepszenia (17)
  • Long Polling — Holds the connection open and returns only when something changes. Would cut request volume substantially and is the mechanism the documented 30 s polling ceiling exists to make unnecessary. The template uses plain repeated GETs on 2.5 s / 10 s / 30 s intervals.
  • Now Playing Metadata — Playback state, three-line track description, album art URL, track length and elapsed seconds. The module already fetches /Status every 30 s but only extracts shuffle and repeat from it, so this would cost no extra requests.
  • Mute State (read) — The volume dimmer writes /Volume?mute=1 when switched off but never reads mute back, so a player muted from the BluOS app still shows its old dimmer level in TapHome.
  • Doorbell Chime — Plays the player's configured chime at its configured chime volume without touching the play queue. The most obviously useful addition for a smart home — the Sample buttons approximate it far more crudely by clearing the queue.
  • Direct Input Selection — Switches the player to a physical input by type and index — spdif, analog, coax, bluetooth, arc, earc, phono, computer, aesebu, balanced, microphone. Requires BluOS firmware 4.2.0 or newer; older firmware uses /Play?inputIndex=. Natural fit for a multi-value switch.
  • Input Discovery — Lists the inputs actually present on the player, including inputs shared by a BluOS HUB elsewhere on the network. HUB input selection is only supported through this route plus /Play?url=.
  • List Presets — Returns the real preset ids, names and artwork. Would let the Preset device show what it is actually switching between instead of a fixed 0–9 list.
  • Next / Previous Preset — Steps through presets without knowing their ids — two push buttons would cover it and would not depend on the ids matching.
  • Relative Volume Step — Volume up / down by a dB step (typical value 2 dB). Cheaper than the dimmer for wall-button control and does not need the current level to be read first.
  • Absolute dB Volume — Sets volume on the dB scale instead of the 0–100 percentage, which is what the player's configured volume range is actually expressed in.
  • Play Queue Management — List the queue, delete or move a track, save the queue as a named playlist. The template only uses /Clear, and only inside the two demo buttons.
  • Content Browsing and Search — Navigate and search music services, local library, playlists and inputs. A large surface that does not map naturally onto TapHome device models, but it is the reason the template has no way to choose what plays beyond presets.
  • Radio Station Actions — Skip, back, love and ban on streaming radio stations that do not use the play queue. This is what Next Track and Previous Track would need to fall back to when /Status carries a <streamUrl>.
  • Player Identity and Group Name — MAC address (the value a router DHCP reservation needs), player name, model, brand and the current group name. The grouping switch already fetches /SyncStatus every 30 s, so these would be free service attributes.
  • Battery Level — Present only on players with a battery pack, such as PULSE FLEX with the BP100 — state of charge in percent plus a charging flag.
  • Bluetooth Mode — Manual, Automatic, Guest or Disabled. Useful for locking guest access to a player from a scene.
  • Soft Reboot — The only POST endpoint in the API — the PacketParser HTTP module issues GETs, so this would need a different mechanism.

Źródła

Znalazłeś problem z tym szablonem urządzenia?

Napisz nam, co nie działa, czego brakuje lub jak powinien zachowywać się szablon. Twoja opinia pomaga nam utrzymać katalog dokładnym.

Zweryfikowane przez TapHome

Chcesz tego użyć w swoim TapHome Core?

Otwórz ten szablon w portalu klienta, aby zastosować go w swoim domu, lub zaproponuj modyfikację i wyślij ją z powrotem do katalogu.

Otwórz w portalu