找回密码
 立即注册

微信扫码登录

搜索
楼主: yxy2888

[硬件DIY] 万家乐热水器接入求助

[复制链接]

1

主题

10

回帖

85

积分

注册会员

积分
85
金钱
74
HASS币
0
发表于 2025-5-1 21:26:55 | 显示全部楼层
Gen007 发表于 2023-2-22 16:54
我抓包试了几次,uid不变,ts是时间戳,key是不固定的,试了几次 ,都不知道这个key是什么加密的 解决了这个ke ...

ts= time(NULL);
key= md5(密码md5+ts)
回复

使用道具 举报

1

主题

99

回帖

1013

积分

金牌会员

积分
1013
金钱
913
HASS币
0
 楼主| 发表于 2025-7-9 14:08:02 | 显示全部楼层
laogong888 发表于 2025-5-1 13:36
我万和热水器,米家添加了第三方,可以用小爱语音控制。

请教一下,怎么弄
回复

使用道具 举报

6

主题

101

回帖

493

积分

中级会员

积分
493
金钱
386
HASS币
0
发表于 2025-8-14 15:18:30 | 显示全部楼层
hayonghu 发表于 2025-5-1 21:26
ts= time(NULL);
key= md5(密码md5+ts)

不对呀。。。。。
QQ:2331892928
回复

使用道具 举报

6

主题

101

回帖

493

积分

中级会员

积分
493
金钱
386
HASS币
0
发表于 2025-8-14 15:32:14 | 显示全部楼层
hayonghu 发表于 2025-5-1 21:15
我是做成了ESP32而已,因为不是每个人都会抓包解包,我方便新手玩家。

给你看看万家乐真正的指令协议,比 ...

逆向的app?我把易慧家逆向了,过程太繁琐了,没逆向万家乐
QQ:2331892928
回复

使用道具 举报

6

主题

99

回帖

498

积分

中级会员

积分
498
金钱
393
HASS币
0
发表于 2025-8-27 11:54:50 | 显示全部楼层
hayonghu 发表于 2025-5-1 21:15
我是做成了ESP32而已,因为不是每个人都会抓包解包,我方便新手玩家。

给你看看万家乐真正的指令协议,比 ...

我家有一台万家乐,大神这个解决方案是什么样的输出形式?
回复

使用道具 举报

0

主题

4

回帖

17

积分

新手上路

积分
17
金钱
13
HASS币
0
发表于 2025-11-4 18:54:11 | 显示全部楼层
5.10 [email protected] 06/22 TYM:/ 复制打开抖音极速版,看看【碎语e的作品】# 智能家居 # 小米 # 米家# 万家乐 # h... https://v.douyin.com/37evjB4cal4/
回复

使用道具 举报

0

主题

4

回帖

17

积分

新手上路

积分
17
金钱
13
HASS币
0
发表于 2025-11-4 18:55:34 | 显示全部楼层
可以了这个是教学链接:5.10 [email protected] 06/22 TYM:/ 复制打开抖音极速版,看看【碎语e的作品】# 智能家居 # 小米 # 米家# 万家乐 # h... https://v.douyin.com/37evjB4cal4/
回复

使用道具 举报

6

主题

88

回帖

798

积分

高级会员

积分
798
金钱
704
HASS币
0
发表于 2025-11-26 20:57:15 | 显示全部楼层
yxy2888 发表于 2025-7-9 14:08
请教一下,怎么弄

米家,添加第三方设备,选择万和
回复

使用道具 举报

0

主题

2

回帖

53

积分

注册会员

积分
53
金钱
51
HASS币
0
发表于 2025-12-7 23:10:06 | 显示全部楼层
本帖最后由 xz633 于 2025-12-7 23:11 编辑

这两天花了二十刀用 Claude Code 分析了下提交的协议,实现了非模拟点击通过 python 代码调用,实现热水单次循环
把对应的协议分享出来,有代码能力的同学基于这个可以快速实现针对自己热水器的控制,无需额外硬件
最后一部分控制命令的ID 仅针对我自己的热水器:TLU3,别的型号自行抓包查阅


## 协议概述

### 通信架构

```
┌─────────┐      登录请求      ┌──────────────────────┐
│  客户端  │ ───────────────> │  登录服务器           │
│         │ <─────────────── │  nls.machtalk.net:6779│
└─────────┘   返回session_key  └──────────────────────┘
     │        + 长连接服务器地址
     │
     │        握手 + 控制命令
     ▼
┌──────────────────────┐
│  长连接服务器         │
│  (动态分配,如        │
│   117.50.25.132:6778) │
└──────────────────────┘
     │
     ▼
┌─────────┐
│  热水器  │
└─────────┘
```

### 数据包格式

所有数据包采用统一格式:

```
┌────────┬────────┬──────────┬──────────┬──────────┬───────────────┬──────────┬──────────┐
│ 0xAA   │ 0xBB   │ msg_type │ plain_len│ checksum │ encrypt_len   │ plaintext│ encrypted│
│ 1 byte │ 1 byte │ 1 byte   │ 1 byte   │ 1 byte   │ 2 bytes (BE)  │ N bytes  │ M bytes  │
└────────┴────────┴──────────┴──────────┴──────────┴───────────────┴──────────┴──────────┘
```

### 消息类型

| msg_type | 名称 | 方向 | 说明 |
|----------|------|------|------|
| 0x09 | Login | 客户端→服务器 | 登录请求 |
| 0x0A | Connect | 客户端→服务器 | 长连接握手 |
| 0x0B | Response | 服务器→客户端 | 登录/握手响应 |
| 0x11 | Business | 双向 | 控制命令/查询/响应 |

### 加密方式

- 算法: AES-128-CBC + PKCS5Padding
- 密钥: `MD5(password)[:16]` (前16字符)
- IV: `MD5(password)[16:]` (后16字符)

## 登录流程

### 1. 登录请求 (msg_type=0x09)

**明文部分:**
```
[user_type: 1B] [platform_id: 2B BE] [username: NB]
```

**加密部分:**
```
[serial: 2B BE] [username_len: 1B] [username] [固定字节] [app_id: 1B] [1B]
```

### 2. 登录响应 (msg_type=0x0B)

**解密后数据结构:**
```
偏移      长度    内容
[0:2]     2B      序列号
[2:4]     2B      随机前缀
[4:36]    32B     session_key
[36:68]   32B     uid
[68:100]  32B     api_key
[100:104] 4B      长连接服务器IP
[104:106] 2B      长连接服务器端口 (BE)
```

## 长连接控制流程

### 1. 握手 (msg_type=0x0A)

**明文部分:** session_key (32字节)

**加密部分:** `[serial: 2B] [0x00 0x00] [heartbeat: 2B BE]`

### 2. 握手响应 (msg_type=0x0B)

成功时 msg_type=0x0B,解密后包含心跳间隔等信息。

### 3. 控制命令 (msg_type=0x11)

**加密部分:** `[serial: 2B] [JSON命令]`

**查询命令:**
```json
{"to":"设备ID","cmd":"query","mid":"消息ID"}
```

**控制命令:**
```json
{"to":"设备ID","cmd":"opt","mid":"消息ID","as":{"key":"value"}}
```

### 4. 单次热水循环控制

需要发送两条控制命令:

| 命令 | key | value | 说明 |
|------|-----|-------|------|
| 1 | "1" | "14" | 设置模式 |
| 2 | "2" | "16973823" | 开启单次循环 |
| 2 | "2" | "196607" | 关闭单次循环 |



回复

使用道具 举报

0

主题

5

回帖

81

积分

注册会员

积分
81
金钱
76
HASS币
0
发表于 前天 01:45 | 显示全部楼层
xz633 发表于 2025-12-7 23:10
这两天花了二十刀用 Claude Code 分析了下提交的协议,实现了非模拟点击通过 python 代码调用,实现热水单 ...

牛啊大佬,现在万家乐支持接入米家了,但是接入后不支持零冷水功能,在HA中通过小米官方插件控制热水器也就不支持零冷水功能,但是有零冷水相关的按钮,只是点击会报错,能否直接通过HA发送你这里的零冷水的指令来补全HA控制零冷水的功能,不知道怎么实现,希望大佬指导一二
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2026-1-11 16:47 , Processed in 1.579728 second(s), 9 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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