作者 | 梁中琪

责编 | 薄荷茶

微信公众号ID | csdn_iot

1

Homebridge简介

Homebridge 是一个轻量级 Node.js 服务器,用 NodeJS 模拟了一个HomeKit Accessory Server,可以在家庭网络上模拟iOS HomeKit API运行。Homebridge 逆向了 HomeKit 协议,让普通的 Wi-Fi 设备也能接入 HomeKit ,从而通过 Siri 控制。

Homebridge 的作者 KhaosT 是个在美留学的中国人,曾在苹果的 HomeKit 团队实习过。据说当 KhaosT 逆向 HomeKit 之后写了篇博客,但由于涉及到商业机密被苹果法务要求删除文章,好在代码已经早就 fork 开了所以代码才得以流传到现在。试想要是当初代码没有开源,恐怕我们现在还享受不到这一成果呢。

根据 Homebridge 文档,Homebridge可以运行在Linux、Windows和macOS等系统,那么,这里的测试平台就以树莓派为例。

2

Homebridge-mqtt

Homebridge-mqtt是Homebridge一个动态插件。它以MVC模式设计。Homebridge-mqtt允许你通过mqtt API添加和控制配件,进而通过苹果的HomeKit应用控制这些设备。

2.1

安装

Homebridge的安装需要npm,树莓派下安装npm有点麻烦,这里就不详细描述。安装好npm后只需按顺序输入下面语句即可安装homebridge及其相关依赖包。

sudo npm install -g --unsafe-perm homebridge hap-nodejs node-gyp

cd /usr/local/lib/node_modules/homebridge/

sudo npm install --unsafe-perm bignum

cd /usr/local/lib/node_modules/hap-nodejs/node_modules/mdns

sudo node-gyp BUILDTYPE=Release rebuild

接下来可以安装homebridge-mqtt了。

npm install -g homebridge-mqtt

1.2

配置

在树莓派上,Homebridge 的配置主要是编辑「/home/pi/.homebridge」下的「config.json」文件。下面是homebridge-mqtt 配置示例。

{

"bridge": {

"name": "Homebridge",

"username": "12:34:56:78:90:AB",

"port": 38960,

"pin": "123-45-678"

},

"platforms": [{

"platform": "mqtt",

"name": "mqtt",

"url": "mqtt://127.0.0.1",

"port": 61613,

"topic_type": "multiple",

"topic_prefix": "homebridge",

"username": "admin",

"password": "password",

"cert": "/path/to/certificate.pem",

"key": "path/to/key.pem",

"ca": "/path/to/ca_certificate.pem"

}]

}

其中,与 homebridge 配置相关的是 bridge 字段。name 表示 homebridge 要在 HomeKit 显示的名称;username 一般是本地主机的 MAC 地址;port 是使用的端口;pin 则是 HomeKit 配对的时候,需要输入的 pin 码。homebridge-mqtt 配置字段的含义,则参考下表。

表1 homebridge-mqtt 配置字段含义

如果需要添加其他platform,就在「platforms」数组字段里继续添加json即可。

1.3

启动

控制台启动 homebridge 很简单,直接输入「homebridge」即可。如果需要指定配置文件路径,可以使用「-U」参数。例如:「homebridge -U ~/.homebridge」

3

Homebridge-mqtt的接口

Homebridge-mqtt通过MQTT提供接口(mqtt API),这些接口表征为mqtt的主题。我们可以通过这些主题做一些操作,比如添加配件或获取配件信息等等,当消息发布后 Homebridge-mqtt 会通过response主题发布消息作为响应。其实这一点非常类似于HTTP的请求/响应的思想,只不过是以MQTT的方式实现,一点也不难理解。部分mqtt API参见下表:

表2 Homebridge-mqtt部分mqtt API

主题中有「to」字符的,表示这个主题是给我们发布消息使用,带有「from」字符的,表示我们需要订阅使用。mqtt API的负荷(Payload)采用JSON格式。

众所周知,数据库常用的操作就是增删查改。那么对 Homebridge 这个「网关」也是一样的思路。首先我们需要给Homebridge添加设备,这样我们才可以查询设备的数据,或者发送一个请求改变设备的数值,最后如果不需要设备了可以移除该设备。

在 mqtt API 中,增加操作有「添加配件」和「添加服务」,删除操作有「移除配件」和「移除服务」。如果用户端需要查询设备状态,那么可以使用「homebridge/to/get」主题发布消息。实际上当我们从锁屏界面打开 HomeKit ,Homebridge 网关都会发送一条携带了设备状态信息的 homebridge/to/get 主题消息。

4

支持的service

添加配件是需要一个明确的 service,service 和苹果的HomeKit有对应的关系。比如如果service 选择了 Lightbulb,HomeKit 里会也会显示一个灯泡??的图标。下表是 Homebridge-mqtt 支持的部分 service。

表3 Homebridge-mqtt支持的部分service

5

应用实例

下面是一些Homebridge-mqtt的实例。

5.1

添加配件

如果要添加配件,可以发布下面的消息:

topic: homebridge/to/add

payload: {"name": "flex_lamp", "service_name": "light", "service": "Switch"}

之后相关主题会做出下面的响应:

topic: homebridge/from/response

payload: {"ack": true, "message": "accessory 'flex_lamp' service_name 'light' is added."}

在发布消息的字段中,配件是根据 name 字段的不同来区分的,相同 name 不能重复添加。service_name 字段是设置默认出现在 HomeKit 里设备名称。service 字段上节已经说明。

5.2

移除配件

topic: homebridge/to/remove

payload: {"name": "flex_lamp"}

5.3

查询配件

topic: homebridge/to/get

payload: {"name": "flex_lamp"}

如果需要查询所有配件,可以给name字段换为星号(*)。

topic: homebridge/to/get

payload: {"name": "*"}

5.4

Homebridge操作设备

如下图,Homebridge可以理解为转发网关,使用MQTT连接一个MQTT服务器(MQTT Broker),通过MQTT服务器对设备端进行操作。

图1 设备对接Homebridge-mqtt架构

在设备端,我们需要订阅「homebridge/from/set」主题,表示数据从(from)Homebridge出发,到达(set)订阅该主题的设备。此时,Homebridge类似于C/S架构中的client,设备端为server。

topic: homebridge/from/set

payload: {"name": "flex_lamp", "service_name": "light", "characteristic": "On", "value": true}

其中 characteristic 可以理解为特性或属性, 其根据 service 的不同而不同。一般来说,具有开关功能的 service (比如Switch、Lightbulb和Fan)都会带有「On」的 characteristic ,「On」的 value 字段只能是布尔值。而像窗户(Window)和窗帘(WindowCovering)这类 service, 可以在一个数值范围内设置开启的大小,当然这需要设备在物理层次上的支持。

5.5

Homebridge获取设备数据

如果Homebridge需要获取设备数据,可以使用「homebridge/to/set」主题。更准确地说,是其他设备主动设置值到Homebridge。此时,设备端类似于client,Homebridge为server。

控灯设备把状态发送Homebridge。

topic: homebridge/to/set

payload: {"name": "flex_lamp", "service_name": "light","characteristic": "On", "value": true}

像温度/湿度/光照传感器这类 service ,其本身不能被操作,但可以把数据发送到 Homebridge,它们 characteristic 字段根据 service 类型的不同而不同,所携带的 value 一般都是整型。

测温设备把温度发送到 Homebridge。

topic: homebridge/to/set

payload: {"name": "room_temp", "service_name": "temperature", "characteristic": "CurrentTemperature", "value": 26}

图2 HomeKit组图

图1HomeKit界面,图2添加配件,图3输入pin,图4识别配件,图5配件状态,图6打开light,图7添加温度传感器,图8light配件详情

HomeKit组图。图1HomeKit界面,图2添加配件,图3输入pin,图4识别配件,图5配件状态,图6打开light,图7添加温度传感器,图8light配件详情。

6

总结

当然,笔者后来思考了一下 Homebridge-mqtt 是否可以实现设备联动和第三方应用端的对接。

所谓设备联动,在Homebridge-Assistant中也称为家庭自动化。比如,如果检测到房间有人并且温度超过30度,可以自动关闭窗户并打开空调。由于没有在Homebridge-mqtt看到相关接口,所以要在 Homebridge-mqtt 实现设备联动功能恐怕有点困难。当然其实我们可能并不需要 Homebridge-mqtt,只需要MQTT服务器就可以了。我们可以自定义一些MQTT主题(topic),然后某些设备达到某条件后可以发布消息,另外一些设备订阅这些主题即可实现联动。

同理,第三方应用端控制设备同样也可以不通过 Homebridge-mqtt 接口,最简单的IoT架构就是APP+MQTT+Device。需要思考的是设备状态变化后如何通知Homebridge,在应用端或者设备端调用 Homebridge-mqtt 接口估计都是可以选择的方案。

至少,Homebridge-mqtt 把「让设备可以通过MQTT协议和Homebridge对接,并可以通过HomeKit进行控制」这一重要的功能已经实现了。如果需要更多功能,还得自己动手扩展。

手把手教学 玩转苹果HomeKit相关推荐

  1. 苹果HomeKit与谷歌 Home对比:谁是最佳选择?

    没有所谓最好的产品,只有最适合的选择!最适合您的选择主要取决于你与家人正在使用的设备. 如果长期使用iPhone.iPad 或其他Apple 设备,甚至有苹果全家桶,那么选择HomeKit,因为支持H ...

  2. 使用Siri玩转苹果设备

    如今,语音助手Siri已经完全担得起"助手"两个字了,识别准确率高,完成效率也高. Siri官方宣传片 学会这些Siri小技巧,动动嘴就能够玩转苹果设备--苹果电脑.iPhone. ...

  3. 关于小米、华为、苹果homekit等智能家居品牌的一些解析

    随着科技的进步与人民生活水平的提高,人工智能家庭化在最近几年的得到了蓬勃发展,智能家居也走进了很多家庭. 可能很多人会觉得智能家居价格会比较昂贵,但其实智能家居发展到现在,很多的价格已经调整到我们普通 ...

  4. 苹果homekit,homeassistant,谷歌等智能生态系统,哪一款更加适合你?

    智能家居的产品在市场上越来越多了,所以现在单单一些智能家居的功能已经不能满足我们大家的需求了,而全屋智能这个词也逐渐被大家所提到. 那么全屋智能最重要的是什么呢?那当然就是生态的搭建,产品的联动问题. ...

  5. 苹果IOS模拟器电脑版用哪个好 逍遥模拟器玩部分苹果账号互通

    苹果IOS模拟器电脑版用哪个好 逍遥模拟器玩部分苹果账号互通 网上有IOS模拟器PC版,但是这个是IOS的SDK开发者方便在WINDOWS环境里开发调试IOS应用的,不是用这个模拟器就能直接安装IOS ...

  6. mac 类似matlab,10款Mac上科研人员必备的科研工具推荐和下载 | 玩转苹果

    由于科研软件的特殊性和专业性,在Mac上的科研软件并没有Windows上的丰富和容易查找,今天玩转苹果和大家分享软件专题[10款Mac上科研人员必备的科研工具],包括科学绘图.图像处理,数据分析.文献 ...

  7. 赫迈泽牵手苹果Homekit,预定中国智能家居用户1.75亿?

    "请将温度设定为26度",对着苹果手机说话,就能控制家里温度.这不是科幻片,而已经是赫迈泽(Heatmiser)与苹果合作的现实成果.百度大数据最新显示,"智能家居系统. ...

  8. 苹果9是5g手机吗_仗剑龙魂龙武苹果手机能玩吗 苹果怎么下载

    仗剑龙魂龙武是最近热门的一款仙侠类游戏,有玩家在问仗剑龙魂龙武苹果手机能玩吗?苹果怎么下载呢?现在为大家介绍下,一起来了解下吧. 仗剑龙魂龙武苹果手机能玩吗? 玩家们点击上方地址就可以下到最新的苹果版 ...

  9. 苹果HomeKit如此被偏爱的原因是什么?

    目前国内的智能家居的品牌和种类特别多,网上一搜智能家居可以搜出几十页,还有各种各样的生态系统,让人看了都觉得眼花缭乱. 对于那些想要入手一些智能产品.体验一下智能生态系统或者想要新屋装修的朋友来说,更 ...

  10. 苹果钥匙试玩_苹果和宝马如何改变您的车钥匙

    苹果钥匙试玩 The coming of a standardized authentication protocol for phones and cars, making various cars ...

最新文章

  1. html代码闪烁的文字怎么打,HTML最简单的文字闪烁代码
  2. 一次性讲清 Spring 常用注解 @Bean 、 @Component 、@Autowire、@Resource 的区别, 你知道吗?
  3. swift_021(Swift 的方法)
  4. 【转】ionic run android 成功launch success,但是genymotion虚拟机没有显示
  5. MyBatis中多表查询(多表查询语句实现)重点
  6. python关系运算符和逻辑运算符的优先级_python中逻辑运算符的优先级问题
  7. kali的burpsuite笔记
  8. python中matlab函数图像处理,MATLAB图像处理--同态滤波(代码及示例)
  9. URL中使用IPv4,IPv6和主机名
  10. linux下gimp工具栏,Gimp使用小技巧
  11. 智能擦窗机器人的社会意义_告别传统清扫方式 AWE玻妞展示擦窗机器人
  12. 启动服务_用控制台启动一个wcf服务
  13. 红帽学习笔记[RHCSA] 第六课[进程、服务相关]
  14. 当图变成了一棵树(纠结的生成树)
  15. html表单如何提示信息,表单提示信息
  16. 大学英语综合教程二 Unit 7 课文内容英译中 中英翻译
  17. 第22篇 项目进度管理__计划评审技术__重点内容
  18. 浙江大学软件学院 保研面试
  19. linux增加swap空间的方法
  20. 软件测试方法和测试策略

热门文章

  1. [渝粤教育] 西南科技大学 高级英语(1) 在线考试复习资料
  2. 服务雪崩、服务熔断、服务降级
  3. Bad notification for startForeground
  4. latex 公式编号
  5. linux系统新增一块SCSI硬盘并分区挂载到指定目录
  6. Cloud 团队:让 TiDB 在云上跳舞 | PingCAP 招聘季
  7. mysql frm idb_MySQL利用frm和idb文件进行数据恢复MySQL利用frm和idb文件进行数据恢复...
  8. 边境的悍匪—机器学习实战:第七章 集成学习和随机森林
  9. mysql源码分析——THD数据结构
  10. 置信区间 VS 置信水平