
Co do struktury tematów to MQTT nie narzuca tutaj żadnego standardu i każdy robi jak chce.
W moim systemie struktura tematów zawiera nieco więcej informacji niż tylko sam adres urządzenia. A w zasadzie to samego adresu urządzenia nie zawiera, bo lepiej abstrahować od takich rzeczy jak adres fizyczny. Podobnie jak nie podaje się numerów IP w przeglądarce tylko nazwy domen.
U mnie wszystkie urządzenia(Hapcan, Philips Hue, inne zigbee, iRobot itp) jak i usługi softwarowe (monitoring użytkowników, kalendarze szkolne, system przetwarzania języka naturalnego, obsługa komunikatorów itp) mam ustrukturyzowane w podobny sposób.
Tematy MQTT określają tak naprawdę urządzenie czy usługę, jej typ, położenie w przestrzeni bądź domenie, nazwę itp. Dzięki temu łatwiej mi się w tym poruszać a prostymi zapytaniami w javascripcie mogę sobie wyłuskać informację np ze wszystkich termometrów czy świateł w mieszkaniu, niezależnie od tego czy na końcu siedzi Hapcan czy jakieś urządzenie zigbee.
Korzystam również z zigbee2mqtt, który te statusy urządzeń zwraca w postaci jakichś prostych tematów zdefiniowanych jako nazwy urządzeń ale to i tak tłumaczę sobie dalej na mój format.
Dokładny opis używanego przeze mnie formatu tematów opisany jest tutaj:
https://onixarts.pl/blog/2019/02/daria- ... a-tematow/
W skrócie, przykład takich tematów:
home/env/light/room1/walllight/status
home/env/light/room1/walllight/control
home/env/button/kitchen/leftwindow/status
home/env/blind/room2/window2/control
home/sys/service/eventgenerator/sun/status
home/sys/scene/room1/night/control
home/sys/service/notification/center/control
Nie twierdzę, że jest to najlepszy z możliwych sposobów zapisu ale się jego trzymam a dopóki wszystko u mnie trzyma się tego zapisu to jest git

.
W przypadku Hapcana miałem w planie zrobić taki bloczek do node-red na zasadzie zigbee2mqtt ale z nieco bardziej rozbudowaną konfiguracją tematów, tak aby każdy (w tym ja) mógł odtworzyć sobie strukturę jaką chce.
Natomiast docelowo prawdopodobnie załatwię sprawę prościej i dam możliwość użycia jednego bloczka obsługującego wiadomość typu X do wielu modułów. Uprości to znacząco konfigurację w samym node-redzie, zwłaszcza dla rozbudowanych sieci Hapcana a jednocześnie pozwoli mieć wpływ na to jakie dane faktycznie trafiają do MQTT.
Z mojego doświadczenia i serii zmian wynikło, że lepiej konwertować dane z urządzeń różnego typu na jeden wspólny format niż wrzucać surowe ramki do MQTT. Potem przykładowo ramka temperatury z Hapcana ma format zupełnie inny niż z zigbee a to nie powinno zupełnie interesować reszte systemu, gdyż koniec końców istotna jest informacja jaka temperatura panuje w pomieszczeniu. Lepiej wtedy odwołać się w identyczny sposób do danych z MQTT niż obsługiwać kilka różnych formatów np w warstwie wyświetlającej dane gdzieś na dashboardzie.
Obecnie każdy bloczek obsługuje jedno urządzenie Hapcan, więc w konfiguracji mapuję każdy kanał na odpowiedni temat MQTT i odwrotnie, każdy temat sterujący w MQTT mapuję na konkretny kanał w urządzeniu:
W przypadku kilku (nastu) modułów to jeszcze ma sens, aczkolwiek jeśli występują takie same moduły to wymagają powielania przepływów w node-redzie.
Zredukowanie tych wszystkich mapowań do jednego bloczka wymagałoby zapisania w jakiś inny sposób tego mapowania. Ze np channel 1 w module przekaźnika (2,1) to jest u mnie
home/env/switch/room1/rgbpower/status.
Można w jakiś sposób podać te mapowania w samym bloczku, ale stwierdziłem, że być może lepiej wykorzystać nazwy umieszczane w samych modułach przypisane do kanałów urządzenia oraz jego nazwę. Przykładowo temat mógłby być wtedy składany wg potrzeb z tych danych pobranych z urządzeń na etapie wykrywania urządzeń (funkcja discover). O ile w Node-red i tak lista urządzeń jest przechowywana w konfiguracji, o tyle moduł Tibbo/Ethernet musiałby również być świadomy istnienia wszystkich modułów i taką listę również przechowywać. A nie wiem jak tam z dostępną pamięcią na takie rzeczy.
Oczywiście najprościej zrobić na danych, które i tak mamy w ramce, czyli to co Jacku zaproponowałeś ale i tak na jakimś etapie będzie to musiało zostać skonwertowane na jakiś device w Home Assistant czy Node-Red. U mnie sam temat jest już jakby nazwą devica, więc optymalnie by było dostawać już gotowy temat skrojony do potrzeb.