HomeKit 开发教程(基础篇)

前言

最近刚刚弄完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,他把每个属性的要求说的很清楚。错误不一定是咱们代码的事,可能是设备的某个特性没有遵守协议的规则造成的,不过你自己要准确的定位错误再下结论。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容

  • 本文由CocoaChina翻译组成员iBenjamin_Go和浅夏@旧时光翻译自苹果开发文档:HomeKit De...
    涅槃简书阅读 5,202评论 6 15
  • 本文转载xianghuibeijingCSDN 转载过程中部分内可能丢失!请参考原作者:http://blog....
    大熊Q阅读 2,996评论 0 12
  • 简介 简介1> HomeKit库是用来沟通和控制家庭自动化配件的,这些家庭自动化配件都支持苹果的HomeKit A...
    Rui哥阅读 1,991评论 0 0
  • 一,我回来了 我隔着玻璃看那个像落叶一样干枯的快要飘零的老人。他带着帮助肺部运作的仪器,呼吸的氧气罩下我看不清他的...
    姜鱼虾阅读 605评论 0 5
  • 一天,鸡窝里。母鸡大声的在骂小鸡:“你这个笨东西,我在教你咯咯咯,你偏要叫叽叽叽。” 路过的山羊听到了,觉得真好笑...
    三生三世荷花子阅读 634评论 2 7