一、概述
蓝牙mesh数据包的结构如下图:
在BLE Mesh中常用于数据通信的几种方式:Mesh Beacon、Mesh Message、PB-ADV、PB-GATT。
前三种是广播类型,最后一种是基于代理走BLE连接的一种数据通信。
1、PB-ADV的包是用在Provisioning过程的,Provisioning是一个设备加入Mesh网络的过程。
2、Mesh Message,这个是在设备入网后,进行数据通信的时候大量使用的包。节点间通信就是使用这种包进行的。
3、Mesh Beacon包含两种类型:Unprovisioned Device beacon和Secure Network beacon,其中Unprovisioned Device Beacon是用来被Provisioner发现设备用的,也就是在Provisioning之前设备发送的包,这个包里会包含Manufacturer相关的Device UUID(128bits),这个Device UUID是用来区分设备的,因此需要保证唯一性。而Secure Network beacon则是设备入网后用来发送一些安全相关的包,比如IV index更新包。
因此一个正常流程是这样的:
1、设备(入网前)广播Unprovisioned Device beacon的广播包,这个包里包含Device UUID
2、Provisioner(比如蓝牙网关,手机等)通过扫描发现这个设备,并通过Device UUID和云端同步设备信息(比如厂家信息,产品功能等等),然后通过PB-ADV的包发起Provisioning过程
3、设备成功加入Mesh网络后,如果需要,可以通过Secure Network beacon更新IV index。当然大部分时间,设备是通过Mesh Message的信息和其他节点进行数据通信。
二、Mesh Beacon
UDB(Unprovisioned Device beacon)是未配网的device发出,可以被provisioner发现;包含device UUID、OOB信息(配网过程中使用)。
SNB(Secure Network Beacon)是被Node用来标识子网信息和安全状态。Relay and Friend nodes 必须发送 beacons 而其他类型Nodes可能发送 beacons。 当网络中的任意设备接收到SNB时,需要监听IV Index updates和Key Refresh procedures;网络中的SNB interval推荐为10秒左右。
三、PB-ADV
PB-ADV一般作用于设备配网期间,配网器与设备建立一种会话,使用PB-ADV进行配网数据的交互,是一个不可链接不可扫描的非定向的广播包。
PB-ADV是一种供应载体,用于通过广播渠道使用通用供应pdu提供设备。配置机制是基于会话的。未配网的设备一次只能支持一个会话。对于配网器来说,没有这样的限制。使用链接建立程序建立会话。 链接建立由配网器通过发送链接打开的消息来启动。链接打开消息包含设备的设备UUID。在PB-ADV上,PB-ADV PDU格式包含一个链接ID字段。除非已经设置,即设备已经收到设置邀请PDU,否则设备在接收到链接打开消息时,应通过回复具有相同链接ID的链接ACK消息来接受它。
PB-ADV承载用于传输通用供应pdu。PB-ADV承载MTU(最大传输单元)大小为24字节。
任何使用PB-ADV AD类型的广告应为不可连接和不可扫描的无定向广告事件。如果一个节点在一个可连接的或可扫描的广告事件中接收到一个PB-ADV AD类型,则应忽略该消息。
另外,对于不支持PB-ADV的设备,可以使用PB-GATT。
PB-GATT是一种用于使用代理pdu提供设备的配置承载,当配网器由于应用程序接口的限制而不支持PB-ADV时,提供PB-GATT作为支持 。建议连接间隔在250到1000ms之间。
四、Mesh Message
配网后mesh网络中数据的交互,是一个不可链接不可扫描的非定向的广播包。节点间通信就是使用这种包进行的。
1) 设备上电:蓝牙mesh设备上电后,需要使用vendorr model indication 进行消息上报,上报消息包括设备所有支持的可上报的属性(包括上电消息)。
2) 设备同步: 设备接收到同步消息后,会上报所有可上报的属性。
3) 设备状态改变上报:蓝牙mesh设备状态改变后,需要通过该状态关联的model和vendor model 的属性都上报。