BLE 技术(九)--- SIG MESH Models 是如何设计的(下)?

本文深入探讨BLE MESH模型层,包括SIG Mesh Models的通信机制、状态转换、标准模型和自定义模型。模型采用客户端-服务器架构,通过Opcode和Parameters交换信息。介绍了Generic Models如OnOff、Level、Battery等,以及Foundation Models如配置和健康模型。此外,还涵盖了Transport Access消息的分段和重组过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前篇博文BLE MESH 各层报文是如何设计的 介绍了BLE MESH Advertising Bearer 和GATT Bearer 、Network Layer、Transport Layer 报文格式分别是如何设计或定义的?这些报文各字段如何实现MESH 各协议层设计的功能?比如如何实现MESH Provisioning Process、Key Refresh procedures、IV Update procedure、Network addressing process、Encrypted/Obfuscated process、Segmentation and reassembly process 等?本文主要介绍SIG 设计或定义了哪些MESH Models?一个Model 通常定义了哪些 states、messages、behavior / procedure?MESH client model 与MESH server model 之间传输的messages 如何由Access Layer 承载、Transport Layer 加解密认证和分段重组的?

一、SIG Mesh Models Layer

博文BLE MESH 如何定义并传递消息 已经简单介绍了State、Message、Model 的定义以及它们之间的关系。简单来说,一个BLE MESH 设备经过Provisioning Process 入网后就成为一个MESH Node,一个Node 设备可能包含多个独立的子设备Elements(每个元素一个单播地址,作为寻址的依据),每个Element 可能包含多个Models(每个模型定义元素的一个基本功能)。

1.1 MESH Model communication

MESH Model 采用Client – Server 架构通信,Server Model 定义了一组 States、作用于这些状态的Messages、响应这些消息的Behaviors 等,Client Model 则通过作用于状态的Messages 获取或者更改特定的State value。Client Model 通过特定的Messages 访问或更改Server Model 定义的特定State 的过程如下:
Client-server model communication
Client Model 向Server Model 发送的Messages 主要有两种:一种是查询Server Model 上特定的State 信息;另一种是设置Server Model 上特定的State 信息。Server Model 向Client Model 发送的Messages 主要也有两种:一种是用Present State 响应来自Client Model 的查询消息;另一种是按照预设条件(比如当前状态发生改变时,或周期性时间间隔耗尽时)向该模型订阅者发送Present State 消息。
Client-Server Model message sequence charts
从上图可以看出,Client Model 向Server Model 发送的消息主要有Get message 和Set message 两种。Server Model 向其它节点发送的消息都是 Status message,一种是用来响应Client Model 的,另一种是在状态发生改变或者周期性定时间隔超时时发送给该模型订阅组的(上图省略了周期性发布消息图示)。假如Client Model 也是Server Model Publish Group 中的一员,Client Model 向Server Model 发送Set message 后将收到至少两个同样的 Status message,为了降低对MESH 网络资源的占用,Set message 定义为Acknowledged set 和Unacknowledged set 两种。

Client Model 与Server Model 之间交互的 messages 主要是用来传递Present State 信息或Target State 信息的。State 可能就是一个数值(比如开关状态可以用一个布尔值表示,亮度或速度状态可以用一个整数表示等),也可能是由多个数值组合成的Composite state(比如彩色灯光状态可以由色调、饱和度、亮度三种状态组合而成),多个State 之间也可能定义了略复杂的绑定关系(Bound state 表示绑定关系中的一个状态发生变化,可能会引起另一个状态的联动变化)。

与GATT Profiles / Services 类似,SIG 也提供了一些标准的SIG Model,比如Configuration Server/ Client model、Health Server / Client model 等Foundation models,比如Generic OnOff Server / Client model、Generic Level Server / Client model、Sensor Server / Client models 等SIG models。每个Model 都有一个唯一的Model ID(每个SIG Model ID 都由 2 个字节唯一标识,限于篇幅只列出部分作为示例):

SIG Model ID Model Name
0x0000
0x0001
Configuration Server
Configuration Client
0x0002
0x0003
Health Server
Health Client
0x1000
0x1001
Generic OnOff Server
Generic OnOff Client
0x1002
0x1003
Generic Level Server
Generic Level Client
0x1100
0x1101
0x1102
Sensor Server
Sensor Setup Server
Sensor Client

考虑到现实应用场景中,可能有很多功能超出了SIG 定义的标准模型的范畴,SIG 也允许Vendor 在SIG Models 无法满足需求的情况下自己定制Vendor Models。Vendor Model ID 使用两个字段32 位标识(由Company ID 和vendor-assigned model ID 构成):
Vendor Model ID format
Client Model 与Server Model 之间交互的 messages 主要由Opcode 和Parameters 两部分构成,每个消息都有一个唯一的Opcode(不同model 的message opcode 都不同,可仅通过opcode 知道该message 属于哪个model)。与Model 类似,Message 也分为SIG Message 和Vendor Message,SIG Message 使用 1 字节或 2 字节的Opcode,Vendor Message 使用 3 字节的Opcode(后两个字节是Company ID,也即下图中的“zzzzzzzz”)。
Opcode formats
SIG 可使用的Opcode 一共有 27 - 1 + 214 = 16511 个,足够使用了。每个Company ID 可供使用的Opcode 只有 26 = 64 个,如果不够用还需要再申请Company ID。

下面给出几个SIG Message Opcode 作为示例:

Opcode Message Name
0x00
0x80 0x00
0x80 0x01
0x80 0x02
0x80 0x03
0x01
Config AppKey Add
Config AppKey Delete
Config AppKey Get
Config AppKey List
Config AppKey Status
Config AppKey Update
0x80 0x3D
0x80 0x3E
0x80 0x3F
Config Model App Bind
Config Model App Status
Config Model App Unbind
0x82 0x01
0x82 0x02
0x82 0x03
0x82 0x04
Generic OnOff Get
Generic OnOff Set
Generic OnOff Set Unacknowledged
Generic OnOff Status

MESH Message 中的Parameters 跟具体模型的具体状态相关,由于Message 是作用于State 的,想了解某个Message 的Parameters 需要先了解其查询或设置的具体State。

1.2 MESH State transition

以比较简单的Generic OnOff state 为例,使用布尔值就可以描述状态信息,比如0x00 表示Generic Off state、0x01 表示Generic On state。Generic Level state 则使用 16 位有符号整数值就可以描述状态信息,比如0x0010 可以表示电机转速或灯光亮度为16。State 表示相对简单,如何表示State 变更或转换过程呢?

Generic Level state 状态的变化不可能瞬时发生,从Initial State 到Target State 一般需要一个转换时间 transition time,SIG 定义的state transition 过程如下:
State transition
Server Model 收到来自Client Model 的Set message 后,会延迟一段时间Delay time(比如多个LED 灯可通过设置不同延迟时间实现顺序点亮效果)后才开始状态转换,从Initial State 转换到Target State 需要的时间称为Transition Time,状态转换过程中的状态为Present State,从Present State 转换到Target State 需要的时间称为 Remaining Time。

前面也谈到,MESH Message 是作用于State 的,以Generic OnOff messages 为例,Generic OnOff Set 的Opcode 是0x82 0x02,Parameters 如下:
Generic OnOff Set message parameters
State value Filed 是OnOff,占用 1 个字节,有些状态值占用更多字节,比如 Level 占用两个字节。

TID Filed (Transaction Identifier) 用来标识该消息是一个新的消息还是旧的重传消息,为了保证Set Message 能正确送达,Client Model 通常在一定时间内未收到响应消息会重新发送该消息,Server Model 通过TID 字段来区分收到的消息是否是重发的,对于重发的消息不重复响应。

Transition Time 和Delay 都是步进的(而

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流云IoT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值