Một số Matter thiết bị được tạo thành từ 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ị đề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ị nhiều phần được Home API biểu diễn dưới dạng một tập hợp 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 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ị phân cấp Matter như tủ lạnh có thể được biểu diễn trong Home API dưới dạng một tập hợp các thiết bị, mỗi thiết bị tương ứng với một trong các điểm cuối.
Biểu diễn phẳng của bảng điều khiển gắn tường có 4 công tắc.
Biểu diễn phẳng của tủ lạnh
Biểu diễn nhiều phần
Kể từ phiên bản 1.8 của Home API, một thiết bị nhiều phần có thể được biểu diễn trong API dưới dạng một thiết bị. Để 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 tuỳ chọn enableMultipartDevices ảnh hưởng đến việc biểu diễn một thiết bị nhiều phần trong Home API:
Biểu diễn nhiều phần của bảng điều khiển gắn tường.
Biểu diễn nhiều phần của tủ lạnh.
Bạn luôn có thể chọn nhận biểu diễn phẳng bằng cách bỏ qua tham số enableMultipartDevices hoặc đặt tham số này thành false.
Di chuyển thiết bị 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 phần trên thiết bị mẹ hoặc một 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 MatterMatter. 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 cây thiết bị thông qua
parts()
phương thức:
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 biết cách truy cập vào các 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) }