Key Value API

Key Value API предоставляет новые API для управления специальными данными объектов Device, Room и Automation. Жизненный цикл пользовательских данных строго ограничен жизненным циклом объекта, с которым они связаны. Например, специальные данные (такие как "Комната Люси"), связанные с объектом "Комната", будут автоматически удалены, перемещены или перенесены (между структурами) вместе с объектом "Комната".

Изменения в Swift API касаются контроллера CustomAppData и предоставляют расширения для объектов, к которым относятся данные пользовательского приложения. Они включают стандартные функции создания, чтения, обновления и удаления (CRUD).

Пример для устройства

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)

Пример чат-группы

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

Пример автоматизации

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)

Ограничения

  • Ключ должен представлять собой строку допустимых символов UTF-8 длиной не более 128 символов. Ключ может быть пустой строкой.
  • Значение должно быть строкой допустимых символов UTF-8 длиной не более 1024 символов. Значение может быть пустой строкой.
  • Каждый объект может содержать 10 строк пар "ключ-значение".