本帖最后由 jayking0912 于 2020-12-22 22:21 编辑
去年双十一买了个网络门铃,本想着能解析完协议接入homeassistant,想想配合微信推送和门口的摄像头,有人按了门铃就能知道谁来了,美滋滋奈何当时就死活没找到门铃的ip地址,遂放了大半年(懒癌晚期),废话太多,上教程
门铃图片
0.按照说明书配对入网,下载app
1.找出门铃ip
我系统是mac os,推荐 IP Scanner 软件,局域网里有啥看个图标就清清楚楚,除了个别不常见的硬件没有图标,其他系统的就找下类似ip扫描器软件
这个门铃有个特点就是平常是待机状态,只有按下门铃了,才会向外发送数据,所以在扫描过程中,需要自己按下门铃,才能搜索到,我的是dhp 开头的设备。 如果实在找不到,推荐先把扫完的都截图备份,按完门铃在比对多出来哪个设备
2.监听抓数据,这一步就不演示了(太懒了),有兴趣的可以自己去抓下,抓完思路:门铃在按下后会先询问dns, api.zhiduodev.com 的ip,然后发送一个 get请求,带上一堆参数,参数是啥意思不重要,只要截取他的get请求,就能确认门铃被按下,触发事件
3.拦截dns
最开始想法是把门铃发往该ip时,在路由器端拦截,然后转发给指定的ip和端口号(我的是openwrt软路由),但试了好几种方法都截取失败了,不知道是不是我也的不对。后续研究成功了在更新
在路由器端把 api.zhiduodev.com 指定成自己内网的ip, openwrt在图片位置,ip换成你对应的ip
////////////////////////2020.12.22更新///////////////////////////////////
我额外添加了 list.zhiduodev.com,也指定成自己内网IP,目前没影响,加了直接掐断所有通讯,不怕更新
////////////////////////////////////////////////////////////////////////////
现在方法:模拟服务端,收到get请求后发送mqtt给nodered/ha
部署有两种方式,一种就是找个80端口没有被占用的长期开着的电脑(我用的树莓派)运行自己写的程序
第二种就是用esp8266或者esp32来实现,手头没硬件,等有了研究完更新(挖坑)
程序我正好有个golang写的项目,顺手就改了下,文件太大,传github https://github.com/jayking0912/ringdoor2mqtt 上(编译了三个版本,自己选择对应的),链接如下,有编程能力的可以用其他语言去实现,没什么难度
我发下树莓派的部署方式,其他的类似:
1. /home/pi 放生成的程序,我的是master 、config.json,新建个start.sh
#!/bin/sh
sleep 10
cd /home/pi
"/home/pi/master"
2.先手动sudo sh start.sh 运行一遍,看下有没有报错,没有root权限可能打不开80端口
3.sudo su 切换root 账号,输入
在最后一行添加
*/1 * * * * flock -xn /home/pi/my.lock -c 'sh /home/pi/start.sh'
然后重启生效
4.成功后可以用mqtt调试工具,订阅 node-red/ringdoor ,按下门铃,能不能收到数据,能收到就说明成功了
5。nodered 触发门铃
nodered mqtt订阅 node-red/ringdoor,当有数据来时,就说明门铃想了,后面该干嘛就不用我说了,我发个例子参考下,企业微信推送和tts可以看下论坛帖子,详细教程就不累述了
门铃按下后,微信就能收到推送信息,同时家里音响也会播放优雅的语音(装x必备)
待改进的:
dns拦截后,就只有做自己模拟的服务端,手机app就废了,吐槽下,这个手机app写的挺烂的,就刚开始还能收到推送,后面就没动静了,不知道是不是我手机ios的原因,安卓不知道
|