美文网首页HomeKit瞎JB折腾
HomeKit 开发教程(基础篇)

HomeKit 开发教程(基础篇)

作者: 也许不会重来 | 来源:发表于2016-12-12 03:32 被阅读870次

    前言

    最近刚刚弄完HomeKit项目,写个教程当做个笔记。之前没有接触个HomeKit,刚开始的时候一脸的蒙蔽,200多页的英文协议,看了一下目录瞬间就关上了,然后上网找一些相关的文档,不过基本上都是官方提供的开发指南,其实文档说的还蛮清楚的,但是对与没有接触HomeKit的来说还是不知道如何下手。下面我就简单写写一些主要功能怎么用。
    HomeKit开发指南:开发指南(中文版)

    正文

    对于如何集成HomeKit,官方文档说的很清楚,我就不在多说了。
    对于HomeKit是什么以及感念之类的你都可以参考他的开发指南。
    普通的HomeKit基本包含几个概念,home (家庭),room(房间) ,zone(控件,可以没有),accessory(配件),service(服务),characteristic(特性)这几类,他们之间是从大到小的包含关系。

    1.homeManager(房间管理)

    HomeKit会有一个或者多个家庭,但是最少是一个。我们要怎么管理或者创建家庭呢。

    homeManager创建的时候,HomeKit就开始从HomeKit数据库获取这些homes和相关对象。
    然后实现代理方法

    当你的房间发生变化的时候会走这些代理方法。不要忘记导入头文件,和在.h中加入<HomeManagerDelegate>
    这样我们就可以用homeManager来管理我们的房间了。那么如何来操作房间呢,
    这个homeManager有几个属性,primaryHome,和homes
    <pre>
    HMHome *home = homeManager.primaryHome; //拿到你的主家庭NSArray *homeArray = homeManger.homes; //获取到所有的家庭
    </pre>
    对于家庭的一些操作,homeManager 的一些方法

    - (void)updatePrimaryHome:(HMHome *)home completionHandler:(void (^)(NSError * __nullable error))completion    //修改为主家庭
    - (void)addHomeWithName:(NSString *)homeName completionHandler:(void (^)(HMHome * __nullable home, NSError * __nullable error))completion   //新增家庭
    - (void)removeHome:(HMHome *)home completionHandler:(void (^)(NSError * __nullable error))completion   //删除家庭
    

    以修改为主家庭为例说一说,主家庭的意思是,你当前要管理的家庭,你只能管理你当前家庭内的房间或者配件,若你想管理其他家庭,那你从homeArray中拿出一个家庭,调用上面方法就OK了。新增跟删除我猜你们已经会了,我就不再都说了。

    2.home(家庭)

    home就是从homeManager拿出来的一个家庭,然后拿着这个home搞一些事情,home中有太多的事情可以搞了,比如说在这个home中添加一个房间,或者配件呀,给房间改个名字呀,看看这个home有多少个房间或者配件呀,等等。太多了,我就不挨个说了,如果你真想知道我告诉你个办法,在你的项目中按住command 然后鼠标点一下HMHome,你就知道了,是不是很简单,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) {
    }];
    

    HomeKit数据库

    每个Home都有一个HomeKit数据库。如下图所示,HomeKit数据库会安全地和home授权的用户的iOS设备以及潜在的客人的iOS设备进行同步。为了给用户展示当前最新的数据,你的应用需要观察HomeKit数据库的变化。

    关于数据库,看明白这个图就可以了。

    总结

    基本的东西大概就这么多了,其他的多参照开发指南和HomeKit接口,最后写几点总结
    1.一定要搞明白HomeKit整个过程是怎么回事,一旦清楚,真是得心应手,你想要什么,你想做什么操作,直接用就OK,都是现成的接口属性,对于初学者来说,一定要多看几遍开发指南,不要感觉看两遍你就知道怎么回事,里面涵盖太多的东西了,当你屡不清了,你就看一遍肯定会有新的收获。
    2.在你开发的时候遇到错误的时候,你可以看看HomeKit的那个200多页的英文协议,你要是有时间的换从头到尾看一遍,没时间的话就当个字典用就OK,他把每个属性的要求说的很清楚。错误不一定是咱们代码的事,可能是设备的某个特性没有遵守协议的规则造成的,不过你自己要准确的定位错误再下结论。

    相关文章

      网友评论

      • 18f2f27d464d:user是默认不用处理还是必须要操作管理下
        也许不会重来:需要用的时候再处理。
      • 百里玄卿:你好,自己的网关这一端是怎么连接设备的?或者说APP-----网关------苹果(非)认证的Accessory配件这一条通道是怎样工作的?
        也许不会重来:首先给你的配件设置网络,保证通讯,然后通过认证将配件加入到你的HomeKit中。
      • BDCode:你好 我想请教下连接控制摄像头 为什么不能设置双向声音?camera可以拿到影像,我现在想做的也就是类似于门铃对讲

      本文标题:HomeKit 开发教程(基础篇)

      本文链接:https://www.haomeiwen.com/subject/ieqmmttx.html