Matter dla Mobilus Cosmo GTW

Witam,

Przez ostatnie miesiące pracowałem nad projektem dla urządzenia Mobilus Cosmo GTW, którego celem jest dodanie wsparcia dla standardu Matter. Chciałem w bardziej uniwersalny sposób zarządzać urządzeniami podłączonymi do Cosmo GTW za pomocą Apple HomeKit czy też Home Assistant. Standard Matter doskonale rozwiązuje ten problem.

Dla tych, którzy nie mieli jeszcze styczności z Matter - to otwarty standard komunikacji dla urządzeń smart home, mający na celu zapewnienie kompatybilności niezależnie od ekosystemu. Urządzenia z logo Matter można podłączyć m.in. do Apple HomeKit, Home Assistant, Google Home, itd. o ile dany system wspiera standard Matter.

Aplikacja mobmatter została oparta na oficjalnym Matter SDK i działa bezpośrednio na samym Cosmo GTW. Komunikuję się on z głównym procesem mobilus po MQTT. Obecnie aplikacja wspiera tylko rolety: Senso (eg. siłowniki ERS), Cosmo oraz C-MR. Jako, że sam posiadam rolety z siłownikami ERS, najlepiej przetestowany jest Senso. Cosmo oraz C-MR nie miałem możliwości zweryfikować w praktyce, ale ze względu na w miarę podobną zasadę działania powinny również działać.

Dzięki temu, że Mobilus używa zdarzeń do raportowania o zmianach stanów urządzeń, aplikacja automatycznie przekazuje to dalej, tym samym mając natychmiastowe aktualizacje o stanie urządzeń w podłączonych systemach.

link do repozytorium

Instalacja

Do zainstalowania mobmatter wymagany jest dostęp SSH, jak go aktywować tutaj. Również upewnij się, że wersja oprogramowania Twojego Cosmo GTW jest przynajmniej 0.1.7.8.

Po połączeniu się z urządzeniem, uruchom poniższe polecenie w celu przeprowadzenia instalacji runtime, które posłuży do odpalenia mobmatter:

wget --no-check-certificate -qO- https://raw.githubusercontent.com/piku235/mobgtw-runtime/main/install.sh | sh

Teraz, możesz zainstalować mobmatter taką prostą komendą:

/opt/jungi/bin/pkg install mobmatter

Odpowiednio dostosuj dane logowania do Mobilus jeżeli używasz innych danych logowania niż te domyślne w Cosmo GTW:

vim /opt/jungi/etc/mobmatter.conf

Po dokonanych zmianach w mobmatter.conf wykonaj komendę do przeładowania usługi:

/etc/init.d/mobmatter reload

Aby sprawdzić czy mobmatter poprawnie działa możesz zobaczyć log usługi:

logread -e matter

Po pierwszym uruchomieniu aplikacja znajduję sie tzw. trybie commissioning. Jest to tryb, który pozwala na sparowanie urządzenia. Tryb ten zostanie automatycznie zamknięty po pierwszym pomyślnym sparowaniu.

Tryb parowania można przeprowadzić na 2 sposoby: QR albo kod manualny.

kod: 21693312337 lub 20202021

Cześć.

Ta komunikacja mqtt może być użyta do zewnętrznego brokera, nie jako matter? Mam Loxone z Loxberry i póki co matter jest nie do końca obsługiwany, ale mqtt jak najbardziej.
Czy trzeba jeszcze jakiś dodatkowy Matter MQTT Bridge?

Hey, komunikacja po MQTT z Mobilus jak najbardziej może zostać użyta do integracji z innymi systemami, ale wymaga to jego mocnej konfiguracji jako, że komunikacja z Mobilus po MQTT jest dość specyficzna i każda wiadomość jest dodatkowo szyfrowana. Podpięcie tego na zasadzie plug&play jest niemożliwe bez dodatkowego oprogramowania, które by tą komunikację obsługiwało.

Sam Matter Bridge działa tylko wyłącznie w standardzie Matter, więc w większości hub jest wymagany do jego działania, żeby już móc podłączyć Cosmo GTW do HomeKit, Home Assistant i innych. Sporo już hub’ow samo w sobie obsługuje standard Matter: HomePod, Apple TV, Aqara Hub M3 itd.

Podsumowując, żeby podłączyć Cosmo GTW po samym MQTT to i tak wymagany byłby dodatkowy software w stylu MQTT Bridge, który tłumaczyłby komunikację, aby móc ją w Twoim wypadku podpiąć do Loxone z Loxberry.

Ok, rozumiem.

Niestety jestem trochę słabszy w software niż w hardware, pytanie mam czy skoro Cosmo GTW ma w sobie OpenWRT czyli linux to może jest możliwa instalacja Matter MQTT Bridge - GitHub - canonical/matter-mqtt-bridge i publikację topiców przez Cosmo bez dodatkowego huba?

Aa, ok, czyli dodatkowa aplikacja która by tłumaczyła komendy/atrybuty z Matter na pewien schemat MQTT, działając razem ze stworzoną przeze mnie aplikacją. Teoretycznie jest to jak najbardziej możliwe.

Patrząc na projekt, który podesłałeś na pierwszy rzut oka wyglada obiecująco. Opiera się o ten sam oficjalny Matter SDK na którym spoczywa również moja aplikacja. Idąc głębiej, niestety już widzę pierwsze problemy tego projektu. Patrząc w kod, wspiera ona wyłącznie urządzenia typu światło (funkcja on/off), więc z roletami i tak nie zadziała, wymagane jest wsparcie window covering cluster (wszelkie urządzenia typu zasłony okienne itp.).

Druga kwestia, ten projekt definiuje na stałe w kodzie urządzenia, które obsługuje, więc nie potrafi on gadać na zasadzie dynamicznego rejestrowania urządzeń w trakcie działania, opiera się o przykład z Matter SDK na którym sam się uczyłem i definiuje na stałe w kodzie jakie urządzenia wspiera. Na dłuższą mete nie tędy droga.

Ostatnią kwestią jest jakiego schematu wiadomości MQTT spodziewa się otrzymać Loxone z Loxberry? MQTT jest jedynie protokołem transportowym, tak jak HTTP/HTTPS jest dla przeglądarek i serwerów serwujących strony www. Kwestią jest jakiego rodzaju dokumentu użyje serwer http, aby przeglądarka zrozumiała co ma zrobić, czy wyświetlić stronę internetową (HTML), czy może pobrać plik z serwera. Podobnie jest z MQTT, nie determinuje ona sposobu jak mają wyglądać poszczególne wiadomości i jakiego rodzaju mają być topic’ki. Definiuje jedynie abstrakcyjne pojęcia tj. topic, QoS, wiadomości, itd., tak aby developer miał pełnie możliwości na jego zaadaptowanie.

Wracając do Twojego pytania, mając aplikację typu, która tłumaczy rzeczy z Matter na MQTT jak najbardziej ma sens, lecz projekt, który podesłałeś nie umożliwia podpięcia go z roletami.

Ok, dziękuje za wyczerpująca odpowiedź.

Co do Loxberry to on jest brokerem (Mosquito), na nim tworzymy topic’ki i do niego publikujemy i subskrybujemy, potem każda zmiana leci do Miniservera Loxone po HTTP lub UDP.

Nie ma problemu. :slight_smile:

Ogólnie tego rodzaju aplikacja jest bardzo prosta do napisania, posiadam już przez siebie napisaną bibliotekę do komunikacji z Cosmo GTW po MQTT: link. Niepotrzebnie, a wręcz nieoptymalne by było tłumaczyć z Matter na MQTT, gdzie tutaj Matter gada po MQTT z Mobilus, żeby właśnie tłumaczyć wszelkie eventy czy komendy na Matter. W tym przypadku wystarczy tłumaczyć MQTT z Mobilus na MQTT, które spełniłby schemat topic’ow i wiadomości na docelowy. W oparciu o moją bibliotekę jest to już mały wysiłek, jako iż, ona głównie tłumaczy cały ruch na zrozumiałe wiadomości (szyfrowanie oraz proto messages).

Mógłbym się testowo podjąć tego, ale niczego nie obiecuję. Przede wszystkim musiałbym wiedzieć jak miałyby wyglądać mniej więcej topici i jakiego rodzaju miałybyć wiadomości? JSON, czy plaintext?

O ile się nie mylę to my możemy się dostosować do tego jakie topic’ki lecą do/z Cosmo bo w loxberry je sobie zdefiniujemy. Tu jest więcej Widget MQTT [LoxBerry Wiki - BEYOND THE LIMITS]

Ok, czyli taka prosta opcja, to mega ułatwia. Jedyna kwestia to schemat wiadomości, ponieważ sam Mobilus korzysta z Google protobuf, czyli binarnie zakodowanych wiadomości oparte o prototyp (schemat) wiadomości. Żeby było to w czytelnym, łatwo dekodowalnym formacie to polecam JSON, który obecnie jest bodajże już wszędzie, głównie web.

Ok, niestety jestem w tym zielony, jak mam tutorial to sobie radzę, ale tak to niewiele rozumiem :wink:
Póki co nie wiem nawet jak zainstalować Twoja bibliotekę, muszę dużo doczytać :joy:

Spokojnie, każdy gdzieś zaczynał. :slight_smile:

Odnośnie:

Co do Loxberry to on jest brokerem (Mosquito), na nim tworzymy topic’ki i do niego publikujemy i subskrybujemy, potem każda zmiana leci do Miniservera Loxone po HTTP lub UDP.

Z tego rozumiem, że to co Loxberry dostanie po MQTT leci na HTTP/UDP do Loxone. Moje pytanie jest takie, jak Loxone dostanie po HTTP/UDP to co on z tą informacją robi? Jak to wygląda? Pytam, bo nie znam tej platformy, a jako ze z natury jestem programista muszę znać odpowiedź na każdy drobny szczegół, żebym mógł to później przekuć na kod.

Loxone programuje się przez Loxone config, bloczkami. Najprościej rzecz ujmując mamy wejścia do bloczku, najczęściej są to wartości, 1/0, 0-1 oraz wyjścia na które wystawiamy polecenia/wartości .
Przykładowo żeby roleta pojechała do góry w bloczku Loxone przy poleceniu do ruchu w dół publikowalibyśmy publish send/to/this/topic up

Bardzo chętnie podepnę się pod rozmowę

tu jest trochę dokumentacji LOXONE i jego MQTT

Pracę nad MQTT link pomiędzy Cosmo GTW a innym broker MQTT są już prawie na końcu. Tutaj @janosick odegrał rolę pierwszego testera i wygląda wszystko obiecująco, aczkolwiek testowany na Loxberry z Loxone.

Patrząc na tego doca z Loxone potrzebny jest działający MQTT broker, gdzie Loxberry pełni tutaj taką rolę, aczkolwiek, może to też działać w oparciu o sam Cosmo GTW, jako, że on również ma swój własny MQTT broker - Mosquitto, lecz będzie wymagać to więcej kroków, żeby również wgrać gotową binarke na samego Cosmo GTW.

Jeżeli jesteś zainteresowany testami to napisz mi na priv. Pierwszą wersję planuję opublikować już niebawem w nowym wątku.

Czyli mam rozumieć że cosmo GTW wysyła i odbiera polecenia MQTT

Dokładnie tak,
Ogólnie Cosmo GTW działa na Hi-Link HLK-7688A który z kolei działa na już starym OpenWRT 15.05.1. Proces mobilus, który zarządza wszystkimi operacjami na GTW łączy się lokalnie z Mosquitto MQTT broker i tam publikuję stany urządzeń oraz odbiera komendy.

Do Cosmo GTW można się podłączyć w każdym momencie dowolnym klientem MQTT jak MQTTX, lecz w jego surowej postaci działają tylko dwa topicki: clients oraz każdy osobno dla podłączonego klienta. Każda wiadomość w tych topic’ach jest zaszyfrowaną wiadomością z Google protobuf, więc nie ma możliwości jej normalnego odczytania.

Z tego powodu powstał właśnie moblink, który tłumaczy wszystkie zaszyfrowane wiadomości w GTW na schemat topic’ow i wiadomości, które są proste do odczytania.

ok.

a jak z dostępnością mobilink`a

a kojarzysz jak cosmo GTW integruje się HA

Pierwszą wersję moblink wydam pewnie w tym tyg.

Cosmo GTW integruję się bardzo prosto, czy to w HA, czy to w Apple HomeKit, o tym jest ten cały wątek oraz aplikacja mobmatter. :slight_smile: Wymogiem tylko jest posiadanie “huba”, który będzie pełnił rolę Matter controller’a, lecz w przypadku HA, sam HA jest kontrolerem Matter, więc on tego nie wymaga, jedynie posiadanie zainstalowanej wtyczki Matter dla HA i później dodanie GTW jak każde inne urządzenie.

1 polubienie

Mogę już ogłosić pierwszą wydaną wersję moblink v0.1.0, nowy wątek tutaj.

1 polubienie

Dzięki, super integracja.
Ustawienie pozycji z automatycji też jest możliwe:)

1 polubienie