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 строк пар "ключ-значение".