? ? HomeKit在iOS11前是不被我了解的,當(dāng)iOS11出來以后這個(gè)名詞就火了撬陵,然后就來學(xué)一波珊皿。首先我們需要知道HomeKit就是蘋果的智能家居管家网缝,借助HomeKit,用戶可以使用iOS設(shè)備控制家里所有標(biāo)有“Works with Apple HomeKit”(兼容 Apple HomeKit)的配件蟋定。這些配件包括燈粉臊、鎖、恒溫器驶兜、智能插頭及其他配件维费。其他不重要了!4偻酢O恕耳璧!
一:啟用HomeKit
1.你的App必須有簽名驗(yàn)證壁拉,既在開發(fā)者平臺(tái)配置AppID
2.啟用HomeKit在項(xiàng)目中凌简,在Xcode中
1).選擇View > Navigators > Show Project Navigator躏筏。
2).從Project/Targets彈出菜單中target(或者從Project/Targets的側(cè)邊欄)
3).點(diǎn)擊Capabilities查看你可以添加的應(yīng)用服務(wù)列表合蔽。
4).滑到HomeKit 所在的行并打開關(guān)税娜。
當(dāng)沒有報(bào)錯(cuò)說明你的配置沒有問題
3.一般情況下你的學(xué)習(xí)是沒有智能硬件設(shè)備支持的魄藕,你可以在官網(wǎng)上下載模擬器
運(yùn)行:
這樣基本配置就搞定了
二:了解一些基本概念
1).home(HMHome)
home代表的是一個(gè)智能設(shè)備的住所日麸,用戶擁有Home的數(shù)據(jù)并通過自己的任何一臺(tái)iOS設(shè)備訪問颤专,用戶也可以和客戶共享一個(gè)Home纽哥,但是客戶的權(quán)限會(huì)有更多限制。在用戶的所有home中栖秕,會(huì)有一個(gè)常用的home春塌,即為primary home。被指定為primary home的home默認(rèn)是Siri指令的對(duì)象簇捍,并且不能指定home只壳,就是說primary home是只讀的不能去設(shè)定。
2).room(HMRoom)
每個(gè)Home一般有多個(gè)room暑塑,并且每個(gè)room一般會(huì)有多個(gè)智能配件吼句。在home中,每個(gè)房間是獨(dú)立的room事格,并具有一個(gè)有意義的名字惕艳,這個(gè)名字是唯一的。(home的名字也是唯一的)例如“臥室”或者“廚房”驹愚,這些名字可以在Siri 命令中使用远搪。
3).accessory(HMAccessory)
一個(gè)accessory代表一個(gè)家庭中的自動(dòng)化設(shè)備,一個(gè)accessory的設(shè)備組成在于一個(gè)家庭么鹤,然后再指定到不同的room中终娃,例如一個(gè)智能插座,一個(gè)智能燈具是是屬于一個(gè)家庭,但是燈具可能被指定在廚房棠耕,而插座指定在臥室等余佛。
4).sevice(HMSevice)
一個(gè)sevice是accessory提供的一個(gè)實(shí)際服務(wù),例如打開或者關(guān)閉燈泡窍荧,這里和藍(lán)牙開發(fā)中的服務(wù)的意義基本是一樣的辉巡。每個(gè)sevice中也會(huì)有多個(gè)特征(characteristic),同藍(lán)牙蕊退,可以查看博主的藍(lán)牙博客:www.reibang.com/p/0e7294a87a94
三:邏輯和代碼的構(gòu)成
1.使用模擬器創(chuàng)建一個(gè)智能設(shè)備
1)創(chuàng)建設(shè)備
2)創(chuàng)建設(shè)備的服務(wù)并是指定隨機(jī)特征
2.家庭組成的創(chuàng)建
1)家庭的創(chuàng)建郊楣,是依靠家庭管理類:HMHomeManager
func initHomeManager() {
self.homeManager = HMHomeManager.init()
self.homeManager.delegate = self
}
func addHome(homeName: String) {
self.homeManager.addHome(withName: homeName) { (home, error) in
}}
2)當(dāng)創(chuàng)建成功后,可以獲取家庭的列表:
self.homeArr = self.homeManagerTool.homeManager.homes
3)當(dāng)?shù)玫郊彝チ斜砗筮x擇我創(chuàng)建的家庭瓤荔,然后可以為家庭創(chuàng)建房間room
self.currentHoom.addRoom(withName: roomNewName!, completionHandler: { (hoom, error) in
if error == nil{
self.getRoomArr(home: self.currentHoom)
}
})
4)當(dāng)創(chuàng)建房間后净蚤,可以獲取指點(diǎn)home的所有房間
self.roomArr = home.rooms
效果圖:
3.房間里面的智能設(shè)備和設(shè)備操作
進(jìn)入房間后我們可以得到Accessory即智能設(shè)備,智能設(shè)備是不能被用戶創(chuàng)建的而是需要HMAccessoryBrowser去獲取的
1).創(chuàng)建HMAccessoryBrowser
self.arressBrowser = HMAccessoryBrowser.init()
self.arressBrowser.delegate = self
2)當(dāng)創(chuàng)建完畢后我們需要開啟搜索未必添加的智能設(shè)備
self.arressBrowser.startSearchingForNewAccessories()
3)我們可以在協(xié)議中得到找到的智能設(shè)備
func accessoryBrowser(_ browser: HMAccessoryBrowser, didFindNewAccessory accessory: HMAccessory) {
self.accessoryArr.append(accessory)
self.myTableView.reloadData()
}
4)當(dāng)找到智能設(shè)備后输硝,我們可以把該智能設(shè)備添加到我們的房間今瀑,并指定我們的當(dāng)前房間
self.myHome.addAccessory(accessoryName) { (error) in
if error == nil{
if accessoryName.room != self.myRoom{
self.myHome.assignAccessory(accessoryName, to: self.myRoom, completionHandler: { (error1) in
if error1 == nil{
print("已經(jīng)將設(shè)備添加到了房間")
}else{
print("指定的設(shè)備添加失敗")
}
})
}else{
print("該設(shè)備已經(jīng)存在于房間")
}
}else{
print("添加設(shè)備到家失敗")
}}
5)指定到房間后我們可以獲取我們當(dāng)前房間的所有智能設(shè)備
for accessory in self.myRoom.accessories {
self.myAccessoryArr.append(accessory)
}
6)選中我們已經(jīng)添加到該房間的設(shè)備我們可以設(shè)置他的服務(wù)(此時(shí)和藍(lán)牙類似有服務(wù)和特征的說法)
當(dāng)特征是只讀的,就是接受外設(shè)的通知的
當(dāng)特征是只寫的点把,就是我們操作外設(shè)的
太長截圖:
7)特征發(fā)生改變的監(jiān)聽
func accessory(_ accessory: HMAccessory, didUpdateAssociatedServiceTypeFor service: HMService) {
print("特征發(fā)生了改變")
}
當(dāng)我們操作硬件的時(shí)候橘荠,如果硬件的特征值改變的話。系統(tǒng)會(huì)自動(dòng)調(diào)用這個(gè)方法郎逃,我們就可以看到特征值改變的情況哥童,那么我們拿到這個(gè)特征值之后,可以去做相應(yīng)的操作褒翰。
接下來就是大家最想看到的git地址:github.com/969661780/HomeKit.git
在這里2天的HomeKit就到此結(jié)束了贮懈,博主也是網(wǎng)上查了許多零碎的資料進(jìn)行的學(xué)習(xí),可能HomeKit目前為止用的的確不多影暴,歡迎大家一起討論错邦,希望人工智能普及的一天,喜歡博主記得Mark喲P椭妗!B追汀W倍摇!