一个智能设备在未加入蓝牙Mesh网络之前称为Device,加入Mesh网络(Porvisioning过程)后,称为Node(节点)。每个Node可以包含多个Element(比如智能插排,每一个插孔都是一个Element),一个Element对应一个Unicast address(16bits,32767个地址,bit15=0);每个Element可以包含多个Model(用来发送、接收和处理Message),每个Model对应一个Model ID(可以分SIG ModelID和Vendor Model ID),类似这个Model的地址。其中,SIG Model ID是16bits的,SIG组织定义的专用Model ID,SIG Model ID参考例子如下图所示,而Vendor Model ID是32bits的,由16bits的Company ID和16bits的Vendor-assigned Model ID组成。
下图是Mesh网络分层结构,工程师Coding的时候,一般操作其中的Access Layer,也就是打包Access Payload。Access Payload的包结构分为两个字段:Opcode+Parameter。每个Access Payload可以最多是32个Segment(12字节),也即最多384个字节(包含TransMIC),如果TransMIC是4字节,则有效载荷是380字节,可以有3种组合:1字节的Opcode(For Special Message)+379字节的Parametes;2字节的Opcode(For Standard Message)+378字节的Parameters;3字节的Opcode(For Vendor-Specific Message)+377字节的Parameters。当然,如果Unsegment,则Access Payload最多可以有11字节。
Mesh网络是消息驱动的架构,每个Model处理一类Messages,消息分ACK和非ACK消息,比如对应上述的Generic OnOff Server的Model,需要处理以下图所示的Messages。
另外Messages可以支持Transactions(通过Transaction Identifier识别),在一个Transaction里面支持一系列Messages,比如Set,Recall和Clear等。Transaction Identifier可以识别这个消息是个新消息还是一个重发的之前的旧消息。
Generic OnOff Set这个消息的包结构如下图所示:
一个Messages只能对应一个Model,如果需要处理两个相同的Message,则需要设置两个不同的Element和Model来处理。如下图所示,这个智能插排设备需要同时控制两个插座的开和关,因此需要处理两个相同的Generic OnOff Set的Message,当该设备加入Mesh网络成为一个Node后,该Node需要设置两个Element,获得两个unicast address,并配置两个Generic OnOff Server的Model,分别处理Generic OnOff Set的Message(通过Unicast address区别)
关于所有Messages的Opcode定义,可以参考文档《Bluetooth Mesh Profile specification》的4.3.4和文档《Bluetooth Mesh Model specification》的7.1。