Доступ к службам и характеристикам
Служба (HMService
) представляет функцию аксессуара и инкапсулирует характеристики (HMCharacteristic
) это имеет свойства чтения/записи. Аксессуар может иметь многократные службы, и служба может иметь многократные характеристики. Например, аксессуар новичка гаража может иметь легкую и службу коммутатора. Легкая служба может иметь вкл\выкл и более тусклые характеристики. Пользователи не создают аксессуары и их службы — производитель определяет функции аксессуара — но пользователи могут изменить значения эксплуатационных характеристик. Некоторые характеристики представляют физическое состояние, считавшее и пишущее свойства — например, текущая температура термостата только для чтения, но целевая температура является чтением-записью. Apple предоставляет предопределенную услугу и характерные имена, распознанные и понятые под Siri.
Получение служб и их свойств
После того, как Вы получите вспомогательное объект, как описано в Получении Аксессуаров в Комнате, можно получить информацию о ее службах и их характеристиках. Можно также получить службы типом непосредственно из дома.
Для получения служб аксессуара используйте services
свойство в HMAccessory
класс.
NSArray *services = accessory.services; |
Для обеспечивания служб аксессуарами в доме, соответствующими указанные типы используйте servicesWithTypes:
метод в HMHome
класс.
// Get all lights and thermostats in a home |
NSArray *lightServices = [home servicesWithTypes:[HMServiceTypeLightbulb]]; |
NSArray *thermostatServices = [home servicesWithTypes:[HMServiceTypeThermostat]]; |
Для получения имени службы используйте name
свойство в HMService
класс.
NSString *name = service.name; |
Для получения характеристик службы используйте characteristics
свойство.
NSArray *characteristics = service.characteristics; |
Для получения типа службы используйте serviceType
свойство.
NSString *serviceType = service.serviceType; |
Определенные Apple типы службы, распознанные Siri, включают:
Дверные блокировки
Вентиляторы
Устройства открывания гаражных ворот
Световые сигналы
Выходы
Термостаты
Изменение имен служб
Для изменения имени службы используйте updateName:completionHandler:
асинхронный метод. Имя службы, переданное в качестве параметра этому методу, должно быть уникальным в доме. Имена службы распознаны Siri.
[service updateName:@"Garage 1 Opener" completionHandler:^(NSError *error) { |
if (error) { |
// Failed to change the name |
} else { |
// Successfully changed the name |
} |
}]; |
Доступ к значениям характеристик
Характеристика представляет параметр службы, которая или только для чтения, чтение-запись, или только для записи. Это предоставляет информацию о возможных значениях параметра, например, булевской переменной или диапазона. Температура термостата только для чтения, и целевая температура является чтением-записью. Команда, выполняющая действие, но требующая, чтобы никакая обратная связь — такая как игра звука или высвечивание света не подтвердила идентификационные данные аксессуара — может быть только для записи.
Определенные Apple характерные типы, распознанные Siri, включают:
Яркость
Текущее дверное состояние
Текущая температура
Состояние блокировки
Состояние электропитания
Скорость вращения
Направление вращения
Дверное состояние Target
Состояние Target
Температура Target
Например, целевое состояние для устройства открывания гаражных ворот открыто или закрыто. Целевое состояние для дверной блокировки заблокировано или разблокировано.
После того, как Вы добираетесь HMService
объект, как описано в Getting Services и Их Свойствах, можно получить доступ к значениям отдельных эксплуатационных характеристик. Поскольку значения получены из физического аксессуара, эти, чтение и методы записи являются асинхронными с параметрами обработчика завершения.
Для чтения значения характеристики используйте readValueWithCompletionHandler:
асинхронный метод.
[characteristic readValueWithCompletionHandler:^(NSError *error) { |
if (error == nil) { |
// Successfully read the value |
id value = characteristic.value; |
} |
else { |
// Unable to read the value |
} |
}]; |
В if
пункт, введите свой код, обновляющий представления приложения.
Для записи значения характеристики используйте writeValue:completionHandler:
асинхронный метод.
[self.characteristic writeValue:@42 withCompletionHandler:^(NSError *error) { |
if (error == nil) { |
// Successfully wrote the value |
} |
else { |
// Unable to write the value |
} |
}]; |
Не предполагайте, что метод записи успешен, пока обработчик завершения не вызывают без ошибки. Например, не изменяйте состояние переключателя до характеристики, это представляет состояние изменений. В if
пункт, введите свой код, обновляющий представления приложения.
Кроме того, обновите представления, когда другие приложения изменят значения характеристик, как описано в Наблюдении Изменений в Аксессуарах.
Creating Service Groups
Группа службы (HMServiceGroup
) когда пользователь отсутствует, обеспечивает удобный способ управлять произвольными службами, принадлежащими различным аксессуарам — например, управляя подмножеством световых сигналов своими силами.
После того, как Вы получаете a HMHome
объект, как описано в Получении Основного Дома и Набора Домов, можно создать группу службы в том доме.
Для создания группы службы используйте addServiceGroupWithName:completionHandler:
метод в HMHome
класс. Название группы службы, параметр к этому методу, должно быть уникальным в доме. Названия группы службы распознаны Siri.
[self.home addServiceGroupWithName:@"Away Lights" completionHandler:^(HMServiceGroup *serviceGroup, NSError *error) { |
if (error == nil) { |
// Successfully created the service group |
} |
else { |
// Unable to create the service group |
}]; |
Чтобы добавить службу к группе службы, используйте addService:completionHandler:
метод в HMServiceGroup
класс. Службы могут быть в одной или более группах службы.
[serviceGroup addService:service completionHandler:^(NSError *error) { |
if (error == nil) { |
// Successfully added service to service group |
} |
// Unable to add the service to the service group |
}]; |
Для получения групп службы для дома используйте serviceGroups
свойство в HMHome
класс.
NSArray *serviceGroups = self.home.serviceGroups; |
Для получения аксессуара для службы используйте accessory
свойство в HMServiceGroup
класс.
HMAccessory *accessory = service.accessory; |
Когда другие приложения изменяют группы службы, подобный аксессуарам, методы делегата вызываются. Если Ваше приложение использует группы службы, считайте Ссылку на протокол HMHomeDelegate для методов, которые необходимо реализовать для наблюдения этих изменений.