智能家居设备蓝牙mesh扩展协议

一. 概况

本文为阿里巴巴为智能家居设备制定的蓝牙mesh扩展消息定义,便于更多的智能家居设备通过蓝牙mesh技术来接入天猫精灵生态。

二. Model

由于SIG Mesh的Model目前尚未覆盖所有的家电,我们采用Vendor Model来实现智能家居设备的控制和状态上报,SIG定义其格式为4字节(其中2字节的Company ID和2字节的Vendor-assigned Model ID),其中Alibaba的Company ID为0x01A8,如下表所示。
表1 Vendor Model ID定义格式

Field Size(octets) Notes
16-bit Company Identifier 2 0x01A8
16-bit vendor-assigned model Identifier 2

下表为两个VendorModel ID,用于消息扩展用。
表2 Vendor Model ID

Model Name SIG Model ID
Vendor Model Server 0x01A80000
Vendor Model Client 0x01A80001

IOT设备作为Vendor Model Server,天猫精灵作为Vendor Model Client。

三. 扩展消息

1. 操作码

在mesh协议中规定,操作码分为3种:1字节OpCode;2字节Opcode;3字节Opcode。
1字节Opcode的最高位为0,所以1字节Opcode的取值范围从0x00-0x7e(其中0x7f用于将来扩展用)。
2字节Opcode第一字节的最高位为1,第二位为0,所以2字节OpCode的取值范围从0x8000到0xbfff,都为SIG分配。
3字节Opcode第一字解的最高两位均为1,后两字节”z”是由SIG分配的Company ID,Company ID使用小端优先的方式传输,阿里巴巴使用的Company ID为0x01a8。’x’可由厂商定义64个opcodes。
下图为操作码的具体格式。
设备蓝牙mesh扩展协议 - 图1
图1 操作码格式
阿里巴巴定义的Opcode如下表所示
表3 蓝牙mesh扩展消息Opcode

Message Name Opcode
Vendor Message Attr Get 0xD001A8
Vendor Message Attr Set 0xD101A8
Vendor Message Attr Set Unacknowledged 0xD201A8
Vendor Message Attr Status 0xD301A8
Vendor Message Attr Indication 0xD401A8
Vendor Message Attr Confirmation 0xD501A8
Vendor Message Transparent msg 0xCF01A8

2. 消息结构

Vendor message里的数据都使用小端优先方式传输。

Vendor Message Attr Get
该消息用于Vendor Model Client获取Vendor Model Server的一个或多个属性值,消息格式如下

Field Size Note
Opcode 3 0xD001A8
TID 1 Transaction Identifier,每条新消息递增
Attr Type 2 读取的Attr类型

Attr Type最多可有15个。当Vendor Model Server收到Attr Get消息后,必须向Vendor Model Client回复Attr Status。如Vendor Model Client在下发该命令之后未收到Vendor Model Server返回的Attr Status,可以再次下发该指令。

Vendor Message Attr Set
该消息用于Vendor Model Client设置Vendor Model Server的一个或多个属性值,消息格式如下

Field Size Note
Opcode 3 0xD101A8
TID 1 Transaction Identifier,每条新消息递增
Attr Type 2 设置的Attr类型
Attr Parameter N 设置的Attr参数

Attr Type和Attr Parameter最多可有15个。当Vendor Model Server收到Attr Set消息后,必须向Vendor Model Client回复Attr Status。如Vendor Model Client在下发该命令之后未收到Vendor Model Server返回的Attr Status,可以再次下发该指令。

Vendor Message Attr Set Unacknowledged
该消息用于Vendor model Client设置Vendor Model Server的一个或多个属性值,消息格式如下

Field Size Note
Opcode 3 0xD201A8
TID 1 Transaction Identifier,每条新消息递增
Attr Type 2 设置的Attr类型
Attr Parameter N 设置的Attr参数

Attr Type和Attr Parameter最多可有15个。当Vendor Model Server收到Attr Set Unacknowledged消息后,不需要向Vendor Model Client发送Attr Status消息

Vendor Message Attr Status
该消息用于Vendor Model Server回复Attr Get和Attr Set命令或上报设备状态信息给Vendor Model Client,消息格式如下

Field Size Note
Opcode 3 0xD301A8
TID 1 Transaction Identifier,每条新消息递增
Attr Type 2 上报的Attr类型
Attr Parameter N 上报的Attr参数

Vendor Model Client收到Attr Status后,不需要回复消息给Vendor Model Server

Vendor Message Attr Indication
该消息用于Vendor Model Server发送属性给Vendor Model Client,消息格式如下

Field Size Note
Opcode 3 0xD401A8
TID 1 Transaction Identifier,每条新消息递增
Attr Type 2 上报的Attr类型
Attr Parameter N 上报的Attr参数

Attr Type和Attr Parameter最多可有15个。当Vendor Model Client收到Attr Indication消息后,必须向Vendor Model Server回复Attr Confirmation。如Vendor Model Server在发出该命令之后未收到Vendor Model Client回复的confirmation,可以再次发送该指令。

Vendor Message Attr Confirmation
该消息用于Vendor Model Client回复给Vendor Model Server,用于表示已收到Vendor Model Server发出的Indication,消息格式如下

Field Size Note
Opcode 3 0xD501A8
TID 1 Transaction Identifier,收到的Indication的TID

Vendor Model Server收到Attr Confirmation后,不需要回复消息给Vendor Model Client

Vendor Message Attr Transparent Msg
该消息用于mesh设备与天猫精灵之间透传数据,后续数据格式由各厂家自己实现.

四. 智能家居设备描述

为了适配各种智能家居设备,我们将智能家居设备抽象成属性,事件和场景模式,具体定义如下
属性:包括设备具有的系统属性和物理属性,也包括设备具有的特殊功能,我们通过设置属性来改变设备的工作状态或让设备开启/关闭它的特殊功能。
事件:设备在运行过程中出现了需要用户来手动干预的特殊情况,这时候上报给用户的通知。或者是用户主动激活的某些事件,例如按键。
场景模式:设备为了完成某些特定功能而预设在设备内的一系列属性值,便于人们理解;在某一个时刻,设备只能处于一个场景模式。
注:如果属性,事件,场景模式无法满足产品开发需求,请及时与我们联系添加新的属性,事件,场景模式类型。(aligenie.iot@list.alibaba-inc.com)

Error Code 释义
0x00~0x7F sig mesh Current Fault,请参看mesh profile文档的Table 4.21
0x80 设备未准备好
0x81 不支持的属性
0x82 不支持的操作
0x83 参数错误
0x84 设备状态错误
0x85 未找到索引
0x86 存储已满
0x87 格式错误

五.Sample Data

1.设置目标温度

Vendor Model Client设置目标温度为22摄氏度
**
Vendor Model Client下发设置目标温度的Attr Set命令

0xD1 0xA8 0x01 0x01 0x0C 0x01 0x4B 0x73
Opcode TID Attr Type Attr Value
0xD101A8 01 目标温度 (0x010C) 目标温度值:22摄氏度(0x734B = 295.15K)

Vendor Model Server设置目标温度成功时返回的Attr Status

0xD3 0xA8 0x01 0x01 0x0C 0x01 0x4B 0x73
Opcode TID Attr Type Attr Value
0xD301A8 01 目标温度 (0x010C) 目标温度值:22摄氏度(0x734B = 295.15K)

Vendor Model Server设置目标温度失败时返回的Attr Status

0xD3 0xA8 0x01 0x01 0x00 0x00 0x0C 0x01 0x80
Opcode TID Error Code Type Attr Type Error Code
0xD301A8 01 0x0000 目标温度 (0x010C) 状态码:设备未准备好(0x80)

2.读取数据

Clinet读取前后位置,当前温度,当前湿度
Vendor Model Client发送Attr Set读取前后位置,当前温度,当前湿度的属性

0xD0 0xA8 0x01 0x01 0x10 0x01 0x0D 0x01 0x0F 0x01
Opcode TID Attr Type Attr Type Attr Type
0xD001A8 01 前后位置:(0x0110) 当前温度:(0x010D) 当前湿度:(0x010F)

Vendor Model Server读取三个属性成功时返回的Attr Status

0xD3 0xA8 0x01 0x01 0x10 0x01 0x32 0x0D 0x01 0x4B 0x73 0x0F 0x01 0x94 0x11
Opcode TID Attr Type Attr Value Attr Type Atrtr Value Attr Type Atrtr Value
0xD301A8 01 前后位置:(0x0110) 前后位置:50(0x32) 当前温度:(0x010D) 当前温度:22摄氏度(0x734B=295.15K) 当前湿度:(0x010F) 当前湿度:45%(0x1194)

Vendor Model Server读取温度失败时返回的Attr Status

0xD3 0xA8 0x01 0x01 0x10 0x01 0x32 0x00 0x00 0x0D 0x01 0x81 0x0F 0x01 0x94 0x11
Opcode TID Attr Type Attr Value Error Code Type Attr Type Error Code Attr Type Atrtr Value
0xD301A8 01 前后位置 前后位置:50(0x32) 0x0000 当前温度:(0x010D) 错误码:不支持的属性(0x81) 当前湿度 当前湿度值:45%(0x1194)

3.发送温度

Vendor Model Server发送温度给Vendor Model Client
Vendor Model Server发送Attr Indication上报温度

0xD4 0xA8 0x01 0x01 0x0D 0x01 0x4B 0x73
Opcode TID Attr Type Attr Value
0xD401A8 01 当前温度 (0x010D) 当前温度值:22摄氏度(0x734B = 295.15K)

Vendor Modlel Client收到Attr Indication后发送Confirmation

0xD5 0xA8 0x01 0x01
Opcode TID
0xD501A8 01