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閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容

  • 本文由CocoaChina翻譯組成員iBenjamin_Go和淺夏@舊時光翻譯自蘋果開發文檔:HomeKit De...
    涅槃簡書閱讀 5,297評論 6 15
  • 本文轉載xianghuibeijingCSDN 轉載過程中部分內可能丟失!請參考原作者:http://blog....
    大熊Q閱讀 3,038評論 0 12
  • 簡介 簡介1> HomeKit庫是用來溝通和控制家庭自動化配件的,這些家庭自動化配件都支持蘋果的HomeKit A...
    Rui哥閱讀 2,021評論 0 0
  • 一,我回來了 我隔著玻璃看那個像落葉一樣干枯的快要飄零的老人。他帶著幫助肺部運作的儀器,呼吸的氧氣罩下我看不清他的...
    姜魚蝦閱讀 615評論 0 5
  • 一天,雞窩里。母雞大聲的在罵小雞:“你這個笨東西,我在教你咯咯咯,你偏要叫嘰嘰嘰。” 路過的山羊聽到了,覺得真好笑...
    三生三世荷花子閱讀 652評論 2 7