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

1. Giới thiệu

Matter là một giao thức kết nối mang lại những cơ hội thú vị để phát triển các 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ị theo chuẩn Matter đầu tiên bằng SDK và các 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 dành cho nhà phát triển Google Home hoặc trang web của Liên minh Tiêu chuẩn Kết nối.

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

  • Cách thiết lập môi trường xây dựng Matter
  • Cách tạo thiết bị theo chuẩn Matter ảo chạy trên máy tính
  • Cách đặt hoa hồng và điều khiển thiết bị ảo Matter bằng Google Home

Những thứ bạn cần

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

Chúng ta sẽ sử dụng vùng chứa Docker đã đị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ả các phần phụ thuộc cần thiết để xây dựng và chạy thiết bị ảo theo chuẩn Matter.

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

Máy tính Windows và macOS không được hỗ trợ trong bản cài đặt Docker này. Bạn có thể cài đặt và tạo Matter trên macOS theo cách thủ công.

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 rằng bạn cũng đã cài đặt X.Org.

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:
    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à 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 vùng chứa:

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 vào lệnh đó:

  • 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 đồ hoạ.
  • docker run … image chạy hình ảnh đã cho, kéo hình ảnh này 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. Đây là điều kiện bắt buộc để Docker truyền lưu lượng truy cập mDNS từ máy chủ đến vùng chứa và chia sẻ màn hình X11 của máy chủ.
  • -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ác cụm Matter.
  • -it chạy Docker bằng một thiết bị đầu cuối tương tác (tty) thay vì dưới dạng một quy trình trong nền.

Bạn có thể chạy phiên bản thiết bị đầu cuối thứ hai (không bắt buộc):

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

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

Mỗi khi chạy lệnh docker run, bạn sẽ tạo một vùng chứa mới với hình ảnh được chỉ định. Khi bạn làm việc này, dữ liệu cũ đã lưu trong phiên bản vùng chứa trước đó sẽ bị mất. Đôi khi, đây là điều bạn mong muốn vì nó cho phép bạn bắt đầu bằng một lượt cài đặt mới. Tuy nhiên, 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 dữ liệu.

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 các phiên thiết bị đầu cuối cho vùng chứa của mình bằng:

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

Hoặc bắt đầu phiên gốc bằ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 mở ra, thiết bị đó sẽ có sẵn trên kho lưu trữ bản sao của Matter tại ~/connectedhomeip. Bạn không cần làm gì thêm để thiết lập theo chuẩn Matter.

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

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

Chạy vùng chứa với đối số bổ sung --mount source=$(pwd),target=/workspace,type=bind để gắn thư mục đang làm việc hiện tại 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 đã liên kết 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 từ 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ữ vùng chứa rồi đặt thư mục đang hoạt động thành thư mục do vùng chứa gắn kết.

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

user@host> sudo chgrp -R 1000 .

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

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

Xin lưu ý rằng các lệnh này không ảnh hưởng đến quyền đối với các tệp mới do người dùng máy chủ lưu trữ tạo. Nhớ cập nhật quyền đối với các tệp mới được tạo trong máy chủ lưu trữ 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.

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 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 Matter của mình với Google Home.

Mọi thiết bị Matter đã vượt qua chứng nhận Matter của Liên minh Tiêu chuẩn Kết nối (Alliance) đều hoạt động trong hệ sinh thái Google Home. Bạn có thể đưa các thiết bị đang trong quá trình phát triển chưa được chứng nhận vào hệ sinh thái Google Home trong một số điều kiện nhất định. Hãy xem Các hạn chế về việc 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 vào Google Home Developer Console:

  1. Nhấp vào Tạo dự án.
  2. Nhập một tên dự án riêng biệt, rồi nhấp vào Create project (Tạo dự án). Hộp thoại Tạo dự án mới
  3. Nhấp vào + Thêm công cụ tích hợp. Thao tác này sẽ đưa bạn đến màn hình Tài nguyên quan trọng. Tại đây, bạn có thể xem tài liệu về phát triển Matter và đọc về một số công cụ.
  4. Khi bạn sẵn sàng tiếp tục, hãy nhấp vào Tiếp theo: Phát triển, để hiển thị trang Danh sách kiểm tra cơ bản.
  5. Nhấp vào Tiếp theo: Thiết lập
  6. Trên trang Thiết lập, hãy nhập Tên sản phẩm.
  7. Nhấp vào Chọn loại thiết bị và chọn loại thiết bị từ trình đơn thả xuống (trong trường hợp này là Light).
  8. Trong phần Mã nhà cung cấp (VID), hãy chọn Kiểm tra VID rồi chọn 0xFFF1 trên trình đơn thả xuống của mục Kiểm thử VID. Trong Mã sản phẩm (PID), hãy nhập 0x8000 rồi nhấp vào Lưu và tiếp tục, sau đó nhấp vào Lưu ở trang tiếp theo. Hãy dùng các giá trị VID/PID chính xác này. Các bước sau này trong lớp học lập trình sẽ phụ thuộc vào các giá trị đó.
    Thiết lập dự án
  9. Bây giờ, bạn sẽ thấy mối liên kết tích hợp của mình trong phần Tích hợp cơ bản.
  10. Khởi động lại trung tâm của bạn để đảm bảo thiết bị này nhận được cấu hình dự án tích hợp Matter mới nhất. Nếu sau này 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 để sự thay đổi có hiệu lực. Hãy xem bài viết Khởi động lại thiết bị Google Nest hoặc Google Wifi để biết hướng dẫn khởi động lại từng bước.

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

Tất cả ví dụ trong Matter đều nằm trong thư mục examples trong Kho lưu trữ GitHub. Hiện có một số mẫu, nhưng trọng tâm của lớp học lập trình này là về Đầu bếp.

Đầu bếp vừa là người:

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

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

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

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

  • -d: xác định loại thiết bị sẽ được sử dụng. Trong trường hợp này, chúng ta đang tạo một ứng dụng chiếu sáng có các nút điều khiển bật/tắt và điều khiển mức độ.
  • -z: gọi công cụ ZAP để tạo các tệp nguồn triển khai loại thiết bị. Tức 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 nhằm xác định ánh sáng (Mô hình dữ liệu) và cách ánh sáng 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ị nhằm thiết lập 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 có sẵn và nền tảng đích được hỗ trợ. linux được dùng cho các thiết bị theo chuẩn Matter ảo.

Chạy thiết bị

Môi trường sử dụng cổng TCP/UDP 5540, vì vậy, nếu máy tính của bạn đang chạy tường lửa, hãy tắt tường lửa hoặc cho phép 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. Bây giờ, chúng ta sẽ chuyển sự chú ý đến ứng dụng Google Home để có thể đặt thiết bị của bạn cho Google Home.

Dừng thiết bị

Nếu cần 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ần phải 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/, trong 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 chạy thử từ đầu, bạn phải xoá các tệp đó bằng cách chạy lệnh sau:

$ rm /tmp/chip*

5. Trình đ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ạ để điều khiển và hiển thị trạng thái của thiết bị Matter ảo. Dịch vụ này sử dụng máy khách 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.

Trình điều khiển thiết bị ảo

Virtual Device Controller (Tay điều khiển thiết bị ảo) cung cấp một bản trình bày bằng hình ảnh cho 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 đồ hoạ (GUI) của Trình đ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. Vui lòng xem nội dung Thiết bị được hỗ trợ để biết danh sách đầy đủ các loại Thiết bị ảo Matter được hỗ trợ.

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

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 Trình điều khiển thiết bị ảo

Tạo thực thể của phiên thiết bị đầ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 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 Bộ điều khiển mà không cung cấp bất kỳ đối số nào, thì Bộ điều khiển sẽ mặc định sử dụng tuỳ chọn cổng mạng sử dụng cổng máy chủ cục bộ 33000. Khi có thể kết nối với thiết bị ảo, Bộ điều khiển sẽ hiển thị màn hình hiển thị trạng thái thiết bị của bạn:

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

Khi bạn thực hiện thay đổi trên ứng dụng Bộ điều khiển ảo, ứng dụng gửi yêu cầu đến máy chủ RPC của thiết bị 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ể sử dụng ứng dụng Trình điều khiển thiết bị ảo để truy xuất mã QR trong quy trình chạy thử 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 mã QR cho thiết bị này. Hãy dùng mã QR này để đặt hoa hồng cho thiết bị của bạn.

6. Phí 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 của mình trong Google Home Developer Console.

Nest Hub

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

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

Trước khi bắt đầu quy trình chạy thử, hãy kiểm tra để đảm bảo rằng:

  • Thiết bị trung tâm của bạn được ghép nối với chính Tài khoản Google mà bạn đã dùng để đăng nhập trên Google Home Console.
  • Thiết bị trung tâm của bạn kết nối với 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ị Matter ảo.
  • Trung tâm của bạn có cùng cấu trúc mà bạn đang sử dụng trên Ứng dụng Google Home. ("Nhà" trong Google Home Graph thể hiện cấu trúc của bạn).

Nhận mã QR

Quy trình vận hành cần có thông tin giới thiệu về vấn đề Matter được cung cấp thông qua mã QR. Bạn có thể lấy mã QR cho thiết bị ảo của mình 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 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 quét tìm thiết bị của bạn. Nếu bạn thấy thông báo "Đã tìm thấy thiết bị quan trọng...", hãy nhấn vào "Có". Nếu không, hãy nhấn vào Thiết lập thiết bị khác, rồi chọn Thiết bị quan trọng 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 theo quy trình trong ứng dụng Google Home.

Sau khi bạn hoàn thành những bước này, thiết bị ảo Matter sẽ được thiết lập 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ể uỷ quyền kèm theo thông báo lỗi "Sự cố về khả năng kết nối" hoặc "Không thể liên hệ với Google"

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

Không thể uỷ quyền sau khi bạn "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ị theo chuẩn Matter xuất hiện trong ứng dụng Google Home dưới dạng bóng đèn, bạn có thể kiểm tra chức năng điều khiển của thiết bị này bằng nhiều phương pháp:

  • Sử dụng Trợ lý Google.
  • Dùng ứng dụng Google Home.
  • Sử dụng GUI (Giao diện người dùng đồ hoạ) của thiết bị ảo.

Trợ lý Google

Dùng Trợ lý Google trên điện thoại hoặc trung tâm để bật/tắt trạng thái thiết bị bằng 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 bài viết Đ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 ví dụ về các lệnh.

Ứng dụng Google Home

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

Hãy xem phần Điều khiển thiết bị bằng ứng dụng Google Home trong bài viết Đ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 (Giao diện người dùng đồ hoạ) trên thiết bị ảo

Bạn có thể tương tác với GUI (Giao diện người dùng đồ hoạ) của thiết bị ảo để thay đổi trạng thái của thiết bị. Cho 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 bằng thiết bị trung tâm, 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ị theo chuẩn Matter đầu tiên của mình. 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 hình ảnh Docker đóng gói sẵn.
  • Tạo và chạy thiết bị ảo theo chuẩn Matter.
  • Phí hoa hồng và kiểm soát thiết bị ảo của bạn từ Google Home.

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