Lưu ý! Chương trình dùng thử dành cho nhà phát triển mới sắp ra mắt. Hãy đăng ký tại đây và trở thành một trong những người đầu tiên dùng thử các công cụ mới cũng như đưa ra ý kiến phản hồi.

Xây dựng một thiết bị ảo có vai trò quan trọng

1. Giới thiệu

Vấn đề là một giao thức kết nối mang lại những cơ hội thú vị cho sự phát triển của thiết bị thông minh. Trong lớp học lập trình này, bạn sẽ xây dựng thiết bị Matter đầu tiên bằng cách sử dụng các SDK và phần phụ thuộc được cung cấp cho bạn trong hình ảnh Docker được định cấu hình sẵn.

Để tìm hiểu về Matter, hãy truy cập vào Trung tâm nhà phát triển của Google Home hoặc trang web của Tiêu chuẩn kết nối liên minh.

Kiến thức bạn sẽ học được

  • Cách thiết lập môi trường tạo bản dựng Matter
  • Cách xây dựng thiết bị Matter ảo chạy trên máy tính của bạn
  • Cách uỷ quyền và điều khiển thiết bị Matter trên Google Home

Bạn cần có

  • Một trung tâm, là mọi thiết bị Google Nest hỗ trợ Matter, chẳng hạn như Nest Hub (thế hệ thứ 2). Bạn có thể mua một trung tâm tại Google Store hoặc tại nhà bán lẻ mà bạn muốn.
  • Một máy Linux chạy hệ thống cửa sổ X11.
  • Docker.
  • Có kiến thức cơ bản về Linux.

2. Thiết lập môi trường

Chúng tôi sẽ sử dụng vùng chứa Docker được định cấu hình trước đó trên máy chủ Linux. Vùng chứa này bao gồm tất cả phần phụ thuộc cần thiết để tạo và chạy thiết bị ảo Matter.

Kiểm tra phần cứng của bạn

Máy tính Windows và MacOS hiện không được cài đặt Docker này. Bạn có thể tự cài đặt và xây dựng Matter trên MacOS hoặc Windows.

Ngoài ra, những hướng dẫn này giả định rằng máy Linux của bạn đang chạy hệ thống cửa sổ X11. Nếu máy Linux của bạn chạy Wayland, hãy đảm bảo là bạn cũng cài đặt cả X.Organization.

Thiết lập Docker

  1. Cài đặt Docker Engine (không sử dụng Docker Desktop).
  2. Kéo hình ảnh Docker từ Docker Hub. Trong cửa sổ dòng lệnh, hãy chạy:
    user@host> docker pull us-docker.pkg.dev/nest-matter/docker-repo/virtual-device-image:latest
    
    Thao tác này có thể mất vài phút để hoàn tất.
  3. Khởi động vùng chứa Docker đang chạy:
    user@host> xhost local:1000
    user@host> docker run -it --ipc=host --net=host -e DISPLAY --name matter-container us-docker.pkg.dev/nest-matter/docker-repo/virtual-device-image:latest
    

Sau khi khởi động vùng chứa, bạn sẽ thấy một số kết quả chẩn đoán, theo sau là một thông báo xác nhận rằng cấu hình vùng chứa của bạn là chính xác và cuối cùng là lời nhắc shell:

Environment looks good, you are ready to go!
$

Hãy tìm hiểu lệnh Docker và các tuỳ chọn mà chúng ta chuyển đến đó:

  • xhost local:1000 cho phép Hệ thống cửa sổ X nhận kết nối từ máy chủ cục bộ trên cổng 1000, do đó cho phép sử dụng giao diện người dùng đồ họa.
  • docker run … image chạy hình ảnh đã cho, lấy hình ảnh đó từ sổ đăng ký Docker nếu cần.
  • --ipc=host cho phép Docker chia sẻ không gian tên giao tiếp liên quy trình với máy chủ của bạn.
  • --net=host cho phép Docker sử dụng ngăn xếp mạng của máy chủ bên trong vùng chứa. Việc này là bắt buộc để truyền lưu lượng mDNS từ máy chủ đến vùng chứa và chia sẻ màn hình máy chủ X11.
  • -e DISPLAY xuất $DISPLAY sang máy chủ, cung cấp quyền truy cập vào giao diện đồ hoạ hệ thống của bạn. Đây là yêu cầu bắt buộc để chạy công cụ ZAP khi chỉnh sửa cụm Cụm vấn đề.
  • -it chạy Docker bằng một thiết bị đầu cuối tương tác (tyty), thay vì một quy trình trong nền.

Nếu muốn, bạn có thể chạy phiên bản thiết bị đầu cuối thứ hai:

user@host> docker exec -it matter-container /bin/bash
$

Dừng và khởi động vùng chứa Matter Docker

Bất cứ khi nào chạy lệnh docker run, bạn sẽ tạo một một vùng chứa mới có hình ảnh được chỉ định. Khi bạn làm như vậy, dữ liệu cũ (đã được lưu trên một phiên bản vùng chứa trước đó) sẽ bị mất. Đôi khi, đây là điều bạn muốn xảy ra vì nó cho phép bạn bắt đầu với một lượt cài đặt mới. Nhưng có những lúc bạn muốn lưu cấu hình công việc và môi trường của mình giữa các phiên.

Vì lý do này, sau khi tạo vùng chứa, bạn có thể dừng vùng chứa để tránh bị mất công việc.

user@host> docker stop matter-container

Khi bạn đã sẵn sàng chạy lại, hãy khởi động vùng chứa và mở cửa sổ dòng lệnh:

user@host> docker start matter-container
user@host> docker exec -it matter-container /bin/bash

Bạn có thể mở thêm phiên hoạt động đầu cuối vào vùng chứa bằng:

user@host> docker exec -it matter-container /bin/bash

Hoặc bắt đầu phiên gốc bằng cách sử dụng:

user@host> docker exec -u 0 -it matter-container /bin/bash

Thiết lập Matter ban đầu

Khi thiết bị đầu cuối của bạn mở ra, thiết bị đó sẽ nằm trong kho lưu trữ sao chép của Matter tại ~/connectedhomeip. Bạn không cần thực hiện thêm bước thiết lập Matter.

Chia sẻ tệp giữa máy chủ và vùng chứa

Để truy cập vào tệp trên máy chủ lưu trữ từ bên trong vùng chứa, bạn có thể dùng giá đỡ gắn kết. Bạn cũng có thể ghi các tệp vào thư mục được gắn từ bên trong vùng chứa để dễ dàng truy cập từ máy chủ.

Chạy vùng chứa có đối số bổ sung --mount source=$(pwd),target=/workspace,type=bind để gắn thư mục đang hoạt động hiện tại của bạn vào vùng chứa tại /workspace.

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

Quyền của người dùng vùng chứa trên thư mục được gắn phải được quản lý trong máy chủ.

Lấy mã nhóm của người dùng vùng chứa trong vùng chứa.

$ id
uid=1000(matter) gid=1000(matter) groups=1000(matter)

Mở một phiên thiết bị đầu cuối khác trên máy chủ lưu trữ của vùng chứa và đặt thư mục đang hoạt động thành thư mục do vùng chứa gắn.

Đặt định kỳ nhóm cho các tệp trong thư mục được gắn cho nhóm của người dùng vùng chứa.

user@host> sudo chgrp -R 1000 .

Cấp các quyền bạn muốn đưa vào thư mục cho nhóm. Ví dụ này cấp quyền đọc, ghi và thực thi nhóm của người dùng vùng chứa cho tất cả các tệp trong thư mục được gắn.

user@host> sudo chmod -R g+rwx .

Lưu ý rằng những lệnh này không ảnh hưởng đến quyền của các tệp mới do người dùng lưu trữ tạo. Hãy nhớ cập nhật quyền đối với tệp mới tạo trong máy chủ nếu cần.

Bạn có thể thêm người dùng lưu trữ vào nhóm của người dùng vùng chứa để kế thừa các quyền đối với tệp do người dùng vùng chứa tạo ra.

user@host> currentuser=$(whoami)
user@host> sudo usermod -a -G 1000 $currentuser

3. Bảng điều khiển dành cho nhà phát triển của Google Home

Google Home Developer Console là ứng dụng web, nơi bạn quản lý các công cụ tích hợp của bạn với Google Home.

Mọi thiết bị Matter đạt chứng nhận CSA Matter đều hoạt động trong hệ sinh thái Google Home. Các thiết bị đang phát triển chưa được chứng nhận có thể được ủy quyền trong hệ sinh thái Google Home trong một số điều kiện nhất định - hãy xem Hạn chế ghép nối để biết thêm thông tin.

Tạo dự án dành cho nhà phát triển

Bắt đầu bằng cách truy cập Google Home Developer Console:

  1. Nhấp vào Tạo dự án trên trang Quản lý dự án.
    Trung tâm nhà phát triển Google Home
  2. Trên trang Bắt đầu, hãy nhấp vào Tạo dự án.

  1. Nhập một tên dự án riêng biệt rồi nhấp vào Tạo dự án mới. Hộp thoại tạo dự án mới
  2. Nhấp vào + Thêm tính năng tích hợp để chuyển đến màn hình "Tài nguyên nền tảng". Tại đây, bạn có thể xem tài liệu về cách phát triển Matter và đọc thông tin về một số công cụ.
  3. Khi bạn đã sẵn sàng tiếp tục, hãy nhấp vào Tiếp theo: Phát triển, trang này sẽ cho thấy trang danh sách kiểm tra cho tài khoản.
  4. Nhấp vào Tiếp theo: Thiết lập
  5. Trên trang Thiết lập, hãy nhập Tên sản phẩm.
  6. Nhấp vào Chọn loại thiết bị rồi chọn loại thiết bị trong trình đơn thả xuống (trong trường hợp này là Light).
  7. Trong ID nhà cung cấp (VID), hãy chọn Test VID (Kiểm thử VID) và chọn 0xFFF1 trong trình đơn thả xuống Test VID (Kiểm thử VID). Trong mã sản phẩm (PID), hãy nhập số 0x8000 rồi nhấp vào Lưu và tiếp tục, rồi nhấp vào Lưu trên trang tiếp theo.
    Thiết lập dự án
  8. Giờ đây, bạn sẽ thấy một thiết bị Matter trong công cụ tích hợp Matter. Tích hợp Matter
  9. Hãy khởi động lại trung tâm của bạn để đảm bảo rằng trung tâm đó nhận được cấu hình dự án tích hợp Matter gần đây nhất. Nếu sau này bạn phải thay đổi VID hoặc PID, bạn cũng cần khởi động lại sau khi lưu dự án để thay đổi đó có hiệu lực.

4. Xây dựng thiết bị

Tất cả ví dụ trong Matter đều có trong thư mục examples trong Kho lưu trữ GitHub. Có một số mẫu, nhưng chúng tôi tập trung vào lớp học lập trình này là về Đầu bếp.

Đầu bếp đều là:

  • Một ứng dụng mẫu cung cấp giao diện dòng lệnh, các tính năng gói cũng có trên ứng dụng examples/shell.
  • Một tập lệnh bao gồm nguyên tắc cấu hình quy ước để đóng gói một số tác vụ phổ biến cần thiết để phát triển thiết bị hỗ trợ Matter.

Chuyển đến thư mục đầu bếp mẫu và tạo bản dựng Matter đầu tiên:

$ cd examples/chef
$ ./chef.py -zbr -d rootnode_dimmablelight_bCwGYSDpoe -t linux

Bạn có thể xem một số lựa chọn bằng cách chạy chef.py -h. Các tùy chọn chúng tôi đang sử dụng ở đây là:

  • -d: xác định loại thiết bị sẽ dùng. Trong trường hợp này, chúng ta sẽ tạo một ứng dụng chiếu sáng có các tuỳ chọn kiểm soát bật/tắt và cấp độ.
  • -z: gọi công cụ ZAP để tạo các tệp nguồn triển khai loại thiết bị. Điều này nghĩa là dựa trên lựa chọn ánh sáng của bạn, ZAP sẽ tự động tạo mã để tích hợp vào bản dựng để xác định ánh sáng (Mô hình dữ liệu) và cách tương tác đó với các thiết bị khác (Mô hình tương tác).
  • -b: bản dựng.
  • -r: [không bắt buộc] bật máy chủ RPC trên thiết bị Matter ảo để các thành phần khác (chẳng hạn như GUI) có thể giao tiếp với thiết bị để đặt và truy xuất Thuộc tính mô hình dữ liệu.
  • -t linux: nền tảng mục tiêu. Các nền tảng hỗ trợ là linux, nrfconnectesp32. Bạn có thể chạy ./chef.py -h để xem tất cả các lệnh hiện có và các nền tảng mục tiêu được hỗ trợ. linux được dùng cho các thiết bị Matter ảo.

Chạy thiết bị

Matter sử dụng cổng TCP/UDP 5540, vì vậy nếu bạn có tường lửa chạy trong máy tính, hãy tắt tường lửa hoặc cho phép các kết nối TCP/UDP đến trên cổng 5540.

Chạy thiết bị ảo trong vùng chứa bằng:

$ ./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]

Để thiết bị của bạn chạy. Giờ chúng ta sẽ chuyển sự chú ý sang ứng dụng Google Home để có thể đưa thiết bị của bạn vào Google Home.

Dừng thiết bị

Bạn có thể thoát khỏi chương trình bằng CTRL+C. Nếu ứng dụng không thoát, bạn cũng có thể cần sử dụng CTRL+\.

Thông tin xác thực cho thiết bị ảo của bạn được lưu trữ trong thư mục /tmp/, ở các tệp bắt đầu bằng tiền tố chip.

Nếu muốn lặp lại toàn bộ quy trình ủy quyền ngay từ đầu, bạn sẽ phải xóa các tệp đó bằng cách chạy lệnh sau:

$ rm /tmp/chip*

5. Bộ điều khiển thiết bị ảo

Virtual Device Controller là một ứng dụng độc lập cung cấp giao diện người dùng đồ hoạ để kiểm soát và hiển thị trạng thái của các thiết bị Matter. Ứng dụng này sử dụng ứng dụng RPC để giao tiếp với các thiết bị Matter được kết nối với môi trường phát triển của bạn.

Bộ điều khiển thiết bị ảo

Bộ điều khiển thiết bị ảo cung cấp bản trình bày bằng hình ảnh về thiết bị ảo của bạn.

Bạn có thể tương tác với thiết bị ảo thông qua giao diện người dùng đồ họa (GUI) của Bộ điều khiển thiết bị ảo. Các thay đổi của bạn trong GUI sẽ ảnh hưởng đến mô hình dữ liệu cơ bản. Hiện tại, Bộ điều khiển thiết bị ảo hỗ trợ loại thiết bị có thể điều chỉnh độ sáng.

Cài đặt Virtual Device Controller

Bộ điều khiển thiết bị ảo được cài đặt sẵn trên vùng chứa Docker Ubuntu LTS 20.04.

Chạy Bộ điều khiển thiết bị ảo

Tạo thực thể của phiên hoạt động đầu cuối thứ hai:

user@host> docker exec -it matter-container /bin/bash
$

Khởi động Bộ điều khiển thiết bị ảo bằng cách cung cấp ổ cắm mạng sẽ dùng để giao tiếp với thiết bị ảo:

  $ cd ~/matter-virtual-device-gui/
  $ electron main.js --s=localhost:33000 --no-sandbox

Nếu bạn khởi động Trình điều khiển mà không cung cấp bất kỳ đối số nào, thì Chế độ mặc định sẽ là tuỳ chọn ổ cắm mạng bằng cổng máy chủ cục bộ 33000. Sau khi có thể kết nối với thiết bị ảo, Tay điều khiển sẽ hiển thị màn hình hiển thị trạng thái của thiết bị:

Giao diện người dùng đồ hoạ của Thiết bị ảo

Ứng dụng này gửi yêu cầu đến máy chủ RPC của thiết bị khi bạn thực hiện các thay đổi trên ứng dụng Bộ điều khiển ảo và thăm dò máy chủ RPC một lần mỗi giây để truy xuất trạng thái.

Bạn cũng có thể dùng ứng dụng Bộ điều khiển thiết bị ảo để truy xuất mã QR trong quy trình ủy quyền thiết bị. Nhấp vào biểu tượng mã QR bên cạnh hình ảnh thiết bị để hiển thị mã QR cho thiết bị này:

Mã QR

Bạn có thể sử dụng mã QR này để ủy quyền thiết bị của mình.

6. hoa hồng thiết bị

Lưu ý: Bước này sẽ chỉ thành công nếu bạn đã thiết lập dự án trong Google Home Developer Console.

Nest Hub

Cần có trung tâm để hoa hồng thiết bị của bạn trên vải Matter. Đây là thiết bị Google Nest, chẳng hạn như Nest Hub (thế hệ thứ 2), hỗ trợ Matter và vừa là Bộ định tuyến biên cho các thiết bị hỗ trợ Thread, vừa là đường dẫn thực hiện cục bộ để định tuyến ý định cho Nhà thông minh.

Hãy tham khảo danh sách này để xem những trung tâm hỗ trợ Matter.

Trước khi bắt đầu quy trình phí hoa hồng, hãy kiểm tra để đảm bảo rằng:

  • Trung tâm của bạn được ghép nối với cùng một Tài khoản Google mà bạn đã dùng để đăng nhập trên Google Home Console.
  • Trung tâm của bạn sử dụng cùng một mạng Wi-Fi với máy tính mà bạn đang dùng để chạy Thiết bị quan trọng ảo.
  • Trung tâm của bạn thuộc cùng một cấu trúc mà bạn đang sử dụng trên Ứng dụng Google Home. ("Ngôi nhà" trong Biểu đồ Google Home thể hiện cấu trúc của bạn).

Nhận Mã QR

Quy trình ủy quyền cần có thông tin về quy trình giới thiệu quan trọng được cung cấp thông qua mã QR. Bạn có thể lấy mã QR cho thiết bị ảo từ Bộ điều khiển thiết bị ảo.

Thực hiện thao tác phí hoa hồng

  1. Mở ứng dụng Google Home.
  2. Nhấn vào biểu tượng dấu + ở góc trên bên trái.
  3. Nhấn vào Thiết lập thiết bị.
  4. Nhấn vào Thiết bị mới.
  5. Chọn nhà của bạn rồi nhấn vào Tiếp theo.
  6. Ứng dụng Google Home sẽ quét tìm thiết bị của bạn. Nếu được nhắc với thông báo "Đã tìm thấy thiết bị mave...", hãy nhấn vào 'Có'. Nếu không, hãy nhấn vào Thiết lập một thiết bị khác, rồi chọn Thiết bị sạc trong danh sách thiết bị.
  7. Hướng máy ảnh vào mã QR của thiết bị hoặc mã QR do trang web tạo.
  8. Tiếp tục quá trình ghép nối như chỉ định trong luồng ứng dụng Google Home.

Sau khi bạn hoàn thành các bước này, thiết bị ảo Matter phải được ủy quyền thành công và sẽ xuất hiện dưới dạng một biểu tượng mới trong ứng dụng Google Home.

Bóng đèn đã ghép nối trên Ứng dụng Google Home

Khắc phục sự cố

Không thể xác minh ủy quyền bằng các thông báo lỗi "Không thể kết nối với Google" hoặc "Không thể liên hệ với Google"

  • Đảm bảo bạn đã tạo dự án có tổ hợp VID/PID chính xác trong Google Home Console và không có dự án nào khác sử dụng cùng một tổ hợp VID/PID.

Không uỷ quyền được sau khi "Quét thiết bị" trong một thời gian dài

7. Điều khiển thiết bị

Sau khi thiết bị hỗ trợ Matter được đưa vào sử dụng thành công và xuất hiện trong ứng dụng Google Home dưới dạng bóng đèn, bạn có thể kiểm tra thiết bị bằng các phương pháp khác nhau:

  • Sử dụng Trợ lý Google.
  • Sử dụng ứng dụng Google Home.
  • Sử dụng GUI của thiết bị ảo.

Trợ lý Google

Sử dụng Trợ lý Google trên điện thoại hoặc trung tâm của bạn để chuyển đổi trạng thái của thiết bị từ các lệnh thoại, chẳng hạn như nói "Ok Google, bật/tắt đèn của tôi".

Hãy xem phần Điều khiển các thiết bị nhà thông minh bằng lệnh thoại trong phần Điều khiển các thiết bị nhà thông minh được thêm vào ứng dụng Google Home để xem thêm các ví dụ về lệnh.

ứng dụng Google Home

Bạn có thể nhấn vào các nhãn BậtTắt bên cạnh biểu tượng bóng đèn hiển thị trên Ứng dụng Google Home.

Xem phần Điều khiển các thiết bị bằng ứng dụng Google Home trong phần Điều khiển các thiết bị nhà thông minh được thêm vào ứng dụng Google Home để biết thêm thông tin.

GUI của thiết bị ảo

Bạn có thể tương tác với GUI Thiết bị ảo để thay đổi trạng thái của thiết bị. Dù bạn điều khiển thiết bị ảo bằng Bộ điều khiển thiết bị ảo, Ứng dụng Google Home trên điện thoại, hay với trung tâm, thì tất cả những giao diện này sẽ phản ánh trạng thái hiện tại của thiết bị ảo.

8. Xin chúc mừng!

Bạn đã tạo thành công thiết bị Matter đầu tiên. Tuyệt vời!

Trong lớp học lập trình này, bạn đã tìm hiểu cách:

  • Cài đặt môi trường phát triển Matter bằng cách sử dụng hình ảnh Docker được đóng gói trước.
  • Xây dựng và chạy thiết bị ảo Matter.
  • Hoa hồng và điều khiển thiết bị ảo từ Google Home.

Để tìm hiểu thêm về Matter, hãy tham khảo những tài liệu tham khảo sau: