Получение домашнего расположения

HomeKit позволяет пользователям создавать расположение для один или больше их домов. Дом (HMHome) представляет единственное жилье, имеющее сеть аксессуаров. Данные дома принадлежат пользователю и могут быть получены доступ от любого из устройств на iOS пользователя. Пользователь может также совместно использовать дом с гостем, у которого есть более ограниченный доступ. Один дом определяется как основной дом и является значением по умолчанию домой для команд Siri, не указывающих дом.

Каждый дом может иметь многократные комнаты и аксессуары, добавленные к каждой комнате. Комната (HMRoom) представляет отдельную комнату своими силами. Это имеет понятное имя, такое как «гостиная» или “кухня", которая может использоваться в командах Siri. Аксессуар (HMAccessory) физическое домашнее устройство автоматизации, такое как устройство открывания гаражных ворот. Служба (HMService) практическая услуга, предоставленная аксессуаром, таким как открытие и закрытие двери гаража или света на устройстве открывания гаражных ворот.

../Art/homes_2x.png../Art/homes_2x.png

Если Ваша информация о кэшах приложения о расположении дома, это должно обновить ту информацию когда домашние изменения макета. Используйте a HMHomeManager возразите для выборки HMHome и связанные объекты от базы данных HomeKit. После выборки объектов с помощью APIs, описанного в этой главе, сохраните объекты синхронизируемыми с базой данных посредством обратных вызовов делегата, как описано в Наблюдении Изменений Базы данных HomeKit.

Получение домашнего объекта менеджера

Используйте домашнего менеджера, HMHomeManager объект, к доступу домой, комнате, аксессуару, службе и другим объектам HomeKit. Сразу после создания домашнего менеджера, набор его делегат так, чтобы Вы были уведомлены, когда начальная выборка этих объектов завершена.

self.homeManager = [[HMHomeManager alloc] init];
self.homeManager.delegate = self;

При создании домашнего объекта менеджера HomeKit начинает выбирать дома и связанные объекты — например, комната и объекты аксессуара — от базы данных HomeKit. В то время как HomeKit выбирает эти объекты, значение для домашнего менеджера primaryHome свойство nil, и homes свойство является пустым массивом. Ваше приложение должно обработать случай, в котором пользователь еще не создал дом, но приложение не должно вести себя, как будто нет никаких домов, пока HomeKit не завершает начальную выборку. HomeKit отправляет homeManagerDidUpdateHomes: обменивайтесь сообщениями делегату домашнего менеджера, когда выборка будет завершена.

Получение основного дома и набора домов

Для получения основного дома используйте primaryHome свойство домашнего менеджера.

HMHome *home = self.homeManager.primaryHome;

Используйте домашнего менеджера homes свойство для получения всех домов пользователя; например, фактическое место жительства, загородный дом и офис. Каждый дом представлен отдельным домашним объектом.

HMHome *home;
for (home in self.homeManager.homes){
}

Получение комнат в доме

Комнаты определяют физические расположения аксессуаров в доме. Для перечисления комнат в доме используйте дом rooms свойство.

HMHome *home = self.homeManager.primaryHome;
HMHome *room;
for (room in home.rooms){
}

Получение аксессуаров в комнате

Аксессуары принадлежат дому, но присваиваются комнате в доме. Если пользователь не присваивает аксессуар комнате, аксессуар присваивается комнате по умолчанию, возвращенной roomForEntireHome метод. Для перечисления аксессуаров в комнате используйте комнату accessories свойство.

HMAccessory *accessory;
for (accessory in room.accessories){
}

Если Вы выводите на экран информацию об аксессуаре или позволяете пользователю управлять аксессуаром, устанавливать делегата аксессуара и реализовывать вспомогательный методы делегата, как описано в Наблюдении Изменений в Аксессуарах.

Как только у Вас есть вспомогательное объект, можно получить доступ к его службам и их характеристикам, как описано в Accessing Services и Характеристиках.

Получение аксессуаров в доме

Для получения всех аксессуаров непосредственно от домашнего объекта, не перечисляя комнаты в доме (как описано в Получении Аксессуаров в Комнате) используйте accessories метод в HMHome класс.