1. Wprowadzenie
Matter to protokół łączności, który zapewnia niesamowite możliwości w zakresie rozwoju inteligentnych urządzeń. W ramach tego ćwiczenia w programie zbudujesz pierwsze urządzenie Matter przy użyciu zasobów z pakietu Matter SDK.
Aby dowiedzieć się więcej o standardzie Matter, odwiedź Centrum dla programistów Google Home lub stronę Connectivity Standards Alliance.
Czego się nauczysz
- Jak skonfigurować środowisko kompilacji Matter
- Jak utworzyć wirtualne urządzenie Matter, które działa na komputerze
- Jak uruchomić i sterować wirtualnym urządzeniem Matter za pomocą Google Home
Czego potrzebujesz
- Hub, czyli dowolne urządzenie Google Nest obsługujące standard Matter, takie jak Nest Hub (2 generacji).
- Komputer z systemem Linux z systemem okien X11.
- Dockera.
- Git.
- Podstawowa znajomość systemu Linux.
- Zakładamy, że powłoką wszystkich poleceń w tym ćwiczeniu z programowania jest BASH.
2. Konfigurowanie środowiska
Sprawdź sprzęt
Ta instalacja Dockera nie obsługuje komputerów z systemami Windows i macOS. W systemie macOS możesz ręcznie zainstalować i skompilować standard Matter.
W tych instrukcjach zakładamy też, że na komputerze z systemem Linux działa system okien X11. Jeśli na komputerze z systemem Linux działa Wayland, zainstaluj też X.Org.
Skonfiguruj środowisko programistyczne
- Zainstaluj Docker Engine (nie używaj Docker Desktop).
- Skopiuj pakiet Matter SDK i zanotuj używane w tym celu zatwierdzenie.
git clone https://github.com/project-chip/connectedhomeip.git cd connectedhomeip git show commit f2f3d0eb03ba5bea32b22f19982c402a8c1c9063
- Uruchom kontener kompilacji przy użyciu publicznych obrazów CI pakietu SDK i uruchom nowo skompilowane urządzenie wirtualne w tym kontenerze. Znajdź obraz, który ma pasować do naszej wersji SDK:
Jeśli używasz tego samego zatwierdzenia, zobaczysz komunikatbuildimage=$(grep chip-build .github/workflows/chef.yaml | head -n 1 | awk '{print $2}') echo $buildimage
ghcr.io/project-chip/chip-build:66
Najpierw przekieruj porty xhost, abyśmy mogli później użyć aplikacji interfejsu: Następnie uruchom kontener z odpowiednimi zasobami przekazanymi z hosta (naszym pakietem SDK do płatności, siecią i zasobami dotyczącymi wyświetlania/komunikacji).xhost local:1000
docker run -it --ipc=host --net=host -e DISPLAY --name matter-container --mount source=$(pwd),target=/workspace,type=bind --workdir="/workspace" $buildimage /bin/bash
Przyjrzyjmy się poleceniu dockera i opcjom, które do niego przekazaliśmy:
xhost local:1000
umożliwia systemowi X Window otrzymywanie połączeń od hosta lokalnego na porcie 1000, co pozwala na korzystanie z graficznego interfejsu użytkownika.docker run … image
uruchamia dany obraz, w razie potrzeby pobiera go z rejestru Dockera.--ipc=host
umożliwia Dockerowi udostępnianie przestrzeni nazw komunikacji między procesami maszynie hosta.--net=host
umożliwia Dockerowi wykorzystanie stosu sieciowego hosta wewnątrz kontenera, co jest wymagane do przekazywania ruchu mDNS z hosta do kontenera i udostępniania ekranu hosta X11.-e DISPLAY
eksportuje plik$DISPLAY
na hosta, aby umożliwić dostęp do interfejsu graficznego systemu. Jest to wymagane do uruchomienia narzędzia ZAP podczas edytowania klastrów Matter.-it
uruchamia Dockera z interaktywnym terminalem (tty), a nie jako procesem w tle.--mount
podłącza do kontenera pakiet SDK, który sprawdziliśmy wcześniej.- Podczas uruchamiania
--workdir
ustawia katalog roboczy na katalog podłączonych pakietów SDK.
Opcjonalnie możesz uruchomić drugą instancję sesji terminala:
user@host> docker exec -it matter-container /bin/bash $
Zatrzymywanie i uruchamianie kontenera Dockera Matter
Uruchamiając polecenie docker run
, tworzysz nowy kontener z określonym obrazem. Gdy to zrobisz, stare dane zapisane w poprzedniej instancji kontenera zostaną utracone. Czasami właśnie tak się dzieje, ponieważ umożliwia to rozpoczęcie od nowa instalacji. Czasami jednak wolisz zapisywać konfigurację miejsca pracy i środowiska między sesjami.
Dlatego po utworzeniu kontenera możesz go zatrzymać, aby nie stracić wprowadzonych danych.
user@host> docker stop matter-container
Gdy wszystko będzie gotowe do ponownego uruchomienia, uruchom kontener i otwórz okno terminala:
user@host> docker start matter-container user@host> docker exec -it matter-container /bin/bash
Możesz otworzyć dodatkowe sesje terminala w kontenerze, używając:
user@host> docker exec -it matter-container /bin/bash
Możesz też rozpocząć sesję główną za pomocą:
user@host> docker exec -u 0 -it matter-container /bin/bash
Wstępna konfiguracja standardu Matter
Inicjowanie pakietu SDK
Zainicjuj pakiet SDK Matter. Wykonanie tej operacji może potrwać kilka minut.
source scripts/bootstrap.sh python3 scripts/checkout_submodules.py --shallow --platform linux
Twój pakiet SDK Matter został zainicjowany. Aby w przyszłości szybko ponownie zainicjować środowisko, uruchom polecenie:
sudo docker exec -it matter-container /bin/bash source ./scripts/activate.sh
Udostępnianie plików między hostem a kontenerem
Wcześniej uzyskiwać dostęp do plików na hoście z poziomu kontenera przy użyciu uchwytu montowania powiązania. Możesz też zapisywać pliki w podłączonym katalogu z poziomu kontenera, aby mieć do nich dostęp z hosta.
Ogólnie rzecz biorąc, aby podłączyć bieżący katalog roboczy do kontenera w lokalizacji /workspace
, musisz uruchomić kontener z dodatkowym argumentem --mount source=$(pwd),target=/workspace,type=bind
.
user@host> docker run -it --ipc=host --net=host -e DISPLAY --name matter-container --mount source=$(pwd),target=/workspace,type=bind us-docker.pkg.dev/nest-matter/docker-repo/virtual-device-image:latest
Uprawnienia użytkownika kontenera do podłączonego katalogu muszą być zarządzane na hoście.
Pobierz z kontenera identyfikator grupy użytkownika kontenera.
$ id uid=1000(matter) gid=1000(matter) groups=1000(matter)
Otwórz inną sesję terminala na hoście kontenera i ustaw katalog roboczy na katalog podłączony przez kontener.
Rekursywnie ustawiaj grupę dla plików w podłączonych katalogu na grupę użytkownika kontenera.
user@host> sudo chgrp -R 1000 .
Przyznaj grupie odpowiednie uprawnienia w katalogu. Ten przykład nadaje grupie użytkownika kontenera uprawnienia do odczytu, zapisu i wykonywania we wszystkich plikach w podłączonym katalogu.
user@host> sudo chmod -R g+rwx .
Pamiętaj, że te polecenia nie mają wpływu na uprawnienia do nowych plików utworzonych przez użytkownika korzystającego z hosta. Pamiętaj, aby w razie potrzeby zaktualizować uprawnienia do nowych plików tworzonych na hoście.
Możesz dodać użytkownika hosta do grupy użytkownika kontenera, aby dziedziczyć uprawnienia do plików utworzonych przez tego użytkownika.
user@host> currentuser=$(whoami) user@host> sudo usermod -a -G 1000 $currentuser
3. Konsola programisty Google Home
Konsola programisty Google Home to aplikacja internetowa, w której możesz zarządzać integracją standardu Matter z Google Home.
W ekosystemie Google Home działa każde urządzenie Matter, które otrzymało certyfikat Connectivity Standards Alliance (Alliance) Matter. Urządzenia będące w trakcie opracowywania, które nie mają certyfikatu, można w określonych warunkach przekazywać w ekosystemie Google Home. Więcej informacji znajdziesz w sekcji Ograniczenia parowania.
Tworzenie projektu programisty
Najpierw otwórz konsolę programisty Google Home:
- Kliknij Utwórz projekt.
- Wpisz unikalną nazwę projektu i kliknij Utwórz projekt.
- Kliknij + Dodaj integrację. Otworzy się ekran Zasoby dotyczące spraw, na którym możesz wyświetlić dokumentację programowania standardu Matter i poczytać o niektórych narzędziach.
- Aby przejść dalej, kliknij Dalej: Programowanie. Wyświetli się strona Lista kontrolna do spraw.
- Kliknij Dalej – konfiguracja.
- Na stronie Konfiguracja wpisz nazwę usługi.
- Kliknij Wybierz typ urządzenia i wybierz typ urządzenia z menu (w tym przypadku
Light
). - W polu Identyfikator dostawcy (VID) wybierz Test VID (Testuj identyfikator VID) i wybierz 0xFFF1 z menu Testuj identyfikator VID. W polu Identyfikator produktu (PID) wpisz 0x8000 i kliknij Zapisz i kontynuuj, a następnie na następnej stronie kliknij Zapisz. Użyj tych dokładnych wartości VID/PID. Zależą od nich późniejsze kroki ćwiczeń w Codelabs.
- Teraz zobaczysz swoją integrację w sekcji Integracje spraw.
- Zrestartuj centrum, aby mieć pewność, że otrzymało najnowszą konfigurację projektu integracji ze standardem Matter. Jeśli później będzie konieczna zmiana identyfikatora VID lub PID, trzeba będzie zrestartować projekt po zapisaniu projektu, aby zmiana zaczęła obowiązywać. Szczegółowe instrukcje znajdziesz w artykule Ponowne uruchamianie urządzeń Google Nest lub Google Wifi.
4. Zbuduj urządzenie
Wszystkie przykłady ze standardu Matter znajdują się w folderze examples
w repozytorium GitHub. Dostępnych jest kilka przykładów, ale to ćwiczenia z programowania skupiamy się na pracy szefa kuchni.
Szef kuchni to:
- Przykładowa aplikacja z interfejsem terminala z funkcjami pakowania, które można też znaleźć w aplikacji
examples/shell
. - skrypt uwzględniający zasadę stosowania konwencji i konfiguracji obejmującej kilka typowych zadań niezbędnych do opracowania urządzenia obsługującego standard Matter.
Przejdź do przykładowego folderu Chef i utwórz swoją pierwszą kompilację Matter:
$ cd examples/chef $ ./chef.py -zbr -d rootnode_dimmablelight_bCwGYSDpoe -t linux
Kucharz ma kilka opcji, które można wyświetlić, uruchamiając chef.py -h
. Używamy tych opcji:
-d
: określa typ urządzenia, którego chcesz użyć. W tym przypadku tworzymy aplikację oświetleniową z elementami umożliwiającymi włączanie i wyłączanie oświetlenia oraz regulację poziomu.-z
: wywołuje narzędzie ZAP, aby wygenerować pliki źródłowe implementujące typ urządzenia. Oznacza to, że na podstawie wybranego przez Ciebie oświetlenia ZAP automatycznie utworzy kod do włączenia w kompilacji, która określa światło (model danych) i sposób jego interakcji z innymi urządzeniami (model interakcji).-b
: kompilacje.-r
: [opcjonalnie] włącza serwer RPC na urządzeniu wirtualnym Matter, aby inne komponenty (takie jak GUI) mogły komunikować się z urządzeniem w celu ustawiania i pobierania atrybutów modelu danych.-t linux
: platforma docelowa. Platformy pomocy tolinux
,nrfconnect
iesp32
. Aby zobaczyć wszystkie dostępne polecenia i obsługiwane platformy docelowe, możesz uruchomić polecenie./chef.py -h
. W przypadku wirtualnych urządzeń Matter używana jest usługalinux
.
Uruchamianie urządzenia
Sprawa używa portu TCP/UDP 5540, więc jeśli na komputerze działa zapora sieciowa, wyłącz ją lub zezwól na przychodzące połączenia TCP/UDP na porcie 5540.
Uruchom urządzenie wirtualne w kontenerze za pomocą:
$ ./linux/out/rootnode_dimmablelight_bCwGYSDpoe [1648589956496] [14264:16538181] CHIP: [DL] _Init] ... [1648562026.946882][433632:433632] CHIP:SVR: SetupQRCode: [MT:Y3.13Y2N00KA0648G00] [1648562026.946893][433632:433632] CHIP:SVR: Copy/paste the below URL in a browser to see the QR Code: [1648562026.946901][433632:433632] CHIP:SVR: https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%3AY3.13Y2N00KA0648G00 [1648562026.946915][433632:433632] CHIP:SVR: Manual pairing code: [34970112332]
Nie wyłączaj urządzenia. Teraz skupimy się na aplikacji Google Home, aby umożliwić nam skonfigurowanie Twojego urządzenia w Google Home.
Zatrzymaj urządzenie
Jeśli chcesz zatrzymać urządzenie, możesz zamknąć program, naciskając CTRL+C. Jeśli aplikacja nie zostanie zamknięta, trzeba również nacisnąć CTRL+\.
Dane logowania do urządzenia wirtualnego są przechowywane w katalogu /tmp/
w plikach zaczynających się od prefiksu chip
.
Jeśli chcesz powtórzyć cały proces uruchamiania od początku, musisz usunąć te pliki, uruchamiając to polecenie:
$ rm /tmp/chip*
5. Przekaż urządzenie
Uwaga: ten krok powiedzie się tylko wtedy, gdy Twój projekt jest już skonfigurowany w konsoli programisty Google Home.
Nest Hub
Aby uruchomić urządzenie na tkaninie Matter, musisz mieć centrum. Jest to urządzenie Google Nest, takie jak Nest Hub (2 generacji), które obsługuje standard Matter i służy zarówno jako router brzegowy w przypadku urządzeń obsługujących Thread, jak i lokalna ścieżka realizacji do kierowania intencji inteligentnego domu.
Na tej liście możesz sprawdzić, które centra obsługują standard Matter.
Przed rozpoczęciem procesu uruchamiania upewnij się, że:
- Centrum jest sparowane z tym samym kontem Google, którego używasz do logowania się w konsoli Google Home.
- Centrum jest w tej samej sieci Wi-Fi co komputer, którego używasz do uruchomienia urządzenia wirtualnej sprawy.
- Centrum jest w tej samej strukturze, której używasz w aplikacji Google Home. („Dom” na Grafie Google Home reprezentuje Twoją strukturę).
Uzyskaj kod QR
Proces uruchamiania wymaga danych rejestracyjnych Matter za pomocą kodu QR. Sprawdź dane wyjściowe w konsoli aplikacji Matter zawierające link do kodu QR odpowiedniego do uruchomienia.
Wykonaj operację prowizji
- Otwórz aplikację Google Home.
- W lewym górnym rogu kliknij +.
- Kliknij Skonfiguruj urządzenie.
- Kliknij Nowe urządzenie.
- Wybierz dom i kliknij Dalej.
- Aplikacja Google Home wyszuka urządzenie. Jeśli pojawi się komunikat „Znaleziono urządzenie z Androidem...”, kliknij „Tak”. W przeciwnym razie kliknij Skonfiguruj inne urządzenie, a potem z listy urządzeń wybierz Urządzenie z problemem.
- Skieruj aparat na kod QR urządzenia lub kod QR wygenerowany przez stronę.
- Kontynuuj proces parowania zgodnie z instrukcjami w aplikacji Google Home.
Po wykonaniu tych czynności urządzenie wirtualne Matter powinno zostać oddane do użytku i powinno pojawić się jako nowa ikona w aplikacji Google Home.
Rozwiązywanie problemów
Prowizje kończą się niepowodzeniem i występuje „problem z połączeniem” lub „Nie można skontaktować się z Google” komunikaty o błędach
- Sprawdź, czy w konsoli Google Home został utworzony projekt z prawidłową kombinacją identyfikatora VID i PID oraz czy nie masz innych projektów korzystających z tej samej kombinacji identyfikatorów VID i PID.
Przekazywanie dalej się nie udaje, gdy „Skanujesz urządzenie” na długi okres
- Upewnij się, że zapora sieciowa komputera jest wyłączona i że korzystasz z urządzenia wirtualnego.
- Odłącz wszystkie interfejsy sieci fizycznej (Ethernet), aby komputer mógł korzystać wyłącznie z sieci Wi-Fi.
6. Steruj urządzeniem
Gdy urządzenie obsługujące standard Matter zostanie oddane do użytku i pojawi się w aplikacji Google Home jako żarówka, możesz przetestować sterowanie urządzeniem na różne sposoby:
- za pomocą Asystenta Google.
- W aplikacji Google Home.
Asystent Google
Użyj Asystenta Google na telefonie lub koncentratorze, aby przełączać stan urządzenia za pomocą poleceń głosowych, takich jak „OK Google, przełącz światło”.
Więcej przykładów poleceń znajdziesz w sekcji Sterowanie inteligentnymi urządzeniami domowymi za pomocą poleceń głosowych w artykule Sterowanie inteligentnymi urządzeniami domowymi dodanymi do aplikacji Google Home.
Aplikacja Google Home
Możesz kliknąć etykiety Wł. i Wył. obok ikony żarówki widocznej w aplikacji Google Home.
Więcej informacji znajdziesz w sekcji Sterowanie urządzeniami za pomocą aplikacji Google Home w artykule Sterowanie inteligentnymi urządzeniami domowymi dodanymi do aplikacji Google Home.
7. Gratulacje!
Udało Ci się utworzyć pierwsze urządzenie Matter. Świetnie!
Dzięki temu ćwiczeniu w programie omówiliśmy, jak:
- Zainstaluj środowisko programistyczne Matter.
- Tworzenie i uruchamianie urządzenia wirtualnego ze standardem Matter.
- Przekaż urządzenie wirtualne i steruj nim z poziomu Google Home.
Aby dowiedzieć się więcej o standardzie Matter, zapoznaj się z tymi materiałami:
- Matter Primer (Informacje podstawowe) w Centrum dla programistów Google Home, w którym poznasz podstawowe informacje na temat standardu Matter.
- Specyfikacja Matter, Biblioteka urządzeń Matter i Biblioteka klastrów aplikacji Matter opublikowane przez Connectivity Standards Alliance.
- repozytorium Sprawy na GitHubie.