Key Value API

Die Key Value API bietet neue APIs für die benutzerdefinierte Datenverwaltung für Geräte-, Raum- und Automatisierungsobjekte. Der Lebenszyklus der benutzerdefinierten Daten ist streng auf den Lebenszyklus des zugehörigen Objekts beschränkt. Benutzerdefinierte Daten wie „Lucys Zimmer“, die mit einem Room-Objekt verknüpft sind, werden beispielsweise automatisch mit dem Room-Objekt gelöscht, verschoben oder übertragen (über Strukturen hinweg).

Die Swift-API-Änderung bezieht sich auf den CustomAppData-Controller und bietet Erweiterungen für die Objekte, zu denen die benutzerdefinierten Anwendungsdaten gehören. Sie umfasst die Standardfunktionen zum Erstellen, Lesen, Aktualisieren und Löschen (CRUD).

Gerätebeispiel

guard let device = home.devices.first(where: { $0.name == deviceName }) else { return }
var response = try await device.customAppData[key]
print("Before: \(response)")
try await device.customAppData.update(key: key, value: value)
response = try await device.customAppData[key]
print("After: \(response)")
try await device.customAppData.delete(key)

Beispiel für ein Zimmer

guard let room = home.rooms.first(where: { $0.name == roomName }) else { return }
try await room.customAppData.update(key: "nickname", value: "Lucy's Room")
let response = try await room.customAppData["nickname"]
try await room.customAppData.delete("nickname")

Beispiel für Automatisierung

guard let automation = home.automations.first(where: { $0.name == automationName }) else { return }
var response = try await automation.customAppData[key]
print("Before: \(response)")
try await automation.customAppData.update(key: key, value: value)
response = try await automation.customAppData[key]
print("After: \(response)")
try await automation.customAppData.delete(key)

Einschränkungen

  • Der Schlüssel muss ein String mit gültigen UTF-8-Zeichen und einer maximalen Länge von 128 Zeichen sein. Der Schlüssel kann ein leerer String sein.
  • Der Wert muss ein String mit gültigen UTF‑8-Zeichen und einer maximalen Länge von 1.024 Zeichen sein. Der Wert kann ein leerer String sein.
  • Jedes Objekt kann 10 Zeilen mit Schlüssel/Wert-Paaren haben.