iOS智能家居HomeKit学习,附完整代码

    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.一般情况下你的学习是没有智能硬件设备支持的,你可以在官网上下载模拟器


iOS智能家居HomeKit学习,附完整代码_第1张图片

运行:


iOS智能家居HomeKit学习,附完整代码_第2张图片

这样基本配置就搞定了

二:了解一些基本概念

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.jianshu.com/p/0e7294a87a94

三:逻辑和代码的构成

1.使用模拟器创建一个智能设备

1)创建设备


iOS智能家居HomeKit学习,附完整代码_第3张图片

2)创建设备的服务并是指定随机特征


iOS智能家居HomeKit学习,附完整代码_第4张图片

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

效果图:

iOS智能家居HomeKit学习,附完整代码_第5张图片

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)选中我们已经添加到该房间的设备我们可以设置他的服务(此时和蓝牙类似有服务和特征的说法)

当特征是只读的,就是接受外设的通知的

当特征是只写的,就是我们操作外设的

太长截图:


iOS智能家居HomeKit学习,附完整代码_第6张图片

7)特征发生改变的监听

func accessory(_ accessory: HMAccessory, didUpdateAssociatedServiceTypeFor service: HMService) {

print("特征发生了改变")

}

当我们操作硬件的时候,如果硬件的特征值改变的话。系统会自动调用这个方法,我们就可以看到特征值改变的情况,那么我们拿到这个特征值之后,可以去做相应的操作。

接下来就是大家最想看到的git地址:github.com/969661780/HomeKit.git

在这里2天的HomeKit就到此结束了,博主也是网上查了许多零碎的资料进行的学习,可能HomeKit目前为止用的的确不多,欢迎大家一起讨论,希望人工智能普及的一天,喜欢博主记得Mark哟!!!!!

你可能感兴趣的:(iOS智能家居HomeKit学习,附完整代码)