创建 Home 布局
创建 Home 布局
HomeKit 允许用户创建一个或者多个 Home 布局。每个 Home(HMHome)代表一个有网络设备的住所。用户拥有Home的数据并可通过自己的任何一台 iOS 设备进行访问。用户也可以和客户共享一个 Home,但是客户的权限会有更多限制。被指定为 primary home 的 home 默认是 Siri 指令的对象,并且不能指定 Home。
每个 Home 一般有多个 room,并且每个 room 一般会有多个智能配件。在 Home(HMHome) 中,每个房间是独立的 room,并具有一个有意义的名字,例如“卧室”或者“厨房”,这些名字可以在 Siri 命令中使用。一个 accessory(HMAccessory)代表实际家庭中的自动化设备,例如车库开门器。一个 sevice(HMService)是 accessory 提供的?种实际服务,例如打开或者关闭车库,或者车库上的灯。
如果你的 App 缓存了 Home 布局的信息,那么当其布局发声改变的时候,App 就需要更新这些信息。使用 HMHomeManager 对象可以从 HomeKit 数据库获取 HMHome 和其他相关的对象。本章描述的 API 获取对象后,你应该通过代理回调函数保持获取对象和 HomeKit 数据库同步,具体描述请参看“Observing HomeKit Database Changes"。
创建 Home Manager对象
使用 Home Manager—一个 HMHomeManager 对象的访问 home、room、配件、服务以及其他 HomeKit 对象。在创建家庭对象管理器(home manager)之后,直接设置它的代理,以便获取到这些对象之后及时的通知到你。
self.homeManager = [[HMHomeManager alloc] init];
self.homeManager.delegate = self;
当你创建一个 home manager 对象时,HomeKit 就开始从 HomeKit 数据库获取这些 homes 和相关对象,例如 room 和 accessory 对象。当 HomeKit 正在获取那些对象时,home manager 的 primaryHome 属性是 nil,并且 homes 属性是个空数组。你的 App 应该处理用户还没有完成创建 home 的情况,但是 App 应该等待直到 HomeKit 完成初始化。当获取对象完成之后,HomeKit 会发送 homeManagerDidUpdateHomes:消息给 home manager 的代理。
注意:当 App 进入前台或者在后台 Home manager 属性发生改变时,这个 homeManagerDidUpdateHomes:方法就会被调用,详情请参阅“Observing Changes to the Collection of Homes”。
获取 Primary Home 和 Homes 集合
通过 home manager 的 primaryHome 属性,可以得到 primary home,代码如下:
HMHome *home = self.homeManager.primaryHome;
使用 home manager 的 homes 属性可以得到用户的所有 home 的集合;例如自家主要居所、度假别墅以及办公室。每个 home 都对应一个独立的 home 对象。
HMHome *home;
for(home in self.homeManager.homes ){
…}
获取 Home 中的所有 room
在一个 home 中,rooms 属性定义 accessories 的物理位置。用 home 的 rooms 属性可以枚举 home 中的所 room。
HMHome *home = self.homeManager.primaryHome;
HMRome *room;
for(room in home.rooms){
…
}
获取 Room 中的 Accessories
Accessories 数组属于 home,但是被指定给了 home 中的 room。假如用户没有给一个 accessory 指定 room,那么这个 accessories 被指定一个默认的 room ,这个 room 是 roomForEntireHome 方法的返回值。用 room 的 accessories 属性可以枚举 room 中所有的 accessory。代码如下:
HMAccessory *accessory;
for(accessory in room.accessories){
…
}
如果你要展示一个个 accessory 的相关信息或者允许用户控制它,可设置 accessory 的代理方法并实现这个代理方法,详情请见“Observing Changes to Accessories”。
一旦你获取到一个 accessory 对象,你就可以访问它的服务和对象,详情请参阅“Accessing Services and Characteristics”。
更多建议: