Skip to content

BLE Mesh 控制指令格式 (ble_in)

hapi 下发的控制指令为十六进制字符串,整体结构:

53 {msgType} {cmdLen} {naddr_le} {opcode} {data} {xor}
字段长度说明
531 字节固定帧头
msgType1 字节消息类型(30=控制, 32=查询, 0c=登录, 04=Mesh配置)
cmdLen1 字节负载长度
naddr_le2 字节网络地址(小端序),广播地址=bcc0
opcode1 字节操作码
data可变指令参数
xor1 字节全帧异或校验和

详细的 genCommand 指令对照表(含 cmdLen、参数格式、hex 示例)见附录 BLE Mesh 指令帧

开关控制

操作opcodehex 示例说明
02533004{naddr}02{status_byte}{xor}status_byte 见下方编码
02533004{naddr}02{status_byte}{xor}
插卡取电开关02533004{naddr}02{status_byte}{xor}cmdLen=04,同开关格式

status_byte 编码(4 路,msgType=02):

bit 7 6 5 4 3 2 1 0
     [4][3][2][1]    每路 2 bit: 10=开, 01=关, 00=不变

8 路开关(oe=true)使用 cmdLen=05、msgType=45,额外一个字节编码 5-8 路。

亮度控制

操作opcodecmdLen参数说明
设置亮度0304<val>val: 00-64 (0-100%)
增加亮度2f04<val>增量
降低亮度3004<val>减量
设置子灯亮度9c05<index><val>按子灯索引设置
增加子灯亮度a105<index><val>
降低子灯亮度a205<index><val>

色温控制

操作opcodecmdLen参数说明
设置色温0404<val>val: 00-64
增加色温3104<val>
降低色温3204<val>
设置子灯色温9d05<index><val>
增加子灯色温a505<index><val>
降低子灯色温a605<index><val>

窗帘控制

操作opcodecmdLen参数hex 示例
开窗帘050401533004{naddr}0501{xor}
关窗帘050402533004{naddr}0502{xor}
停窗帘050403533004{naddr}0503{xor}
开窗帘到位置0604<pos>533004{naddr}0632{xor} (pos=50)
关窗帘到位置0604<pos>同开窗帘到位置

空调控制

操作opcodecmdLen参数说明
开空调020402status=02
关空调020401status=01
设置模式1d04<mode>1=cold, 2=warm, 3=fan, 4=auto
设置温度1b04<val>温度值(16-30)
增加温度3304<val>
降低温度3404<val>
设置风速1c04<speed>1=high, 2=middle, 3=low, 4=auto
增加风速350401
降低风速360401

空调组合指令 (setACAdv)

一次性设置模式+温度+风速,cmdLen 根据参数动态计算:

53 30 {cmdLen} {naddr} 02 02 [1d {mode}] [1b {temp}] [1c {speed}] {xor}

红外控制

操作opcodecmdLen参数说明
红外发射8f07<ir_data>ir_data 见下方格式

ir_data 格式

<study><cmd_id><delay><reserved>
字段长度说明
study1 字节00=发送,01=学习
cmd_id1 字节红外指令码(见下表)
delay1 字节延时(单位 100ms)
reserved1 字节保留

红外指令码对照

动作TV机顶盒
turn_on0d2f
turn_off0d2f
increase_volume0426
decrease_volume0e30
set_volume_mute0022
increase_channel0527
decrease_channel0f31

切换频道(特殊格式):

<type><channel_le><reserved>
字段说明
type02=TV, 03=机顶盒
channel_le频道号(2 字节小端序)
reserved00

其他指令

操作opcodecmdLen参数说明
设置 RGB4c06<rgb_hex>6 字节 RGB 颜色
禁用设备bcc00426<01|00>01=禁用, 00=启用(广播地址)
透传15动态<raw_hex>原始 hex 数据透传

场景执行

genExecuteScene(id) → 53 30 04 bc c0 01 <id> <sign>
字段说明
53帧头
30控制指令
04数据长度
bc c0场景指令标识(广播地址)
01固定
<id>场景 ID(1 字节 hex)
<sign>签名

naddr 编码

encodeNaddr(naddr) 将设备的网络地址编码为 2 字节小端序 hex:

javascript
const str = naddr.toString(16).padStart(4, '0');
return str.substring(2, 4) + str.substring(0, 2);

naddr 是 BLE Mesh 中的单播地址,范围 0x0001-0x7FFF。广播地址为 bcc0

签名

signCommand(cmd) 对整个命令体(含帧头)计算异或校验和,附加在末尾:

javascript
let xor = 0;
for (let i = 0; i < cmd.length; i += 2) {
  xor ^= parseInt(cmd.substring(i, i + 2), 16);
}
return xor.toString(16).padStart(2, '0');

网关收到指令后会验证签名,签名不匹配的指令将被丢弃。