Homebridge源码解读

Homebridge源码解读

前言

手上有一个esp8266的模块,想用这个和苹果手机的Siri结合做一些高级的硬件。在网上看到的都是Homebridge的用法。在看过Homebridge的源码后,现在在这里总结一下这个库的大体结构。

HomeBridge源码地址:

https://github.com/nfarina/homebridge

HAP-NodeJS库

要了解Homebridge这个库,就要说一个HAP-NodeJS库了,因为Homebridge实际上是对这个库进行了一下封装。苹果硬件真实的接口api部分都在HAP-NodeJS库里,这是高手反相抓取苹果UDP消息分析得到的一个HomeKit协议库,HAP就是"苹果HomeKit协议"的英文缩写.

HAP-NodeJS源码地址:

https://github.com/KhaosT/HAP-NodeJS

github上的readme上有说明,可以在

https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js

查看所有的硬件设备特性定义,这里对所有特征(Characteristic)的方法和属性作了定义。比如灯,空调,风扇,温度计,湿度计,空气质量,一氧化碳,二氧化碳,门。。。等等设置的状态或者操作都做了定义,也对交互时的数据类型做了定义。

bonjour-hap库

在HAP-NodeJS库中用到了一个UDP库,在网上查了一下,这个bonjour-hap库是mDNS协议的实现,低层使用的是UDP协议,主要用与局域网中设备之间通过mDNS相互发现对方,当IOS手机打开HomeKit之后,首先应该会在居于网中广播询问是否有提供homeKit服务的设备,而HAP-NodeJS的功能就是用来提供这个mDNS服务器的网络设备,现在一般给智能家用设备的这个管理服务器叫家居网关。其实这是一个mDNS服务器。

Event事件监听

在HAP-NodeJS中有一个Service.js的文件,这里是有几个方法,会有Homebridge中用到,一个是

Service.prototype.getCharacteristic = function (name)
{

//...

}

这个是添加新的硬件特性的接口,所有的便件特性都在上边说的HomeKitTypes.js中定义好了。而这个Characteristic其实是一个继承自events.EventEmitter的对象。这个事件监听对象有两个方法一个是on(),一个是emit().相当于一个观察者设计模式,来用分发消息用的。

当手机端有请求时,就会调用这个Characteristic的.on('get',func)方法,而我们写Homebrdage扩展插件时,其实就是实现这个func的方法,这个方法有一个erro和一个callback的参数。在func中我们直接给硬件设备发送消息,硬件设备返回后,我们调用callback的回调函数,把硬件设备返回的信息发送给HAP-NodeJS的Advertiser对象,由这个对象把消息通过bonjour-hap的UDP协议发送给手机上的HomeKit。

Accessory传感器和Platform平台对象

编写Homebridge插件主要就是定义这个Accessory传感器的物理特征(Characteristic)处理逻辑.传感器通过lib/api.js中的

API.prototype.registerAccessory = function(pluginName, accessoryName, constructor, configurationRequestHandler) {

//...
}

方法来在homebridge中注册硬件传感器。homebridge中除了传咸器定义外,还有Platform(平台)方式一次注册很多传感器。

API.prototype.registerPlatform = function(pluginName, platformName, constructor, dynamic) {

//...

}

但对于config.json文件来说,总的传感器类型还是都在HomeKitTypes.js中定义好的那些种类,只是用户可以在插件中自行组合。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354