蓝牙mesh基本理论
蓝牙mesh基本理论
基本概念
Bluetooth® Mesh是一种蓝牙网络技术,其规范于2017年夏天发布。
蓝牙mesh网络由一组专门准备的蓝牙设备组成,我们称之为节点。mesh网络中可能有数千个节点,它们通过发送消息相互通信。
节点之间的通信可以基本上在底层蓝牙无线电的直接范围之外进行,因为消息可以通过称为中继的过程从一个节点跳到另一个节点,直到它们到达最终目的地。这被称为多跳消息传递。
此外,消息的副本通常通过网络中的多条路径传输到目的地。这是一种策略,旨在使蓝牙网状网络非常可靠,以应对环境中可能存在的各种无线电通信挑战,包括物理障碍,像墙一样,这被称为多路径消息传播。
原则上,节点可以与mesh网络中的许多其他节点通信,并且其本身也可以由许多其他节点进行通信。因此,mesh网络的拓扑结构被称为多对多。
因为Bluetooth® Mesh 可实现多对多(m:m)设备通信,非常适合创建控制、监控和自动化系统,在这些系统中,数十、数百或数千台设备需要可靠、安全地相互通信。
蓝牙的类型
蓝牙无线电通信有两种类型
- 蓝牙BR/EDR是蓝牙的原始版本,专为无线音频等设备间数据流应用而设计。
- 蓝牙LE专为涉及少量数据的极低功耗操作而设计,非常适合在控制其他设备、监控设备状态和广播有限数量的信息时使用。
蓝牙mesh是一种网络堆栈,而不是无线电通信技术。蓝牙mesh堆栈位于蓝牙LE之上。Bluetooth LE提供了Bluetooth mesh使用的底层无线电通信功能。
在它们之间,各种蓝牙技术可以支持不同的通信拓扑。
蓝牙BR/EDR支持成对设备之间的一个或多个点对点(1:1)连接,可以被认为是物理连接电缆的无线替代品。
蓝牙LE还支持点对点通信,但除此之外,它还具有广播数据的能力。这是无连接通信,范围内的任何合适的LE接收器都可以以这种方式接收和处理数据广播。这是一个一对多(1:m)拓扑。
蓝牙mesh网络允许多对多(m:n)通信。
mesh网络新节点的配置(provisioning)
在“基本概念”部分,节点被描述为专门准备的蓝牙设备。这是指这样一个事实,即设备要有能力和权利在特定的mesh网络中通信,就必须首先经过一个称为配置(provisioning)的预备安全程序。
一种旨在/想要并入某个特定mesh网络的新设备最初是称为未配置设备(unprovisioned device)。
配置过程由网络管理员(在家用智能家居的情况下,它只是一个户主)使用智能手机或平板电脑手动执行,并为未配置的设备配备一系列安全密钥。
配置完成后,该设备现在被称为节点,它能够与网络中的其他节点通信。配置已使该设备成为此特定mesh网络的成员。
配置完成后,通常还会以适合其产品类型的各种方式配置新节点。例如,将配置蓝牙灯开关,使其控制建筑物中所需的一组蓝牙灯。配置通常是使用与执行配置相同的智能手机应用程序完成的。
节点和元素(Nodes and Elements)
节点是已配置的设备,是由配置过程提供给它的密钥之一标识的特定mesh网络的成员。
某些设备类型比其他类型更复杂,可能由多个部分组成,每个部分都是可单独寻址的,但通常位于同一物理单元内。一些LED照明单元就是这样,有几个单独的LED灯,每个灯都可以独立控制。蓝牙mesh定义了一个元素的概念,以对应于整个节点的各个可寻址部分。因此,在该示例中,LED照明单元将是节点,每个单独的灯将是一个元素。
所有节点都至少包含一个元素。其中一个元素被指定为主元素,并包含适用于整个节点的配置数据。
节点和元素这两个术语可以互换使用,除非需要明确我们谈论的是节点内的特定元素。
地址
蓝牙mesh定义了一种寻址方案,该方案允许识别和寻址单个节点以及节点集合。
地址有三种类型:
单播地址-唯一标识单个节点(严格来说,它们标识特定的元素)。任何网络中都有32767个16位可用单播地址,因此这是网络可能包含的最大元素数量。
组地址-标识设备的集合,通常对应于建筑物特定部分中的某些类型的设备,例如特定房间中的所有灯。组地址是蓝牙网状网络支持的两种多播地址之一。每个网络有16384个16位组地址可用。
虚拟地址-也标识设备集合,是另一种类型的多播地址。虚拟地址与组地址的工作方式不同。虚拟地址是一个16位值,映射到128位UUID。它的前两位将其标识为虚拟地址,其他14位包含虚拟地址所表示的128位UUID的哈希值。完整的128位UUID用于计算消息完整性检查字段,除128位值本身外,所有消息都包括该字段,仅传输其16位虚拟地址。
在接收到包含虚拟地址的消息时,堆栈将识别它所知道的那些UUID,这些UUID的哈希值与接收到的消息的虚拟地址中的哈希值相匹配。可能存在多个匹配,因此通过计算并与消息中的消息完整性代码进行比较来建立最终匹配。
虚拟地址在运行时处理方面比组地址更复杂,效率更低,但虚拟地址映射到的128位UUID意味着网络有数万亿个可用的虚拟地址。
消息和状态
mesh网络中的节点使用消息(messages)进行通信。mesh规范定义了两个高级消息类。
控制消息(Control messages )与网络本身的操作有关,包括心跳等消息,指示特定节点存在、活动和一定数量的跳数。
访问消息(Access messages)与应用程序功能相关,并定义了一系列标准访问消息类型,每种类型都有一个标识操作码。访问消息可以使用SET消息修改节点的状态,通常会导致用户可以感知到的变化。例如,网格灯开关可能会向一组灯发送消息,并在接收到消息后,每个灯都可能打开。访问消息还可以使用GET消息请求和检索节点的当前状态,远程节点将用STATUS消息回复该GET消息。节点本身可以通过发送STATUS消息来宣布其状态。
SET消息有两种变体。已确认的设置消息会以包含新状态值的STATUS消息进行响应,而未确认的设置信息则不会得到回复。
消息是mesh网络中发生事情的基本机制,mesh产品开发人员会发现消息生成和处理是他们软件开发工作的核心。
状态(State)是蓝牙mesh中的一个正式概念,节点通常包含一个或多个状态数据项(称为状态),以某种方式链接到节点的条件或方面。具体状态在mesh模型规范中定义。
消息总是同时具有源地址和目标地址。源地址始终是单播地址,目标地址可以是三种地址类型中的任何一种。然而,在实践中,单播目标地址仅在配置节点时使用,组地址是最常用的,即使在被寻址的节点集只有一个成员的情况下也是如此。
当一个节点发送一条消息时,它被称为将该消息发布到一个地址。当节点最初配置时,会指定它们应该监听的消息中的组和虚拟地址,这被称为订阅。将节点订阅到给定的组地址就像使其成为该组的成员。请注意,严格来说,它是订阅地址的节点上的模型。
蓝牙mesh网络使用的消息发布/订阅方法将发送消息的设备与接收消息的设备解耦。向组地址发布消息的节点不知道已订阅该地址并将接收该地址的节点的身份。同样,已订阅特定组地址的节点,对可能向该地址发布消息的节点一无所知。这种方法的好处是,可以在不影响现有设备配置的情况下进行更改,例如向网络添加新的灯或开关,例如只需要重新配置开关,因为房间里多了一盏灯。
属性
状态是服务器模型包含的数据项,由消息操作。从消息类型推断出消息获取、报告或更新其值的特定状态,消息本身不包含状态标识符。
属性提供了一种表示数据项的替代方法。它们与状态的不同之处在于,它们包含一个显式的、相关的16位ID,该ID指示属性类型和值。属性与蓝牙特性相关联,这些特性也用于蓝牙GATT。
mesh设备属性规范列出了所有定义的属性,并指示了相关的特征,正是这个特征指示了属性值的格式和表示。
属性使模型能够轻松处理各种不同类型的数据,否则需要模型包含大量可选状态。对于某些模型,如使用属性的传感器服务器模型最有意义。将属性与传感器服务器一起使用意味着单个模型定义适用于任何(或多或少)类型的传感器。
模型
将状态、消息类型、状态变化及其对节点或元素的影响等概念结合在一起,就是mesh模型的概念。节点包含一个或多个元素,每个元素包含一个或者多个模型。
模型可以被认为是标准化的软件组件,使节点能够表现出某些行为。mesh轮廓规范和mesh模型规范定义了一组标准模型,包括一组可用于任何类型的产品(称为泛型)的模型。
通用开/关服务器模型(Generic On/Off Server model)允许实现它的节点通过向节点中服务器模型的实例订阅的地址发送通用开/关集消息(Generic OnOff Set message),由包含通用开/关闭客户端模型(Generic On/Off Client model )的另一个节点打开或关闭。在这个例子中,灯开关将包括通用OnOff客户端模型,而灯将包含通用OnOff服务器模型。
通用级服务器模型(Generic Level Server model)允许根据通用级客户端(Generic Level Server client)发布的消息的指示减少或增加节点的某些方面。例如,你可以很容易地想象它被用来调高或调低恒温器。你可能会想象它也被用来调暗或调亮灯光。
这些模型可用于此目的,但设计了一组模型,特别是照明,它有一些令人惊讶的复杂要求。
模型可以扩展一个或多个其他模型,这意味着可以扩展更专业的模型创建,基于和继承其他模型的基本功能。Light Lightness Server扩展了通用电源开关服务器和通用级别服务器模型。它允许灯光变暗或变亮,但考虑到人类对亮度的感知是非线性的。这来自“韦伯-费希纳规则,该规则表示感知的亮度与用精确的非人类仪器测量的实际强度的平方根成正比。
服务器模型包含状态项,而客户端不包含。例如通用开/关服务器模型包含通用OnOff状态。mesh轮廓规范中定义了第三种模型规范称为控制模型(control model),它包含客户端和服务器模型功能以及控制逻辑。控制模型用于实现复杂且高度可配置的控制模型之间的行为。商业照明是一个遇到此类要求的地方的例子,为此定义了一种名为Light LC的特殊控制模型。
强制性模型(Mandatory Models)
节点上的主元素必须支持称为配置服务器模型(Configuration Server Model)和健康服务器模型(Health Server Model )的特殊模型。配置服务器模型包含构成节点配置的状态值,健康服务器模型与设备有关诊断。
元素与模型之间的关系
一个元素包含一个或多个模型,通常一个模型将服务于一个拥有的元素。
但一个模型也可能服务于多个元素。例如,颜色可以控制的灯可能由三个独立的元素组成,第一个控制色调(H),第二控制饱和度(S),第三控制亮度(L)。元素H可能订阅一个名为Office色调的组,元素S订阅Office饱和度的组,元素L订阅Office亮度的组。独立的旋转控件现在可以使用发送到这三个组地址中的每一个的通用级别消息来独立控制办公室灯的色调、饱和度和亮度。
名为Subscription List的状态包含已订阅的组地址和虚拟地址UUID的列表。对于元素和模型的每种组合,节点中都有一个此状态的实例。换句话说,订阅列表位于元素和模型之间多对多逻辑关系的交叉点。
节点组成和配置
每个节点中的每个主要元素都必须包含一个称为配置服务器模型(Configuration Server Model )的模型,该模型包含共同构成节点配置的状态。
配置服务器模型不能与不是主要元素的元素相关联,并且包含配置服务器模型是主要元素特殊且不同于节点可能具有的其他元素的一种方式。
为配置服务器模型定义了17种不同的状态。示例包括包含安全密钥列表(NetKey列表和AppKey列表)的状态,以及指示节点是否可以承担特殊网络角色的状态,例如充当重新传输所有密钥的中继,它接收的消息,以便它们可以在网络上跳跃。
组合数据状态特别有趣。除此之外,它还包含以下字段根据节点包含的元素定义节点的组成,对于每个元素他们各自支持的模型。
节点的类型
节点可能具有特殊的软件功能,其中定义了四个,使其能够提供各种网络服务。这些特征如下:
中继:具有中继功能的节点将重新传输它接收到的消息,从而有助于消息在网络中的多跳旅程。
朋友:此功能通常在功率丰富的节点中启用。朋友节点为关联的低功耗节点提供消息存储和转发服务向朋友询问其存储中有哪些未送达的消息,为了节省电量,这种情况很少发生。
低功耗:低功耗节点(LPN)通常只需要偶尔接收消息,通常由电池供电,可能安装在难以访问的地方。因此,节约能源至关重要。LPN与附近的朋友节点形成了一种称为友谊的关系,而不是在收到罕见消息的情况下频繁激活无线电接收器,这样当LPN明确询问朋友节点是否有任何消息等待传递时,它只需要很少地激活其接收器。
代理:代理节点使智能手机和平板电脑等非网状蓝牙LE设备能够使用应用软件和平台现有的蓝牙LE API。换句话说,许多现有的蓝牙LE设备可以成为网状网络的一部分,而不需要升级其操作系统或API来支持完整的蓝牙mesh协议栈。
概念及其关系
在实现网格固件时,了解各种概念之间关系即使不是必需的,也是有用的
,因为最终这将决定你在代码中使用的数据结构。
您正在使用的API可能会为您提供其中的大部分内容,这样您就不会出错,但拥有一个良好的心理形象仍然是一个好主意,例如,模型与元素的关系。为此,以下不完整的实体关系图(ERD)可能有用。它没有显示每个mesh实体或关系,但它应该封装那些对本研究指南最重要的概念。
Refrence