HomeKit在iOS11前是不被我了解的,当iOS11出来以后这个名词就火了,然后就来学一波。首先我们需要知道HomeKit就是苹果的智能家居管家,借助HomeKit,用户可以使用iOS设备控制家里所有标有“Works with Apple HomeKit”(兼容 Apple HomeKit)的配件。这些配件包括灯、锁、恒温器、智能插头及其他配件。其他不重要了!!!!
一:启用HomeKit
1.你的App必须有签名验证,既在开发者平台配置AppID
2.启用HomeKit在项目中,在Xcode中
1).选择View > Navigators > Show Project Navigator。
2).从Project/Targets弹出菜单中target(或者从Project/Targets的侧边栏)
3).点击Capabilities查看你可以添加的应用服务列表。
4).滑到HomeKit 所在的行并打开关。
当没有报错说明你的配置没有问题
3.一般情况下你的学习是没有智能硬件设备支持的,你可以在官网上下载模拟器
运行:
这样基本配置就搞定了
二:了解一些基本概念
1).home(HMHome)
home代表的是一个智能设备的住所,用户拥有Home的数据并通过自己的任何一台iOS设备访问,用户也可以和客户共享一个Home,但是客户的权限会有更多限制。在用户的所有home中,会有一个常用的home,即为primary home。被指定为primary home的home默认是Siri指令的对象,并且不能指定home,就是说primary home是只读的不能去设定。
2).room(HMRoom)
每个Home一般有多个room,并且每个room一般会有多个智能配件。在home中,每个房间是独立的room,并具有一个有意义的名字,这个名字是唯一的。(home的名字也是唯一的)例如“卧室”或者“厨房”,这些名字可以在Siri 命令中使用。
3).accessory(HMAccessory)
一个accessory代表一个家庭中的自动化设备,一个accessory的设备组成在于一个家庭,然后再指定到不同的room中,例如一个智能插座,一个智能灯具是是属于一个家庭,但是灯具可能被指定在厨房,而插座指定在卧室等。
4).sevice(HMSevice)
一个sevice是accessory提供的一个实际服务,例如打开或者关闭灯泡,这里和蓝牙开发中的服务的意义基本是一样的。每个sevice中也会有多个特征(characteristic),同蓝牙,可以查看博主的蓝牙博客:www.greatytc.com/p/0e7294a87a94
三:逻辑和代码的构成
1.使用模拟器创建一个智能设备
1)创建设备
2)创建设备的服务并是指定随机特征
2.家庭组成的创建
1)家庭的创建,是依靠家庭管理类:HMHomeManager
func initHomeManager() {
self.homeManager = HMHomeManager.init()
self.homeManager.delegate = self
}
func addHome(homeName: String) {
self.homeManager.addHome(withName: homeName) { (home, error) in
}}
2)当创建成功后,可以获取家庭的列表:
self.homeArr = self.homeManagerTool.homeManager.homes
3)当得到家庭列表后选择我创建的家庭,然后可以为家庭创建房间room
self.currentHoom.addRoom(withName: roomNewName!, completionHandler: { (hoom, error) in
if error == nil{
self.getRoomArr(home: self.currentHoom)
}
})
4)当创建房间后,可以获取指点home的所有房间
self.roomArr = home.rooms
效果图:
3.房间里面的智能设备和设备操作
进入房间后我们可以得到Accessory即智能设备,智能设备是不能被用户创建的而是需要HMAccessoryBrowser去获取的
1).创建HMAccessoryBrowser
self.arressBrowser = HMAccessoryBrowser.init()
self.arressBrowser.delegate = self
2)当创建完毕后我们需要开启搜索未必添加的智能设备
self.arressBrowser.startSearchingForNewAccessories()
3)我们可以在协议中得到找到的智能设备
func accessoryBrowser(_ browser: HMAccessoryBrowser, didFindNewAccessory accessory: HMAccessory) {
self.accessoryArr.append(accessory)
self.myTableView.reloadData()
}
4)当找到智能设备后,我们可以把该智能设备添加到我们的房间,并指定我们的当前房间
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("已经将设备添加到了房间")
}else{
print("指定的设备添加失败")
}
})
}else{
print("该设备已经存在于房间")
}
}else{
print("添加设备到家失败")
}}
5)指定到房间后我们可以获取我们当前房间的所有智能设备
for accessory in self.myRoom.accessories {
self.myAccessoryArr.append(accessory)
}
6)选中我们已经添加到该房间的设备我们可以设置他的服务(此时和蓝牙类似有服务和特征的说法)
当特征是只读的,就是接受外设的通知的
当特征是只写的,就是我们操作外设的
太长截图:
7)特征发生改变的监听
func accessory(_ accessory: HMAccessory, didUpdateAssociatedServiceTypeFor service: HMService) {
print("特征发生了改变")
}
当我们操作硬件的时候,如果硬件的特征值改变的话。系统会自动调用这个方法,我们就可以看到特征值改变的情况,那么我们拿到这个特征值之后,可以去做相应的操作。
接下来就是大家最想看到的git地址:github.com/969661780/HomeKit.git
在这里2天的HomeKit就到此结束了,博主也是网上查了许多零碎的资料进行的学习,可能HomeKit目前为止用的的确不多,欢迎大家一起讨论,希望人工智能普及的一天,喜欢博主记得Mark哟!!!!!