本帖最后由 fay000fay 于 2025-5-4 14:22 编辑
家里有一台艾尔斯派的新风机,很冷门,只能通过其公众号进行远程控制,一直不知道如何才能接入ha,网上找不到任何教程,不死心,几年后的某天,也就是前天,想到chatGPT帮我解决了不少问题,所以抱着再尝试一下的心态,问了chatGPT。我先是通过 iOS 的 Stream 抓包工具,能看到其微信公众号里操作新风机时是通过WebSocket 指令进行通讯。期间,它一共访问了三个域名,1、sandbox.gizwits.com;2、api.gizwits.com,3、smart.youhone.com。里面有各种请求头,主体,以及响应数据,这些通讯数据中,包含了设备登录、订阅和控制等核心指令,通过这些数据,我们可以模拟微信发送的 WebSocket 消息,从而在 Node-RED 中复现控制能力,最终实现本地化控制新风机设备,并对接 Home Assistant。
🔌 通讯原理简述(背后的机制)
新风机背后使用的是一个物联网平台(如极智 Gizwits)来实现设备远程接入。微信公众号的设备控制页面,本质上是通过 WebSocket 和这个云平台通信的。 我们通过抓包发现了以下几个关键点: 1. 连接 WebSocket 服务公众号前端会连接一个 WebSocket 服务器,地址如:ws://sandbox.gizwits.com:8880/ws/app/v1,这是设备控制的实时双向通讯通道。
2. 发送登录指令(login_req) 连接建立后,前端首先会发送一个类似如下的 JSON 指令:
{
"cmd": "login_req",
"data": {
"appid": "...",
"uid": "...",
"token": "...",
...
}
}
这个 token 是你在登录公众号时服务器发放的凭证,用来识别设备用户身份。
3. 订阅设备(subscribe_req)
接下来客户端需要告诉服务器:我要接收哪台设备的数据,于是发送:
{
"cmd": "subscribe_req",
"data": [{ "did": "设备ID" }]
}
这一步是 WebSocket 的“监听某个设备状态”的动作。
4. 控制设备(c2s_write)
发送实际控制命令,比如开关机:
{
"cmd": "c2s_write",
"data": {
"did": "设备ID",
"attrs": {
"onOff": true
}
}
}
其中 attrs 是控制指令(如开关、档位),与设备属性绑定。
🧩 通讯流程图(逻辑顺序)
连接 WebSocket
↓
登录(login_req)
↓
订阅设备(subscribe_req)
↓
发送控制命令(c2s_write)
|