Urządzenia MQTT mogą już korzystać z urządzeń podrzędnych, czyli modelu, który Home Assistant wprowadził dla produktów złożonych z kilku części. Zmiana autorstwa Jana Bouwhuisa, scalona z gałęzią rozwojową 26 października 2026, dodaje encjom MQTT opcję child_device. Poprawka uzupełniająca, scalona tego samego wieczoru, jest już przypisana do wersji beta 2026.11.
Co się zmienia na przykładzie listwy zasilającej
Weźmy listwę z osobno włączanymi gniazdami i pomiarem mocy dla całości. Do tej pory w MQTT można było zebrać wszystko na jednym urządzeniu albo utworzyć osobne urządzenie dla każdego gniazda i powiązać je z listwą przez via_device. Teraz listwa jest urządzeniem nadrzędnym, a każde gniazdo urządzeniem podrzędnym, na przykład „Outlet 1”. Producent i model zostają przy listwie, a urządzenie podrzędne ma tylko identyfikatory i nazwę. Obowiązują te same zasady co w innych integracjach: urządzenie podrzędne trafia do obszaru rodzica, dopóki go nie przeniesiesz, a usunięcie rodzica usuwa też jego urządzenia podrzędne.
Trzy sposoby konfiguracji
- W YAML i przy wykrywaniu pojedynczych komponentów dodajesz sekcję
child_device(w skróciecdev) wewnątrz blokudeviceencji. Urządzenie zdevicestaje się rodzicem, a encja trafia do urządzenia podrzędnego. Urządzenie podrzędne przyjmuje tylko wymaganeidentifiersorazname. - Przy wykrywaniu całych urządzeń komunikat w temacie
homeassistant/device/<id>/configdostaje listęchild_devices(cdevs). Każde urządzenie podrzędne ma własne identyfikatory, nazwę icomponents(cmps), a encje samego rodzica zostają w głównymcomponents. Identyfikatory komponentów muszą być unikalne w obrębie rodzica i wszystkich jego urządzeń podrzędnych, a identyfikatory urządzenia podrzędnego muszą się różnić od identyfikatorów rodzica. - Encja z urządzeniem podrzędnym musi mieć
unique_id. Bez niego Home Assistant pomija cały blokdeviceencji. Tę zmianę niezgodną wstecz scalono osobno, również do wersji 2026.11.
Wyzwalacze urządzeń i tagi nie obsługują urządzeń podrzędnych.
Co warto wiedzieć o działaniu
Gdy komunikat wykrywania zmienia urządzenie encji, z urządzeniem podrzędnym lub bez, encja od razu przechodzi do nowego urządzenia, a Home Assistant sprząta stare, jeśli nic innego z niego nie korzysta. Wcześniej przeniesienie następowało dopiero po przeładowaniu albo restarcie. Rodzica, który ma jeszcze urządzenia podrzędne, to sprzątanie nie usuwa. Znika on dopiero razem z ostatnim z nich.
Usunięcie urządzenia podrzędnego w Home Assistancie nie czyści tematu wykrywania, bo to skasowałoby też rodzica i pozostałe urządzenia podrzędne. Home Assistant zapisuje ostrzeżenie w dzienniku, a urządzenie wraca z następnym komunikatem wykrywania, chyba że mostek publikujący dane usunie je z treści. Usunięcie rodzica nadal czyści temat.
Jeśli jako urządzenie podrzędne posłuży istniejące urządzenie o tych samych identyfikatorach, rejestr urządzeń je przekształci i zachowa jego identyfikator, więc automatyzacje, które na nie wskazują, dalej będą działać.
Poprawka uzupełniająca usuwa dwa przypadki brzegowe. Usunięcie bloku device w komunikacie wykrywania od razu odłącza encję od urządzenia, a komponent, który nie jest słownikiem, na przykład "cmps": {"sw": null}, wywołuje teraz zwykłe ostrzeżenie o błędnym komunikacie zamiast błędu TypeError. Zmiana w dokumentacji 27 października wciąż czekała na scalenie.