积分 677
金钱 572
威望 0
贡献 0
HASS币 0
高级会员
积分 677
金钱 572
HASS币 0
美的风扇灯控制协议解析(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包会没响应。