|
本帖最后由 enjor 于 2025-10-2 14:23 编辑
装修公司随便装了一个叮叮智能的门锁,在网上没有找到相关的插件能接入home assistant,发现这个东西有自己的小程序,虽然小程序不能远程开锁、关锁,但好歹有开关锁的记录,就自己试了试。 本人也是刚接触ha的小白,只是抛砖引玉,希望各位大佬轻喷,能够搓一个插件出来。 环境需求 eclipse mosquitto(最为mqtt服务器)、node-red(编程器) 我的部署环境:用部署在飞牛os上面的homeassistant、eclipse mosquitto、node-red(三个都是docker)
具体步骤、思路如下:
1. 观察叮叮智能小程序 这个小程序的登陆功能无需输入密码,而是直接登陆了微信用户,如果我的叮叮智能app里面没有绑定微信,那连数据都没有。以此推测这个小程序没有密码登陆的功能,那就只有token登陆了,这样的登陆方式,估计他的token可能就是不变的,这样对这个小程序抓包获取token,就能够请求参数了。
2. 能够返回的参数
3. 尝试抓包 打开抓包软件(我用的Reqable),在以下页面点击登陆按钮 抓到了这些东西,看到黄色光标上面的那一条,就找到了开锁和关索的记录。在请求头中,也获取了token 3.1. 分析包和回参 黄色光标上面那一条右键添加到API里进行调试,最终发现参数中的uid就是门锁的uid
发现了事件的时间跟小程序列表里的第一条一样,那就对了。type是事件类别、event_user_id就是用户几,img就是图片的网址(需要base64解密)
ps:type的对应关系可以通过小程序解包来找,这里就不细说了,太麻烦。我复制出来,如下:
typeList:[{type:0,name:"活动报警"},{type:1,name:"门铃呼叫"},{type:4,name:"电量报警"},{type:6,name:"门锁报警"},{type:20,name:"离线通知"}
3.2. info里应该有跟多的信息,一看就是base64加密,解密看看。 还有一个event_type,解包后发现对应关系如下:
(h="/images/[email protected]",v=0):h=t.base64_decode(a[c].img),"00"==D.content&&(l="指纹开锁",d="指纹开锁",""==a[c].img||null==a[c].img?(h="/images/[email protected]",v=0):h=t.base64_decode(a[c].img)),"01"==D.content&&(l="密码开锁",d="密码开锁",""==a[c].img||null==a[c].img?(h="/images/[email protected]",v=0):h=t.base64_decode(a[c].img)),"02"==D.content&&(l="卡开锁",d="卡开锁",""==a[c].img||null==a[c].img?(h="/images/[email protected]",v=0):h=t.base64_decode(a[c].img)),"03"==D.content&&(l="遥控开锁",d="遥控开锁",""==a[c].img||null==a[c].img?(h="/images/[email protected]",v=0):h=t.base64_decode(a[c].img)),"04"==D.content&&(l="钥匙开锁",d="钥匙开锁",""==a[c].img||null==a[c].img?(h="/images/[email protected]",v=0):h=t.base64_decode(a[c].img)),"05"==D.content&&(l="虹膜解锁",d="虹膜解锁",""==a[c].img||null==a[c].img?(h="/images/[email protected]",v=0):h=t.base64_decode(a[c].img)),"06"==D.content&&(l="手掌解锁",d="手掌解锁",""==a[c].img||null==a[c].img?(h="/images/[email protected]",v=0):h=t.base64_decode(a[c].img)),"07"==D.content&&(l="指静脉开锁",d="指静脉开锁"),"08"==D.content&&(l="人脸开锁",d="人脸开锁",""==a[c].img||null==a[c].img?(h="/images/[email protected]",v=0):h=t.base64_decode(a[c].img)),"09"==D.content&&(l="远程开锁",d="远程开锁",""==a[c].img||null==a[c].img?(h="/images/[email protected]",v=0):h=t.base64_decode(a[c].img)),"0A"==D.content&&(l="门内开锁",d="门内开锁",""!=a[c].img&&null!=a[c].img||
4. 构建node-red
4.1. 请求智能门锁节点 换成你自己的token和uid,其他的都不用更改。
4.2. mqttout节点 服务端改成你自己的eclipse mosquitto地址
|
|