楼下有一个门禁机,可以刷脸认证登录,并且可以输入房间号呼叫住户,房间里有一个室内机就会收到提醒,可以进行通话或者开门等操作。

室内机

这个室内机牌子叫“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
2
3
4
5
6
7
8
9
10
11
{
"id":1000,
"method":"global.login",
"params":{
"clientType":"GUI",
"ipAddr":"172.xx.xx.xx",
"password":"*******",
"userName":"admin"
},
"session":0
}

然后门禁机回应

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"error": {
"code": 268632079,
"message": "Component error: login challenge!"
},
"id": 1234,
"params": {
"authorization": "66a65a9b13f00f635b779a7169aaa2be",
"encryption": "Default",
"random": "867463469",
"realm": "Login to 9187fd59c609171405959c8645db1d54"
},
"result": false,
"session": 474983678
}

然后室内机发送

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"id": 1001,
"method": "global.login",
"params": {
"clientType": "GUI",
"ipAddr": "172.xx.xx.xx",
"password": "E343E34D83FF6930F2848CA498D0494C",
"passwordType": "Default",
"random": "867463469",
"realm": "Login to 9187fd59c609171405959c8645db1d54",
"userName": "admin"
},
"session": 474983678
}

最后门禁响应

1
2
3
4
5
6
7
8
{
"id": 1235,
"params": {
"keepAliveInterval": 60
},
"result": true,
"session": 474983678
}

然后后面就不贴了,大概就是一些获取门禁句柄,然后开锁,然后注销账号之类的

这里验证使用了挑战-响应式登录验证,这种验证不会传输明文密码,通过将账号密码和一些参数配合一些算法进行相互验证,可以有效保证密码的安全。

所以重放这条路已经走不通了,也印证了披着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部署的方案,可以快速实现系统的部署。