找回密码
 立即注册
查看: 139|回复: 2

[经验分享] 教程:使用 Node-RED 控制微信公众号里的新风机(基于 WebSocket 抓包)

[复制链接]

13

主题

359

回帖

1951

积分

金牌会员

积分
1951
金钱
1579
HASS币
0
发表于 昨天 13:40 | 显示全部楼层 |阅读模式
本帖最后由 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)


回复

使用道具 举报

13

主题

359

回帖

1951

积分

金牌会员

积分
1951
金钱
1579
HASS币
0
 楼主| 发表于 昨天 14:20 | 显示全部楼层
更新后没有权限编辑链接,不想写了,心累。
回复

使用道具 举报

14

主题

1533

回帖

4980

积分

论坛元老

积分
4980
金钱
3433
HASS币
0
发表于 昨天 16:14 | 显示全部楼层
fay000fay 发表于 2025-5-4 14:20
更新后没有权限编辑链接,不想写了,心累。

别介,楼主加油
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-5-5 18:02 , Processed in 0.126498 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表