Multipart-Geräte auf iOS-Geräten

Einige Matter-Geräte bestehen aus mehreren Endpunkten desselben Gerätetyps. Andere Matter-Geräte sind hierarchisch, wobei Endpunkte in anderen Endpunkten verschachtelt sind. In den Home APIs werden beide Arten von Geräten als mehrteilige Geräte bezeichnet.

Flache Darstellung

Vor Version 1.8 der Home APIs werden mehrteilige Geräte von den Home APIs als eine Reihe separater, nicht zusammenhängender Geräte dargestellt. Dies wird als flache Darstellung bezeichnet.

Ein einzelnes Wandpanel mit vier Schaltern wird in den Home APIs beispielsweise als vier separate und voneinander unabhängige Geräte angezeigt. Ein hierarchisches Matter-Gerät wie ein Kühlschrank kann in den Home APIs als eine Reihe von Geräten dargestellt werden, die jeweils einem der Endpunkte entsprechen.

  • Beispiel für ein Wandpanel mit mehreren Schaltern, das die native Matter-Darstellung und das flache Rendering der Home API zeigt

    Flache Darstellung einer Wandhalterung mit 4 Schaltern.

  • Beispiel für einen Kühlschrank mit der nativen Matter-Darstellung und dem flachen Rendering der Home API

    Flache Darstellung eines Kühlschranks

Abbildung 1: Beispiele für flaches Rendering

Mehrteilige Darstellung

Ab Version 1.8 der Home APIs kann ein mehrteiliges Gerät in der API als einzelnes Gerät dargestellt werden. Wenn Sie dieses Verhalten aktivieren möchten, rufen Sie die Methode devices() für die Home-Instanz auf und setzen Sie den Parameter enableMultipartDevices auf 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)

Die folgenden Diagramme veranschaulichen, wie sich die Option enableMultipartDevices auf die Darstellung eines mehrteiligen Geräts in den Home APIs auswirkt:

  • Beispiel für ein Wandpanel mit mehreren Schaltern, das die native Matter-Darstellung und das mehrteilige Rendering der Home API zeigt

    Mehrteilige Darstellung eines Wandpaneels.

  • Beispiel für einen Kühlschrank mit der nativen Matter-Darstellung und dem mehrteiligen Rendering der Home API

    Mehrteilige Darstellung eines Kühlschranks.

Abbildung 2: Beispiele für mehrteiliges Rendering

Sie können die flache Darstellung jederzeit abrufen, indem Sie entweder den Parameter enableMultipartDevices weglassen oder ihn auf false setzen.

In einem mehrteiligen Gerät wird jede Komponenteninstanz eines Gerätetyps als Teil bezeichnet.

Auf Teile kann entweder direkt über das übergeordnete Gerät oder über ein Teil hierarchisch zugegriffen werden, wobei Gerätetypen oder semantische Matter-Tags verwendet werden. Semantische Tags werden in den Home APIs mit SemanticTag implementiert.

Mit der Klasse DeviceType können Entwickler den Gerätebaum über die Methode parts() durchlaufen:

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

Das nächste Beispiel zeigt, wie auf die Teile eines Kühlschranks zugegriffen wird:

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