BoyDream(大华)门禁的初步探索
楼下有一个门禁机,可以刷脸认证登录,并且可以输入房间号呼叫住户,房间里有一个室内机就会收到提醒,可以进行通话或者开门等操作。
室内机
这个室内机牌子叫“BoyDream”,网上查了一下是一个叫“浙江名欧智能科技有限公司”生产的,这个公司是绿城集团所属的。在所属楼盘装修上,应该也是为了降低成本才搞了一个这样的做智能家居的公司出来。
但是这个室内机不支持APP操控,也不支持接入智能音箱。外卖员呼叫的时候还要爬起来到门口给门禁开门,十分不便。并且品控堪忧,开锁键经常失灵。
如何智能化这个设备,是下面要考虑的事情。
将室内机拆下,背后有一处供电和一根网线相连。
抓
传统室内机智能化方案是先抓包获取信息,再重放,加上WIFI连小爱等操作实现的,这里我也浅浅的抓了一下。
然后下面是一个包的信息
1 | Src: ZhejiangDahu_xx:xx:xx (6c:1c:71:xx:xx:xx), Dst: ZhejiangDahu_xx:xx:xx (6c:1c:71:xx:xx:xx) |
室内机不是BoyDream吗,怎么摇身一变就变成大华了?
看一下通信过程:
1 | { |
然后门禁机回应
1 | { |
然后室内机发送
1 | { |
最后门禁响应
1 | { |
然后后面就不贴了,大概就是一些获取门禁句柄,然后开锁,然后注销账号之类的
这里验证使用了挑战-响应式登录验证,这种验证不会传输明文密码,通过将账号密码和一些参数配合一些算法进行相互验证,可以有效保证密码的安全。
所以重放这条路已经走不通了,也印证了披着BoyDream的Logo的室内机正是大华代工生产的。
柳暗花明
在搜索相关资料时,发现大华的摄像头可以进行二次开发,官方提供有开发的套件SDK,有些公司可以接入这些设备到自有的系统中,实现更多功能。然后我就下载了相关的SDK,发现的确可以正常使用,这就为后续开发确立了基础。
网络架构
由于SDK过于大,开发出来的应用需要占用的资源较多,所以不能放在传统硬路由上,这里我目前是在室内NAS中部署。
室内路由1 LAN口接入内容和室内机,并配置静态IP并取消DHCP,然后因为离室内主路由较远,所以直接WIFI连接主路由。
首先室内路由2要设置内网网段静态路由到室内路由1。
室内路由1防火墙需要将WAN到LAN的转发都打开。
或者直接室内路由1启动VPN服务器,室内路由2连接即可。
这样室内主路由下设备就可以正常访问内网设备了。
产品实现
通过SDK,可以实现门禁预览与开锁功能,所以这里搭配SDK搭建后端服务,同时Web端和移动端APP可以通过相应接口访问服务。
功能特性
- 设备管理: 添加、编辑、删除门禁设备
- 视频预览: 实时视频流预览
- 门禁控制: 远程开门/关门操作
- 设备状态: 实时监控设备在线状态
系统架构
后端 (Spring Boot)
- Spring Boot应用
- 集成SDK进行设备控制
- WebSocket支持实时视频流传输
- RESTful API接口
前端 (Vue.js)
- Vue.js前端应用
- 简化的设备管理界面
- 实时视频预览
- 响应式设计
移动端(Flutter)
- Flutter跨平台APP
- 支持门禁开锁
- 支持视频预览
- 支持桌面小组件操控开锁
下面是一些主要功能的预览:
如果你的宽带支持独立IP,不仅可以在室内访问这个服务,还可以在外网进行访问,当然配置起来也会稍微复杂一点。
小爱音箱
业内主流的第三方DIY的设备接入小爱音箱是通过巴法云接入的。
接入方式为MQTT。目前还没有接入,后面有空会实现接入小爱音箱开锁。
轻量化展望
如果程序不依赖SDK,并且变得更轻量化时,可以考虑直接使用迷你路由板接入内网,这样美观无痕且无需占用更多空间。并且配置简单,大部分人可以独立操作,留到后面再慢慢探索。
后记
如果需要的人多,我会独立出一份Docker部署的方案,可以快速实现系统的部署。