[第一步]homekit智能家居,homebridge与homebridge-aqara通信协议

 

根据这个就可以使用iphone控制灯与开关.

折腾了3个晚上,终于将homebridge安装好,安装之前需要安装一堆的库,比如node.js运行环境等,因为网上资料大部分都是在树莓派上面运行,我是直接在ubuntu上面进行的测试,因为安装会有所区别,但是安装好之后就一样了,安装方法在此我就不写了,后面补上,这里我主要写homebridge-aqara与网关的通信协议,可以使用一个linux程序,windows程序或者单片机作为网关,网关必须能连接到局域网,我测试使用的是一个VC++编写的windows程序.

 

上一个homebridge正常工作的截图

 

在使用homebridge-aqara插件之前我尝试过几个别的,都没能成功,主要是我对js一点都不懂,但是homebridge-aqara这个插件比较简单,通过代码就可以看出json结构,加上测试,就把几个常用的设备的协议给弄出来了,方便大家自己玩,可以不用依赖什么小米路由器之类的网关了,听说小米也是使用这个插件的.

 

1.修改配置文件(路径 /home/用户名/.homebridge/)

 

{"bridge": {"name": "Homebridge","username": "00:0C:29:E1:25:B2","port": 51826,"pin": "123-45-678"},"platforms": [
{"platform": "AqaraPlatform","sid":["6409802da3ca"],"password":["1234567812345678"]
}]
}

 

"pin": "123-45-678" 类似一个配对码,可以按照这个格式任意修改,仅限数字,端口就不要修改了
<pre name="code" class="plain">"sid":["6409802da3ca"],
"password":["1234567812345678"]sid与密码可以按照这个格式修改,但是密码长度必须是16位,否则可能会报密码长度错误,这2个后面网关程序中会使用到.
</pre><p></p><pre>

 

2.homebridge是个桥梁,上边与iphone的homekit通信,下边通过aqara插件与第三方的网关通信.

 

1.homebridge首先会发送广播数据{"cmd": "whois"}2.设备收到后响应{
"cmd": "iam", 
"ip": "10.254.1.100",
"port": "4321"
}3.homebridge 发送请求设备列表{"cmd":"get_id_list"}4.设备响应传感器列表
{"cmd": "get_id_list_ack","sid": "6409802da3ca","token": "1234567812345678","data": "[\"11\",\"12\",\"15\",\"16\"]"
}5.homebridge会对每个设备进行读取
{"cmd":"read", "sid":"11"}6.设备响应数据
//温湿度
{"cmd": "return_read","model": "sensor_ht","sid": "11","data": "{\"temperature\": 2500,\"humidity\": 6501}"
}//插座
{"cmd": "return_read","model": "plug","sid": "12","data": "{\"status\": \"on\"}"
}//照明开关
{"cmd": "return_read","model": "ctrl_neutral1","sid": "15","data": "{\"channel_0\": \"on\"}"
}//网关心跳包
{"cmd": "heartbeat","model": "gateway","sid": "6409802da3ca","token": "1234567812345678"
}//控制插座下发的数据
{"cmd": "write","model": "plug","sid": "12","data": "{\"status\":\"off\", \"key\": \"bbf5624a816f7f2702512d6c1cd55e53\"}"
}//控制灯后状态需要立即更新,否则会退出
{"cmd": "write","model": "ctrl_neutral1","sid": "15","data": "{\"channel_0\":\"off\", \"key\": \"bbf5624a816f7f2702512d6c1cd55e53\"}"
}


3.homebridge-aqara使用的是组播,在局域网比较方便,无需建立连接,并且通信协议简单.

 

在homebridge-aqara源代码 AqaraPlatform.js最上面可以看到端口与组播信息.

 

const dgram = require('dgram');
const inherits = require('util').inherits;
const crypto = require('crypto');
const iv = Buffer.from([0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58, 0x56, 0x2e]);
const serverSocket = dgram.createSocket('udp4');
const multicastAddress = '224.0.0.50';
const multicastPort = 4321;
const serverPort = 9898;
var AqaraAccessoryFactory;


iv:这个是通信用于加密的明文.

 

multicastAddress:组播地址

multicastPort:组播端口没什么用

serverPort = 9898 这个端口比较重要,用于与homebridge-aqara通信的端口,网关可以使用任意端口与这个端口建立UDP连接即可通信.

 

4.协议说明

这里的协议仅限于网关与homebridge-aqara通信的协议,网关与传感器的通信协议大家可以任意自定义,比如我的网关使用433与底层传感器通信,协议采用modbus-RTU协议.

下面是我自己做的一些控制用的硬件

USB串口转433模块(采用STM32+A7139无线通信模块)

 

RGB灯带驱动,同样STM32+A7139 ,采用1000V12A MOSFET,可惜homebridge-aqara不支持调色调亮度功能,好在homebridge_yeelight支持,后面需要再研究研究.

 

12V/24V低压控制板,同样保留3个通道,PWM驱动

 

淘宝上买的5元外壳,内部同样STM32+A7139/WIFI ,1路10A继电器控制

 

之所以都自己做是因为家里刚装修,预留了很多灯位,想自己做个简单智能家居,并且自己做的协议自己定,不用依赖厂家,刚好IOS的homekit被黑客破解发到网上变为开源接口了,所以手机APP都不用做了,直接用,还挺方便的.

 

iso上面homekit效果

后面将这个部署到嵌入式linux中,购买了一个57元的全志的核心板,比树莓派便宜不少

只有3x3cm比较小巧.

 

 

5.homebridge-aqara的小bug

在使用过程中,特别是控制灯的时候,如果状态没有及时更新,homebridge-aqara会崩溃,在源码AqaraPlatform.js中搜索 Value not changed, do nothing

 

 // Dont' send duplicate command out.if (this.lastValue == on) {platform.log.debug("Value not changed, do nothing");return;}var platform = this.platform;var password = platform.passwords[this.deviceSid];


很明显是platform没有赋值,先使用了导致log为空,产生异常崩溃了,将var platform = this.platform;赋值移动到上面即可

 

 

 var platform = this.platform;if (this.lastValue == on) {platform.log.debug("Value not changed, do nothing");return;}var password = platform.passwords[this.deviceSid];


在iphone唤醒后立即控制灯,此时网关可能接收不到数据,我的做法是1秒钟网关发送一次心跳包,这样可以立即更新链接信息,防止出现数据无法接收问题.

 

 

6.测试网关程序

串口就是433模块,用于与底层传感器通信,端口就是连接homebridge-aqara,使用json通信

 

可以看到通信协议,homebridge-aqara发送给网关控制灯,以及读取设备信息.

 

7.相关连接,大家可以看看

http://bbs.feng.com/forum.php?mod=viewthread&tid=10857822&extra=page=1&filter=typeid&typeid=912&typeid=912

http://www.tuicool.com/articles/uM3q2yR

http://forum.yeelight.com/t/homebridge-plugin/83/13

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/65555.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能家居系统 QT

一 环境范围设置 &#xff08;1&#xff09;界面添加新控件 在mainwindow.ui 添加控件&#xff1a; 控件的类型 文本内容 对象名&#xff08;唯一&#xff09; 是否有槽函数 QLabel <温度< lable_随意 否 QLabel <湿度< lable_随意 否 QLabel <光…

Home Assistant 智能家居自动化

一、Home Assistant 自动化中的一个重要概念——模式 引入模式&#xff0c;用于解决正在执行过程中的同一规则又一次被触发的问题 二、Home Assistant 自动化规则的组成部分 2.1 触发条件Trigger&#xff1a;表示智能家居中事件或状态的转换 可选持续时间(特有) trigger有…

qt实现智能家居系统

一、项目介绍 通过TCP/IP协议实现客户端和和服务端的链接&#xff0c;服务端和下位机通过串口通信的方式链接&#xff0c;传递信息&#xff0c;客户端通过账号登录进入进入智能家居服务系统&#xff0c;账号登录和QQ登录类似&#xff0c;我采用的是数据库的方式实现数据的存储和…

语音识别智能家居控制设计

目录 一、方案流程及技术规格书设计 二、系统硬件电路设计 三、软件编写及调试 四、系统调试测试与分析 前言 随着科学技术的快速发展&#xff0c;人们对生活品质的要求也不断提高&#xff0c;开始追求更好更方便的生活方式。因此&#xff0c;智能家居系统应运而生。智能家…

智能家居之网关

网关诞生的背景 很多物联网终端设备在设计之初就考虑了低功耗、低成本的需求&#xff0c;因此大量的物联网终端设备是靠电池来工作并且需要运行相当长的一段时间&#xff0c;比如油田、农业相关的传感器&#xff0c;且这些终端设备不需要实时与物联网平台通讯&#xff0c;甚至…

智能家居是否可与ChatGPT深度融合?

​ ChatGPT自2022年面世以来&#xff0c;已为亿万网民提供智能问答服务。然而我们是否曾想到&#xff0c;这一人工智能驱动的聊天机器人&#xff0c;是否可为智能家居赋能? 要实现ChatGPT与智能家居设备之间的无缝对话&#xff0c;单单依靠一台终端是远远不够的。ChatGPT必须…

调查报告数据分析怎么做?

调查报告数据分析怎么做&#xff1f;拿到一份调查报告看选题、选题内容、调查的目的&#xff0c;然后清洗数据&#xff0c;分析数据提炼观点&#xff0c;过数据变化规律&#xff0c;揭示事物内在发展变化和趋势&#xff0c;抓住问题的本质和关键。 一、分析数据提炼观点 数据分…

pyqt5制作翻译软件+爬虫

VSCpythonmysql&#xff0c; 文章目录 目录 文章目录 前言 一、详细代码 第一个文件Ui_untitled.py 第二个fy_main.py文件&#xff1a; 第三个 &#xff1a;bd_pachong.py 二、登录界面&#xff1a; 总结 前言 通过pyqt5实现了翻译界面的可视化&#xff0c;利用python爬虫实现了…

给 30 岁左右的你三个职场跃迁/改变命运的建议!

见字如面&#xff0c;我是军哥&#xff01; 通过公众号的后台用户画像数据&#xff0c;我发现我的读者在 26 到 32 岁的年龄阶段的人数最多&#xff0c;所以今天来聊一聊这个话题&#xff0c;你一定要看到最后&#xff0c;会让你少走很多弯路&#xff01; 核心观点主要包括三个…

38岁程序员和你分享4个人生经验!

蓝色关注&#xff0c;回复“1”获取知名公司程序员和产品经理职级 这是我的第「123」篇原创文章 见字如面&#xff0c;我是军哥。 我最近一直想写一篇稍微长点的文章&#xff0c;毕竟内容篇幅有时候决定内容广度和深度。 距离我之前写的那篇文章《一位互联网老兵的五次认知升级…

【我命由我不由天】30多岁的大龄程序员,应该如何保持职场竞争力?

公众号后台回复“学习”&#xff0c;获取作者独家秘制精品资料 扫描下方海报二维码&#xff0c;试听课程&#xff1a; &#xff08;课程详细大纲&#xff0c;请参见文末&#xff09; 目录 回首往事&#xff1a;自己竟没有任何核心优势&#xff01;公司遇到危机时&#xff0c;大…

写给互联网人35岁之后的建议

作者介绍 李凯东 某大厂大数据总监&#xff0c;管理经验丰富&#xff1b; 负责数据、用户、搜索、推荐、AI等&#xff1b; 曾有10年连续创业经历&#xff1b; 产研运全能&#xff0c;国内知名比赛获奖无数&#xff1b; “数据人创作者联盟”成员。 又到了春节&#xff0c…

程序员如何跨越35岁危机?这篇给点干货建议!

职场&认知洞察 丨 作者 / findyi 这是findyi公众号的第83篇原创文章 这两天在我的读者群里做了一个职业小调研&#xff0c;发现关注我公众号的70%以上都是程序员。 毕竟程序员吸引程序员&#xff0c;这也算猿粪吧&#xff0c;哈哈。 这个小调研也引发大家对程序员行业的激烈…

35岁是人生分水岭?一定要做这7件事

在网上看到这样的帖子&#xff0c;说的是35岁以上的员工&#xff0c;有人脉的卖保险&#xff0c;没人脉的跑滴滴&#xff0c;实在不行送外卖。招聘时&#xff0c;35岁以下优先。调整时&#xff0c;35岁以上优化。对绝大数人来说&#xff0c;35岁是一道坎&#xff0c;35岁是人生…

32岁大龄女程序员的职场经历总结,分享重回职场的感受

不知不觉已经三十过二&#xff0c;我2016年研究生毕业就来到了苏州一家国企。我对自己并没有清晰的职业规划&#xff0c;还记得来这家公司面试时&#xff0c;面试官问我&#xff0c;为啥选择我们公司。我说因为他是国企又有互联网公司的性质&#xff0c;即稳定又能写代码&#…

麦肯锡:给20、30岁职场年轻人的14条建议!条条珍贵

点击“技术领导力”关注∆ 每天早上8:30推送 来源&#xff1a; 《麦肯锡决断力》 1、 选择工作的标准: 选择有利于自己成长的公司&#xff1b; 选择可以从事国际性工作的公司&#xff1b; 选择可以充分发挥自身能力&#xff0c;创造出价值&#xff0c;并且可以为社会做出贡献…

给还没到35岁中年危机的程序员们一些建议

前言 上周&#xff0c;我一个同学被柔性辞退了&#xff0c;是一个外企&#xff0c;给了n 1的补偿&#xff0c;十来万人民币。他在那家公司干了三年多&#xff0c;毕业十年换过四家单位&#xff0c;都是国企或者外企。他今年三十四岁&#xff0c;年前就知道要走的消息&#xff…

30岁程序员回顾人生、展望未来

活动地址&#xff1a;http://blog.csdn.net/blogdevteam/article/details/42172979 一、回顾毕业以来这么多年走过的路 从2007年7月份走出校门到今天2014年12月份&#xff0c;已经整整7年半了。想想7年半之前的自己&#xff0c;再看看现在的我&#xff0c;这么多年走过的路&a…

作为40岁的IT过来人,我有3个建议想对年轻程序员说!

见字如面&#xff0c;我是军哥&#xff01; 我刚毕业的时候也认为技术可以改变世界&#xff0c;如今 40 岁了&#xff0c;N 多年过去了觉得太可笑了&#xff01; 我总结了三个点&#xff0c;分享给年轻的程序员&#xff0c;请一定要看到最后哦&#xff5e; 1、 大部分公司的程序…

35岁+的大龄程序员:面对“中年危机”,这份书单或许能帮到你

摘要&#xff1a;对于多数程序员来说&#xff0c;40岁之前赚到别人60岁的钱是普遍目标&#xff0c;不过职业的进阶也印证着人生的进阶&#xff0c;所以何时开始思考未来的职业规划&#xff0c;都不算早。 知乎上有个话题叫做“程序员的悲哀是什么&#xff1f;”&#xff0c;有个…