HomeKit介绍
苹果Homekit智能家居平台是智慧家庭控制中心,让用户能够通过一个应用对所有智能家居类硬件产品进行统一管理
HomeKit框架
HomeKit框架 是App用来沟通和控制家庭自动化配件的,这些家庭自动化配件都支持苹果的HomeKit Accessory Protocol。HomeKit应用程序可让用户发现兼容配件并配置它们。用户可以创建一些action来控制智能配件(例如恒温或者光线强弱),对其进行分组,并且可以通过Siri触发。HomeKit 对象被存储在用户iOS设备的数据库中,并且通过iCloud还可以同步到其他iOS设备。HomeKit支持远程访问智能配件,并支持多个用户设备和多个用户。HomeKit 还对用户的安全和隐私做了处理。
可以创建一个与苹果官方HomeKit App相似的 App
如何在不进行苹果认证的情况下实现HomeKit
使用 Homebridge 技术模拟 HomeKit
Homebridge 是一种轻量级NodeJS框架,可以在家庭网络运行,模拟HomeKit Api ,可以为HomeKit 和 一些不支持HomeKit的设备提供链接桥梁。例如小米的HomeKit 就是利用此Api实现的(小米HomeKit 路由器插件已下架)类似的还有利用树莓派 运行 Homebridge 插件,来实现HomeKit和第三方设备的链接
如何构建 HomeKit App
1 创建 房间管理 homeManager
HomeKit会有一个或者多个家庭,但是最少是一个。管理或者创建家庭呢。
homeManager创建的时候,HomeKit就开始从HomeKit数据库获取这些homes和相关对象。 然后实现代理方法
当房间发生变化的时候会走这些代理方法。导入头文件,和在.h中加入 用homeManager来管理我们的房间了。操作房间, 使用homeManager的几个属性,primaryHome,和homes
HMHome home = homeManager.primaryHome; //拿到你的主家庭
NSArray homeArray = homeManger.homes; //获取到所有的家庭
2 home(家庭)
home就是从homeManager拿出来的一个家庭,然后拿着这个home搞一些事情,home中有太多的事情可以搞了,比如说在这个home中添加一个房间,或者配件呀,给房间改个名字呀,看看这个home有多少个房间或者配件呀,等等。太home(家庭)有了,就要给这个home加配件(accessory)了。
3.accessory(配件)
加入配件你得先能找得到配件,若何发现配件。 创建HMAccessoryBrowser对象
HMAccessoryBrowser *accessoryBrowser = [[HMAccessoryBrowser alloc] init] ;
accessoryBrowser.delegate = self;
然后实现代理方法,实现哪些代理方法自己去HMAccessoryBrowser里面看一看
[accessoryBrowser startSearchingForNewAccessories]; //开始搜索配件
[accessoryBrowser stopSearchingForNewAccessories]; //结束搜索配件
当有配件被发现的时候会走didFindNewAccessory代理方法,然后你只需要
//拿出已经找到的配件
NSArray *accessoryArray = accessoryBrowser.discoveredAccessories;
从发现的配件数组总拿出一个 HMAccessory *accessory,然后调用
//添加配件
[homeManager.primaryHome addAccessory:accessory completionHandler:^(NSError *error) {}];
走这段代码的时候,会自动跳到HomeKit提供的界面,他会帮你处理扫描密码和配对过程,这样就把配件加入到房间中。这里有一点要说明一下,配件实际是应该加入到room中的,如果你还没有创建room,那会自动把配件加入到默认room中,怎么创建room呢,我就不说了,就是用HMHome的对象 addRoom...,移除removeRoom...,accessory(配件)或者房间(home)添加成功后他会通知代理,你就可以刷新界面了。如果你的添加或者删除操作失败了会返回给你个error,这个error你可以参照HMError来看一下是什么导致的错误。 在accessory的对象中你就可以获取到配件中的services(服务),name,是否在线,UUID,在哪个room下,还有一些属性和代理方法去看看他自己的接口。
4.service(服务)
服务就是你这个配件中都有哪些服务,说白了就是对这个配件功能的分类,服务是分类型的,当你添加完配件之后,里面肯定有至少服务,这个服务里面放着你的配件的基本信息,这些是必须有的,要是没有的话你的配件是添加不上的,所以这点不是ios程序员该关心的,我们关心的是有哪些服务,服务里面有哪些characteristic(特性)。强调一点每个服务都是分类型的,
NSArray *serviceArray = accessory.services; //获取服务数组
你要获取拿到哪一个服务可以根据类型来判断。服务只可以修改名字和类型的方法 ,属性有很多,不过我只用到了name(名字),characteristics(特性数组),associatedServiceType(类型),其他的看看接口吧,说的还是蛮详细的。
5.characteristic(特性)
特性就是你的这个配件的信息和操作了。特性也有多类型,比如开关类型;brightness(调光),还可以自定义类型,类型使用UUID来区分,自定义的类型用UUID是不一样,不是自定义的类型UUID是固定的,没了特性都会有value。你可以characteristic.value 看的到,每种特性还会分为,只读,只写,读写,可以写的是可以通过
[characteristic writeValue:tagetValue completionHandler:^(NSError *error)
{ //code
}];
来修改这个特性的value值,达到控制设备的操作。
6.user(用户
每个创建home的用户都是这个home的管理者,你可以邀请其他人到你的家来。同样你也可以删掉。除了管理者这之外的人,不可以改变home的格局,但是可以识别智能电器、读写特性、观察特性值变化、执行动作集。 在ios9以后,只需要调用
[home manageUsersWithCompletionHandler:^(NSError * _Nullable error) {
}];
HomeKit会帮你管理你的user;不过在9之前,添加,删除用户是分开管理的,例如添加
[self.home addUserWithCompletionHandler:^(HMUser *user, NSError *error) {
}];