Perangkat multi-bagian di iOS

Beberapa perangkat Matter terdiri dari beberapa endpoint dengan jenis perangkat yang sama. Perangkat Matter lainnya bersifat hierarkis, dengan endpoint yang bertingkat di dalam endpoint lain. Di Home API, kedua jenis perangkat ini disebut sebagai perangkat multibagian.

Representasi datar

Sebelum rilis 1.8 Home API, perangkat multibagian direpresentasikan oleh Home API sebagai kumpulan perangkat terpisah yang tidak terkait. Hal ini disebut sebagai representasi flat.

Misalnya, satu perangkat panel dinding dengan empat sakelar muncul di Home API sebagai empat perangkat yang berbeda dan tidak terkait. Dan perangkat Matter hierarkis seperti kulkas dapat direpresentasikan di Home API sebagai sekumpulan perangkat, yang masing-masing sesuai dengan salah satu endpoint.

  • Contoh panel dinding dengan beberapa sakelar yang menampilkan representasi Matter native dan rendering datar Home API

    Representasi datar panel dinding 4 sakelar.

  • Contoh kulkas yang menampilkan representasi Matter native dan rendering datar Home API

    Representasi datar kulkas

Gambar 1: Contoh rendering datar

Representasi multibagian

Mulai rilis 1.8 Home API, perangkat multibagian dapat direpresentasikan di API sebagai satu perangkat. Untuk mengaktifkan perilaku ini, panggil metode devices() pada instance Home dan tetapkan parameter enableMultipartDevices ke true:

let multipartDevices = try await self.home.devices(enableMultipartDevices: true).list()
let multipartDevice = multipartDevices.first { $0.id == powerStrip.device.id }
let outlets = try await device.types.getAll(of: OnOffPluginUnitDeviceType.self)

Diagram berikut menggambarkan pengaruh opsi enableMultipartDevices terhadap representasi perangkat multibagian di Home API:

  • Contoh panel dinding dengan beberapa sakelar yang menampilkan representasi Matter
    native dan rendering multibagian Home API

    Representasi multibagian dari panel dinding.

  • Contoh kulkas yang menampilkan representasi Matter native dan rendering multibagian Home API

    Representasi multibagian dari kulkas.

Gambar 2: Contoh rendering multibagian

Anda selalu memiliki opsi untuk mendapatkan representasi datar dengan menghilangkan parameter enableMultipartDevices, atau dengan menyetelnya ke false.

Dalam perangkat multibagian, setiap instance komponen dari jenis perangkat disebut bagian.

Komponen dapat diakses langsung di perangkat induk atau komponen secara hierarkis, menggunakan jenis perangkat atau tag semantik Matter. Tag semantik diterapkan di Home API dengan SemanticTag.

Class DeviceType memungkinkan developer melintasi hierarki perangkat melalui metode 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)
}

Contoh berikutnya menunjukkan cara mengakses bagian-bagian perangkat kulkas:

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)
}