• 主页
  • 随笔
  • 技术笔记
  • 全部文章
标签 友链 关于我

  • 主页
  • 随笔
  • 技术笔记
  • 全部文章

IOS开发之HomeKit(三)

阅读数:次 2019-04-11
字数统计: 1.5k字   |   阅读时长≈ 5分

上一篇文章我们只是介绍了如何获取添加移除home和room对象,这篇继续往下走。还需要说的一点就是,我们所添加或者移除的这些homeKit对象都是会保存在一个共享的homeKit数据库中的。可以被多个应用程序通过homeKit框架访问,我们在自己写的homeKitAPP中添加和移除的home,room等homekit对象,在系统自带的家庭APP中的数据都是同步的。

获取room中的智能硬件对象(已经添加的)

获取到了room之后,当然是要获取其中的智能设备对象了。那么如何获取Room 中的Accessories呢?
Accessories 数组属于home,但是被指定给了home中不同的room。假如用户没有给一个accessory指定room,那么这个accessories被指定一个默认的room ,这个room是roomForEntireHome方法的返回值。用room的accessories属性可以枚举room中所有的accessory。这个是官方文档中的描述。
我大白话来一遍:比如说我的home中有一个智能灯泡,一个智能冰箱,一个智能热水器,一个智能电视。我把灯泡指定给了卧室这个room,冰箱指定给了厨房这个room,热水器指定给了卫生间room。电视没有指定room,那么就默认给它指定了一个room,这个room就是 HMRoom *defultRoom = [home roomForEntireHome]。当我需要获取到我的智能硬件对象的时候,我通过home.accessories获取到的是我家的所有智能硬件,也就是灯泡,冰箱和洗衣机以及电视。如果room是卧室,我通过room.accessories获得到的就是灯泡(我这里就举一个例子,卧室也可以有多个硬件),如果room是厨房,我通过room.accessories获得到的就是冰箱。

所以:HMAccessory *accessory;
for(accessory in room.accessories)
{  //获取到room中的所有 accessory对象}
HMAccessory *accessory;
for(accessory in hoom.accessories)
{  //获取到hoom中的所有accessory对象}

一旦我们获取到accessory对象,我们就可以展示一个个accessory的相关信息或者访问它的服务和对象这样就可以允许用户控制它,可设置accessory的代理方法并实现这个代理方法。如何控制后边再说,接下来先来说一说接下来这三个问题。

1.怎么找到一个新的accessory

2.如何为accessory指定room

3.如何来移除一个accessory

先说第一个问题:

Accessories封装了物理配件的状态,因此它不能被用户创建,也就是说我们不能去创建智能硬件对象,只能通过去搜寻它,然后添加。想要允许用户给家添加新的配件,我们可以使HMAccessoryBrowser对象在后台搜寻一个与home没有关联的配件,当它找到配件的时候,系统会调用委托方法来通知你的应用程序。
首先,在你需要搜索配件的VC.h文件中声明HMAccessoryBrowserDelegate,添加一个HMAccessoryBrowser对象属性:

avatar

然后在.m文件viewdidload里边创建对象设置代理:

avatar

创建一个搜索按钮,在按钮的点击方法里开始搜索硬件,并且实现代理方法:

avatar

点击按钮开始搜索新的智能硬件,如果搜索到硬件系统会通过didFindNewAccessory这个回调方法来通知我们发现了硬件,每次发现一个智能硬件这个方法都会调用一次(我这里使用模拟器开了两个只能硬件设备),log打印如下:

avatar

所以我这里每次发现一个硬件之后装入一个数组,然后用tableview显示出来:

avatar

程序运行效果如图

avatar

我们可以在离开页面的时候停止搜索新的设备:

avatar

现在说第二个问题:

拿到一个新的accessory对象之后,我们怎么为其指定一个room呢?
我这边为了方便,先这样处理。上图中我使用一个表把搜索到的设备列出来了,tableview下边的黄色界面是一个scrollview,可以左右滑动展示所有的room。我们点击某一个设备之后,就直接添加给当前显示的room中。如下图:

avatar

添加外设和指定room的方法都是由HMHome对象调用的。如果我们只是向home中添加了设备,没有指定room那么它就会被放入到一个默认的room中,上文中已经说到了。
下边看一下运行效果,还是上图中搜索到的洗衣机和电视两个智能硬件对象,当我点击了洗衣机之后,

avatar

因为使用的是模拟器,所以会有警告框,点击仍然添加就好了。点击之后,会弹出一个系统的配置页面:

avatar

上边的黑框是扫码的,我们使用的是模拟器,所以我们点击手动输入代码,将模拟器显示的代码输入进去:

avatar

这是模拟器显示的界面,输入红框中的代码:

avatar

输入代码代码之后,我们看控制台打印的输出:

avatar

此时,我们就成功的向卧室添加了一个洗衣机(我也不知道为什么我向卧室放一个洗衣机,哈哈)。。。。。。接下来我们就可以去更新UI来进行展示了。

现在说第三个问题

我们如何来更改accessory的名字,还有移除一个已经添加到home中的accessory对象呢?

avatar

移除一个设备:

avatar

这一篇基本把Accessory的相关处理介绍了一下,其实还有一些别的零碎东西,这里就不再介绍赘述,这些基本就够用了。获取到智能硬件之后,后边我们继续介绍如何去控制现有的设备,因为这里已经牵扯到了需要使用模拟器了,所以下次还是先介绍一下模拟器的使用。这次就先写到这里demo整理好了,会放到github上。大家一起来搞一搞。共同学习,一起进步!

  • 本文作者: Grx
  • 本文链接: https://ruixiaoguo.github.io/Grx.github.io/Grx.github.io/2019/04/11/IOS开发之HomeKit(三)/
  • 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
  • 智能家居

扫一扫,分享到微信

IOS开发之HomeKit(四)
IOS开发之HomeKit(二)
  1. 1. 上一篇文章我们只是介绍了如何获取添加移除home和room对象,这篇继续往下走。还需要说的一点就是,我们所添加或者移除的这些homeKit对象都是会保存在一个共享的homeKit数据库中的。可以被多个应用程序通过homeKit框架访问,我们在自己写的homeKitAPP中添加和移除的home,room等homekit对象,在系统自带的家庭APP中的数据都是同步的。
  • 获取room中的智能硬件对象(已经添加的)
    1. 0.1. 获取到了room之后,当然是要获取其中的智能设备对象了。那么如何获取Room 中的Accessories呢?
    2. 0.2. Accessories 数组属于home,但是被指定给了home中不同的room。假如用户没有给一个accessory指定room,那么这个accessories被指定一个默认的room ,这个room是roomForEntireHome方法的返回值。用room的accessories属性可以枚举room中所有的accessory。这个是官方文档中的描述。
    3. 0.3. 我大白话来一遍:比如说我的home中有一个智能灯泡,一个智能冰箱,一个智能热水器,一个智能电视。我把灯泡指定给了卧室这个room,冰箱指定给了厨房这个room,热水器指定给了卫生间room。电视没有指定room,那么就默认给它指定了一个room,这个room就是 HMRoom *defultRoom = [home roomForEntireHome]。当我需要获取到我的智能硬件对象的时候,我通过home.accessories获取到的是我家的所有智能硬件,也就是灯泡,冰箱和洗衣机以及电视。如果room是卧室,我通过room.accessories获得到的就是灯泡(我这里就举一个例子,卧室也可以有多个硬件),如果room是厨房,我通过room.accessories获得到的就是冰箱。
    4. 0.4. 一旦我们获取到accessory对象,我们就可以展示一个个accessory的相关信息或者访问它的服务和对象这样就可以允许用户控制它,可设置accessory的代理方法并实现这个代理方法。如何控制后边再说,接下来先来说一说接下来这三个问题。
  • 1.怎么找到一个新的accessory
  • 2.如何为accessory指定room
  • 3.如何来移除一个accessory
    1. 1. 先说第一个问题:
      1. 1.1. Accessories封装了物理配件的状态,因此它不能被用户创建,也就是说我们不能去创建智能硬件对象,只能通过去搜寻它,然后添加。想要允许用户给家添加新的配件,我们可以使HMAccessoryBrowser对象在后台搜寻一个与home没有关联的配件,当它找到配件的时候,系统会调用委托方法来通知你的应用程序。
      2. 1.2. 首先,在你需要搜索配件的VC.h文件中声明HMAccessoryBrowserDelegate,添加一个HMAccessoryBrowser对象属性:
      3. 1.3. 然后在.m文件viewdidload里边创建对象设置代理:
      4. 1.4. 创建一个搜索按钮,在按钮的点击方法里开始搜索硬件,并且实现代理方法:
      5. 1.5. 点击按钮开始搜索新的智能硬件,如果搜索到硬件系统会通过didFindNewAccessory这个回调方法来通知我们发现了硬件,每次发现一个智能硬件这个方法都会调用一次(我这里使用模拟器开了两个只能硬件设备),log打印如下:
      6. 1.6. 所以我这里每次发现一个硬件之后装入一个数组,然后用tableview显示出来:
      7. 1.7. 程序运行效果如图
      8. 1.8. 我们可以在离开页面的时候停止搜索新的设备:
  • 现在说第二个问题:
    1. 0.1. 拿到一个新的accessory对象之后,我们怎么为其指定一个room呢?
    2. 0.2. 我这边为了方便,先这样处理。上图中我使用一个表把搜索到的设备列出来了,tableview下边的黄色界面是一个scrollview,可以左右滑动展示所有的room。我们点击某一个设备之后,就直接添加给当前显示的room中。如下图:
    3. 0.3. 添加外设和指定room的方法都是由HMHome对象调用的。如果我们只是向home中添加了设备,没有指定room那么它就会被放入到一个默认的room中,上文中已经说到了。
    4. 0.4. 下边看一下运行效果,还是上图中搜索到的洗衣机和电视两个智能硬件对象,当我点击了洗衣机之后,
    5. 0.5. 因为使用的是模拟器,所以会有警告框,点击仍然添加就好了。点击之后,会弹出一个系统的配置页面:
    6. 0.6. 上边的黑框是扫码的,我们使用的是模拟器,所以我们点击手动输入代码,将模拟器显示的代码输入进去:
    7. 0.7. 这是模拟器显示的界面,输入红框中的代码:
    8. 0.8. 输入代码代码之后,我们看控制台打印的输出:
    9. 0.9. 此时,我们就成功的向卧室添加了一个洗衣机(我也不知道为什么我向卧室放一个洗衣机,哈哈)。。。。。。接下来我们就可以去更新UI来进行展示了。
  • 现在说第三个问题
    1. 0.1. 我们如何来更改accessory的名字,还有移除一个已经添加到home中的accessory对象呢?
    2. 0.2. 移除一个设备:
  • 这一篇基本把Accessory的相关处理介绍了一下,其实还有一些别的零碎东西,这里就不再介绍赘述,这些基本就够用了。获取到智能硬件之后,后边我们继续介绍如何去控制现有的设备,因为这里已经牵扯到了需要使用模拟器了,所以下次还是先介绍一下模拟器的使用。这次就先写到这里demo整理好了,会放到github上。大家一起来搞一搞。共同学习,一起进步!
  • © 2014-2024 Grx
    GitHub:hexo-theme-yilia-plus by Litten
    本站总访问量次 | 本站访客数人
    • 标签
    • 友链
    • 关于我

    tag:

    • life
    • OC
    • Google
    • Fastlane
    • Flutter
    • hexo
    • 智能家居
    • Apple Watch
    • 逆向
    • Lottie
    • PHP
    • cocos2d
    • Mac
    • MonkeyKing
    • RN
    • Swift
    • RAC
    • WKWebView
    • WebView
    • Xcode
    • xcode
    • ios
    • Android
    • appledoc
    • MMKV
    • LLVM
    • FreamWork






      
      

    • 唐巧的博客
    • 王巍(喵神)OneVsDen
    • 阿里“念纪“
    • 滴滴-戴铭
    • 郭曜源(ibireme)
    • 阿里”南栀倾寒“
    • 蘑菇街李忠
    • 码农人生
    • 玉令天下
    • bang
    • Ian的博客
    这里是Grx的个人博客:
    iOS开发工程师一枚
    联系方式:
    QQ:1217255509
    Email:grx0917@sina.com
    知识管理,时间管理,自我管理,架构即未来
    欢迎技术交流!