Một số thiết bị Matter bao gồm nhiều điểm cuối có cùng loại thiết bị. Các thiết bị Matter khác được phân cấp, với các điểm cuối được lồng trong các điểm cuối khác. Trong Home API, cả hai loại thiết bị này đều được gọi là thiết bị nhiều phần.
Biểu diễn phẳng
Trước phiên bản 1.8 của Home API, các thiết bị có nhiều phần được Home API biểu thị dưới dạng một nhóm các thiết bị riêng biệt, không liên quan. Đây được gọi là biểu diễn phẳng.
Ví dụ: một thiết bị bảng điều khiển gắn tường có 4 công tắc sẽ xuất hiện trong Home API dưới dạng 4 thiết bị riêng biệt và không liên quan. Và một thiết bị Matter theo hệ thống phân cấp (chẳng hạn như tủ lạnh) có thể được biểu thị trong Home API dưới dạng một nhóm thiết bị, mỗi thiết bị tương ứng với một trong các điểm cuối.
Hình ảnh phẳng của một bảng điều khiển gắn tường có 4 công tắc.
Hình ảnh phẳng của một chiếc tủ lạnh
Biểu diễn nhiều phần
Kể từ bản phát hành 1.8 của Home API, một thiết bị có nhiều phần có thể được biểu thị trong API dưới dạng một thiết bị duy nhất. Để bật hành vi này, hãy gọi phương thức devices() trên thực thể Home và đặt tham số enableMultipartDevices thành true:
let devices = try await self.home.devices(enableMultipartDevices: true).list() let device = devices.first { $0.id == powerStrip.device.id } let outlets = try await device.types.getAll(of: OnOffPluginUnitDeviceType.self)
Các sơ đồ sau đây minh hoạ cách lựa chọn enableMultipartDevices ảnh hưởng đến việc biểu thị một thiết bị có nhiều phần trong Home API:
Hình ảnh nhiều phần của một tấm tường.
Hình ảnh nhiều phần của một chiếc tủ lạnh.
Bạn luôn có thể nhận được bản trình bày phẳng bằng cách bỏ qua tham số enableMultipartDevices hoặc bằng cách đặt tham số này thành false.
Điều hướng một thiết bị có nhiều phần
Trong một thiết bị nhiều phần, mỗi thực thể thành phần của một loại thiết bị được gọi là một phần.
Bạn có thể truy cập trực tiếp vào các bộ phận trên thiết bị mẹ hoặc một bộ phận theo cách phân cấp, bằng cách sử dụng các loại thiết bị hoặc thẻ ngữ nghĩa Matter. Thẻ ngữ nghĩa được triển khai trong Home API bằng SemanticTag.
Lớp DeviceType cho phép nhà phát triển duyệt qua cây thiết bị thông qua phương thức parts():
let outlet1 = await device.parts.getAll(of: OnOffPluginUnitDeviceType.self).first { $0.tags.contains(SemanticTag.CommonNumber.one) } let outlet3 = await device.parts.getAll(of: OnOffPluginUnitDeviceType.self).first { $0.tags.contains(SemanticTag.CommonNumber.three) }
Ví dụ tiếp theo cho thấy cách truy cập vào các bộ phận của thiết bị tủ lạnh:
let refrigerator: RefrigeratorDeviceType? = await home.devices(enableMultipartDevices: true).first { $0.id == FRIDGE_ID } // Get different cabinets of the refrigerator let freezer = refrigerator!.parts(type: TemperatureControlledCabinetDeviceType.self).first { $0.tags.contains(SemanticTag.Refrigerator.freezer) }