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 mehrteilige Geräte bezeichnet.
Einfache Darstellung
Vor Release 1.8 der Home APIs werden mehrteilige Geräte in den Home APIs als eine Reihe separater, nicht miteinander verbundener Geräte dargestellt. Dies wird als einfache Darstellung bezeichnet.
Ein einzelnes Wandbedienfeld mit vier Schaltern wird in den Home APIs beispielsweise als vier separate und nicht miteinander verbundene 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, wobei jedes Gerät einem der Endpunkte entspricht.
Einfache Darstellung eines Wandbedienfelds mit vier Schaltern.
Einfache Darstellung eines Kühlschranks
Mehrteilige Darstellung
Ab Release 1.8 der Home APIs kann ein mehrteiliges Gerät in der API als einzelnes Gerät dargestellt werden. Rufen Sie dazu die
devices() Methode für
die Home
Instanz auf und legen Sie den enableMultipartDevices Parameter auf true fest:
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:
Mehrteilige Darstellung eines Wandbedienfelds.
Mehrteilige Darstellung eines Kühlschranks.
Sie können die einfache Darstellung jederzeit abrufen, indem Sie den Parameter enableMultipartDevices entweder weglassen oder auf false setzen.
In einem mehrteiligen Gerät navigieren
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 hierarchisch über einen Teil zugegriffen werden. Dabei werden Gerätetypen oder Matter semantische
Tags verwendet. Semantische Tags werden in den Home APIs mit
SemanticTag implementiert.
Die DeviceType
Klasse lässt Entwickler den Gerätebaum über die
parts()
Methode 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) }