Multipart-Geräte auf iOS-Geräten

Einige Matter-Geräte bestehen aus mehreren Endpunkten mit demselben Gerätetyp. Andere Matter-Geräte sind hierarchisch aufgebaut, wobei Endpunkte in anderen Endpunkten verschachtelt sind. In den Home APIs werden beide Arten von Geräten als Multipart-Geräte bezeichnet.

Einfache Darstellung

Vor der Version 1.8 der Home APIs wurden Geräte mit mehreren Teilen in den Home APIs als eine Reihe separater, unabhängiger Geräte dargestellt. Dies wird als flache Darstellung bezeichnet.

Ein einzelnes Wandpaneel mit vier Schaltern wird in den Home APIs beispielsweise als vier separate und 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 Wandpaneel mit mehreren Schaltern, das die native Matter-Darstellung und die flache Darstellung der Home API zeigt

    Flache Darstellung einer Wandplatte mit vier Schaltern.

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

    Flache Darstellung eines Kühlschranks

Abbildung 1: Beispiele für die flache Darstellung

Mehrteilige Darstellung

Ab Version 1.8 der Home APIs kann ein mehrteiliges Gerät in der API als einzelnes Gerät dargestellt werden. Rufen Sie zum Aktivieren dieses Verhaltens die Methode devices() für die Home-Instanz auf und legen Sie den Parameter enableMultipartDevices auf true fest:

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)

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 Wandpaneel mit mehreren Schaltern, das die native Matter-Darstellung und das Multipart-Rendering der Home API zeigt

    Mehrteilige Darstellung einer Wandplatte.

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

    Multipart-Darstellung eines Kühlschranks.

Abbildung 2: Beispiele für das Rendern von Multipart-Anfragen

Sie haben immer die Möglichkeit, die flache Darstellung zu erhalten, indem Sie den Parameter enableMultipartDevices weglassen oder auf false setzen.

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

Auf Teile kann entweder direkt auf dem übergeordneten Gerät oder hierarchisch über Gerätetypen oder semantische Matter-Tags zugegriffen werden. Semantische Tags werden in den Home-APIs mit SemanticTag implementiert.

Mit der Klasse DeviceType können Entwickler den Gerätebaum mit der 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)
}

Im nächsten Beispiel wird gezeigt, 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)
}