找回密码
 立即注册

微信扫码登录

搜索
查看: 154|回复: 5

[技术讨论] 美的蓝牙风扇灯控制协议,通过此协议可实现ha控制

[复制链接]

9

主题

96

回帖

677

积分

高级会员

积分
677
金钱
572
HASS币
0
发表于 前天 21:53 来自手机 | 显示全部楼层 |阅读模式
美的风扇灯控制协议解析(MAC替换即可使用)

下面是通过逆向 BLE 广播协议,实现风扇灯的亮度,色温、转速、定时等功能


1. BLE广播包结构

设备发送的是 Manufacturer Data:

长度:

31 Bytes

完整结构:

Byte 0-7
02 01 02 1B FF 11 4D 19
Byte 8
Encrypt Flag
Byte 9-14
设备MAC(小端)
Byte 15 Channel
Byte 16-30 加密Payload

结构:

02 01 02 1B FF 11 4D 19
|
+-- 加密信息
|
+-- MAC
|
+-- 数据

2. MAC处理算法

输入:

00:00:70:49:A8:7D

去除符号:

00007049A87D

拆分:

00 00 70 49 A8 7D

转换小端:

7D A8 49 70 00 00

后续全部使用:

mac_bytes

3. 根据MAC生成加密表

协议没有固定密码。

每个设备根据MAC生成自己的 key。

算法:

def create_encode_table(mac): table=[] left=0 right=1 while left < 5: value=(mac[left]+mac[right]) & 0xff table.append(value) right += 1 if right==6: left += 1 right=left+1 table.append(sum(mac)&0xff) return table

例如:

MAC:

7D A8 49 70 00 00

生成:

Encode Table = [ 25, C6, ED, 7D, 7D, F1, A8, 49, 70, 00, 00, 49, 70, 00, 00, 3E ]

4. 控制命令表

风扇

功能————数据
风扇开关09
风扇关闭0B
正反转1C
1档19
2档1A
3档81
4档88
5档85
6档86
自然风20
睡眠风21

定时

时间————数据
取消00
1小时52
2小时53
3小时54
4小时55
5小时57
6小时58

灯光开关06

亮度

格式:

51 XX

XX:

亮度百分比 × 2.55

例如:

50%

50×2.55=128 0x80

发送:

51 80

色温

格式:

55 XX

例如:

50%

55 80

5. Payload生成

明文结构:

Byte0 Channel
Byte1 Version
Byte2 Command Type
Byte3-N Command Data
Byte14 Checksum

固定:

Channel=01 Version=01

Command Type:

cmd_type = 1 if len(values)>1 else 0

例如:

灯开:

values:

06

生成:

01 01 00 06

补零:

01 01 00 06 00 00 00 00 00 00 00 00 00 00

Checksum:

公式:

channel + version + cmd_type + values求和

6. XOR加密

不加密:

Channel

剩余:

payload[1:]

加密:

公式:

encrypt_data[i] = payload[i+1] XOR encode_table[index+i]

index:

来自:

Encrypt Flag低4位

例如:

index=14

则:

第一个字节:

payload[1] XOR encode_table[14]

7. Encrypt Flag

生成:

flag=(0x01<<4)|(index&0x0F)

例如:

index=14:

0001 1110

结果:

1E

8. 最终数据组装

Python示例:

packet=[ 0x02, 0x01, 0x02, 0x1B, 0xFF, 0x11, 0x4D, 0x19, encrypt_flag ]
packet += mac_bytes
packet += [0x01]
packet += encrypted_data

最终:

02 01 02 1B FF 11 4D 19 FLAG MAC 01 DATA

转换HEX字符串即可广播。

9. END释放包

遥控协议采用:

按下:

CMD

松开:

END

END:

values固定:

00

其它算法完全一致。


协议总结

整个协议:

MAC ↓ Encode Table ↓ Command ↓ Payload ↓ Checksum ↓ XOR ↓ BLE Manufacturer Data ↓ 广播控制


感谢所有喜欢折腾智能家居、BLE逆向和 Home Assistant 的玩家。

希望这个协议分析能够帮助更多人,让智能设备真正属于用户。

下面我提供下协议的测试python文件,建议大家用ha集成测试,Home Assistant BLE ADV Ceiling Fan / Lamps,这个集成带了发射数据包的功能。

测试:先发送CMD功能包,然后再发射END包,如果只发射cmd包,会导致风扇灯有响应,但是再次发射下一个cmd包会没响应。



fanok.zip

2.2 KB, 下载次数: 6

回复

使用道具 举报

5

主题

123

回帖

3096

积分

论坛技术达人

积分
3096
金钱
2963
HASS币
20
发表于 昨天 09:52 | 显示全部楼层
蓝牙抓包用的手机配合抓包软件还是电脑配合硬件?用的哪个抓包软件,能出个简要教程吗
WIFI ZigBee电表 鱼:土豆_土豆
回复

使用道具 举报

1

主题

20

回帖

214

积分

中级会员

积分
214
金钱
193
HASS币
0
发表于 昨天 09:59 | 显示全部楼层
zxl_hass 发表于 2026-8-6 09:52
蓝牙抓包用的手机配合抓包软件还是电脑配合硬件?用的哪个抓包软件,能出个简要教程吗 ...

他这个基本不需要抓包 了 只要你的设备MAC 地址在遥控器上有
回复

使用道具 举报

9

主题

96

回帖

677

积分

高级会员

积分
677
金钱
572
HASS币
0
 楼主| 发表于 昨天 23:09 来自手机 | 显示全部楼层
zxl_hass 发表于 2026-8-6 09:52
蓝牙抓包用的手机配合抓包软件还是电脑配合硬件?用的哪个抓包软件,能出个简要教程吗 ...

关注一下我另外的帖子,看一下蓝牙广播的意思,通过蓝牙广播解析设备状态,然后通过本帖子了解下如何控制设备,然后实现设备状态和控制一条龙
回复

使用道具 举报

0

主题

5

回帖

24

积分

新手上路

积分
24
金钱
19
HASS币
0
发表于 5 小时前 | 显示全部楼层
楼主可以出一个详细一点的教程吗?教教小白如何抓包,才能更好的了解原理。
回复

使用道具 举报

0

主题

5

回帖

24

积分

新手上路

积分
24
金钱
19
HASS币
0
发表于 4 小时前 | 显示全部楼层
作者你好,可以加一下你的微信吗?有问题咨询。多谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-7 19:02 , Processed in 0.011595 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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