重要:本文是针对开发过程中使用的API或者技术的初步文档。苹果提供该文档旨在为开发者使用该技术和苹果产品上的编程接口提供帮助。这些信息可能会发生变化,依据该文档开发的软件应该使用最新的操作系统软件和最终文档进行测试。文档的新版本可能会提供新的API和技术。

Home Kit在那些支持苹果Home Automation Protocol和iOS设备的附属配件之间实现了无缝集成和融合,从而推进家庭自动化的发展和革新。通过一个通用的家庭自动化设备协议,以及一个可以配置这些设备并与之通信的公开API,Home Kit使得app用户控制自己的home成为可能,而不需要由生产家庭自动化配件的厂商创建。Home Kit也使得来自多个厂商的家庭自动化配件集成为一体,而无需厂商之间彼此直接协调。

Home Kit允许第三方应用执行以下三大主要功能:

1.发现附属设备,并把它们添加到一个持久的、跨设备的home配置数据库中。

2. 在home配置数据库中展示、编辑以及操作数据。

3.与配置的附属设备和服务进行通信,从而使之执行相关操作,比如关掉起居室的灯。

Home配置数据库并不仅仅适用于第三方应用,也适用于Siri。用户可用Siri发出指令,比如“Siri,关掉起居室的灯。”如果用户通过合逻辑的分组配件、服务以及命令创建了家居配置,那么Siri可通过声音控制来完成一系列复杂精细的操作。

Home Kit把home看作一个家庭自动化配件的集合。家居配置的目的是允许终端用户为他们购买和安装的家庭自动化配件提供有意义的标签和分组。应用程序可以提供建议来帮助用户创建有意义的标签和分组,但不能把它们自己的偏好设定强加给用户--用户的意愿最重要。

基本数据包含层级类似下边这样:

Homes(HMHome)是最顶层的容器,展示了用户一般都会认为是单个家庭单位的结构。用户可能有多个离得较远的住所,比如一个经常使用的住所和一个度假别墅。或者他们可能有两个离得比较近的住所,比如一个主要住宅和一个别墅。

Rooms (HMRoom)是home的可选部分,并且代表home中单独的room。room并没有任何物理特性--大小、位置等等。对用户来说,它们是简单的有意义的命名,比如“起居室”或者“厨房”。有意义的room名称可以启用类似“Siri,打开起厨房的灯”的指令。

附属设备被安装在home中,并且被分配给每个room。它们是实际的物理家庭自动化设备,比如一个车库门遥控开关。如果用户没有配置任何room,那么Home Kit将会把附属设备分配给home中特殊的默认room。

Services (HMService)是由附属配件提供的实际服务。附属配件有用户可控制的服务,比如灯光;也有它们自用的服务,比如框架更新服务。Home Kit更多关注用户可以控制的服务。单个附属配件可能有多个用户可控制的服务。比如大部分车库遥控开关有打开或者关闭车库门的服务,并且在车库门上还有控制灯光的服务。

Zones (HMZone)是home中可选择的room分组。“Upstairs”和“downstairs”可以由zones代表。Zones是完全可选择的,room不需要处于zone中。通过把room添加到zone中,用户可以给Siri发命令,比如“Siri,打开楼下所有的灯。”

类    

NSObject:NSObject是大部分Objective-C类层次的基类。 
HMAccessory:一个HMAccessory对象代表一个家庭自动化配件,比如车库门遥控开关或者一个恒温器。
HMAccessoryBrowser:一个HMAccessoryBrowser对象是一个用来发现新附属配件的网络浏览器。
HMAction:HMAction是Home Kit中行为操作的抽象基类。
    (HMCharacteristicWriteAction:HMCharacteristicMetadata对象用来代表操作集中的一个操作。)
HMActionSet:HMActionSet对象代表应用于单个设置的一组操作(HMAction的实例)
HMCharacteristic:HMCharacteristic对象代表某个服务的特性,比如,灯是打开还是关闭,或者温度调节器设定了什么温度。
HMCharacteristicMetadata:HMCharacteristicMetadata对象代表某个特性的元数据。
HMHome:HMHome对象允许你在home中与不同附属设备进行通信并安装配件。
HMHomeManager:HMHomeManager对象管理一个或者多个home集合。
HMRoom:一个HMRoom对象被用来代表home中的一个room。
HMService:HMService对象代表附属配件提供的服务。
HMServiceGroup:HMServiceGroup对象代表配件提供的服务的集合,简化了把服务当作单一实体处理的过程。
HMTrigger:HMTrigger对象代表触发事件,在满足触发条件时,它用来触发一个或者多个操作集(HMActionSet的实例)。
    (HMTimerTrigger:HMTimerTrigger对象代表基于计时器的触发器。)
HMZone:HMZone对象代表一个room的集合--用户认为是单个区域或者zone,比如“起居室”和“厨房”可能会被分在一个叫做“Downstairs”的zone中。

Protocols

HMAccessoryBrowserDelegate:该协议定义了HMAccessoryBrowser对象的接口,以通知委托发现了新的附属配件。
HMAccessoryDelegate:该协议定义了从附属配件到委托状态更新的通信方法。
HMHomeDelegate:该协议定义了home中配置改变和在home中执行操作集的状态的通信方法。
HMHomeManagerDelegate:该协议定义了home manager对象如何把改变传达给它们的委托。

Other Reference

Home Kit框架简介的更多相关文章

  1. Spring 系列: Spring 框架简介 -7个部分

    Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...

  2. 《HiWind企业快速开发框架实战》(0)目录及框架简介

    <HiWind企业快速开发框架实战>(0)目录及框架简介 本系列主要介绍一款企业管理系统快速开发框架,该框架旨在快速完成企业管理系统,并实现易维护可移植的目标. 使用逐个系统模块进行编码的 ...

  3. Yaf零基础学习总结1-Yaf框架简介

    从今天开始,给大家讲解下yaf框架,讲解之前肯定要了解下yaf是个什么东西,当然,从标题我们已经知道yaf是个PHP框架了,也许大家对于PHP框架并不陌生,一般PHP程序员用过的框架至少有一两个吧,国 ...

  4. hdwiki 框架简介

    虽然HDwiki是一个开源的wiki系统,并且代码简洁易懂,但如果想在系统上做做进一步开发还需要对框架有一个整体的认识.熟悉了HDwiki的框架以后完全可以独立出来做其他功能的开发,当做一个开源的PH ...

  5. Apache—DBUtils框架简介

    转载自:http://blog.csdn.net/fengdongkun/article/details/8236216 Apache—DBUtils框架简介.DbUtils类.QueryRunner ...

  6. Jersey框架一:Jersey RESTful WebService框架简介

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

  7. Web自动化框架LazyUI使用手册(1)--框架简介

    作者:cryanimal QQ:164166060 web端自动化简介 web端自动化,即通过自动化的方式,对Web页面施行一系列的仿鼠标键盘操作,以达到对Web页面的功能进行自动化测试的目的. 其一 ...

  8. python运维开发(二十二)---JSONP、瀑布流、组合搜索、多级评论、tornado框架简介

    内容目录: JSONP应用 瀑布流布局 组合搜索 多级评论 tornado框架简介 JSONP应用 由于浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. ...

  9. Spring 系列: Spring 框架简介(转载)

    Spring 系列: Spring 框架简介 http://www.ibm.com/developerworks/cn/java/wa-spring1/ Spring AOP 和 IOC 容器入门 在 ...

随机推荐

  1. c++ 数组元素拷贝到容器(copy)

    #include <iostream> // cout #include <algorithm> // copy #include <vector> // vect ...

  2. Qt与FFmpeg联合开发指南(四)——编码(2):完善功能和基础封装

    上一章我用一个demo函数演示了基于Qt的音视频采集到编码的完整流程,最后经过测试我们也发现了代码中存在的问题.本章我们就先处理几个遗留问题,再对代码进行完善,最后把编码功能做基础封装. 一.遗留问题 ...

  3. Codeforces 260D - Black and White Tree

    260D - Black and White Tree 思路:把两种颜色先按值sort一下,最小值肯定是叶子,然后把这个叶子和另外一中颜色的一个最小值的节点连接起来,再把这个节点变成叶子,把值减掉就可 ...

  4. 构造函数用return 会出显什么情况

    首先我们都知道js中构造函数一般应该是这样的 function Super (a) { this.a = a; } Super.prototype.sayHello = function() { al ...

  5. SpringBoot导入excle文件数据

    本文主要描述,Springboot框架下上传excel,处理里面相关数据做逻辑分析,由于用到的是前后端分离技术,这里记录的主要是后端java部分,通过与前端接口进行对接实现功能 1.在pom.xml文 ...

  6. 同步代码时忽略maven项目 target目录

    方式一: 在项目代码路径,如: F:\xyx\sl  鼠标右键,“TortoiseSVN”-- >“Settings” -->"Subversion"-->&qu ...

  7. js中文乱码

    js中文乱码 我的页面是uft-8,处理中文还是乱码, 所在在处理页面增加了 request.setCharsetEncoding("UFT-8"); ////////////// ...

  8. php fpm深度解析

    摘自:https://www.cnblogs.com/wanghetao/p/3934350.html 当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求, ...

  9. 『Networkx』常用方法

    这是一个用于分析'图'结构的包,由于我只是用到了浅显的可视化功能,所以这个介绍会对其使用浅尝辄止. 解决matplotlib中文字体缺失问题, from pylab import mpl mpl.rc ...

  10. hdu6394Tree lct

    树上弹飞绵羊,现场树分块没写出来= = 先预处理倍增,新建一个n+1节点,能弹到就建一条边,然后每操作2就cut,然后link,1的答案就是x到n+1的距离, //#pragma GCC optimi ...