一.MESH VS 点对点

大多数蓝牙低功耗设备使用一对一简单点对点网络拓扑结构来进行相互间的通信,在蓝牙核心规格中,这称为“微微网”。想象一下,智能手机已经建立了与心率监测仪的点对点连接,并可借此传输数据。同样的智能手机也可以建立与其他设备的点对点连接,在这种情况下,智能手机可以直接与其他每台设备进行通信,但其他设备之间无法直接进行通信。相比之下,mesh网络具有多对多拓扑结构,每台设备都能够与mesh网络中的任何其他设备进行通信。设备能够将消息中继至其他设备,使端到端通信范围得以扩展,远远超出每个单独节点的无线电覆盖范围

二.设备和节点

mesh网络中的设备称为节点,非mesh网络中的设备称为未经启动配置的设备。将未经启动配置的设备转换为节点的过程称为启动配置。启动配置是一个安全的过程,原本未经启动配置的设备经过启动配置后会拥有一系列加密密钥,并可以启动配置的设备(通常是平板电脑或智能手机)识别,其中密钥被称为网络密钥或简称为Netkey。mesh网络中的每个节点都至少具有一个Netkey,设备必须拥有该密钥才能成为加入相应的网络,并成为节点。在节点投入使用之前,还有其他一些要求,但通过启动配置获取Netkey是必须的

三.元素和消息

1、元素:节点具有多个组成部分,每个部分都可以独立进行控制,这些部分被称为元素
2、消息:当某一节点需要查询其他节点状态或控制其他节点时,会发送对应类型的消息,mesh网络中的所有通信均以消息为中心的,且定义了多种消息类型。消息可以分为两类:有应答、或无须应答的消息。有应答的消息需要收到接收节点的响应,该响应有两个目的:确认与其相关的消息已被接收,并将消息接收方有关的数据返回给消息发送方。如果发送方的应答的消息没有收到响应,则发送方可以重新发送消息,无须应答的消息则无需响应

四.地址

消息必须从一个地址发送给另一地址的节点,蓝牙mesh定义了三种类型的地址:
1、单播地址:单播地址仅可识别单一元素,在启动配置过程中,单播地址会被分配给设备
2、多播地址:多播地址地址可以由蓝牙技术联盟定义,也可以动态分配,它可以表示一个或多个元素的。目前已经定义了4组蓝牙技术联盟多播地址,分别是All-proxy、All-friends、Al-relay和All-nodes
3、虚拟地址是可以分配给一个或多个节点的一个或多个元素的地址,它采用128位UUID值的形式,任何元素都可以与之相关联,它基本上相当于一个标签

五.发布和订阅

蓝牙mesh手机连接 mesh 蓝牙_服务器模型

1、发送消息的行为称为发布,通常消息被发送到多播或虚拟地址。节点可以订阅特定地址接收发布的消息

2、在上面的图中,我们可以看到节点“1号开关”发布至多播地址“厨房”,而1号电灯、2号电灯和3号电灯节点均订阅了厨房的多播地址,因此可接收并处理发布到该地址的消息。换句话说,可以使用1号开关开启或关闭1号电灯、2号电灯和3号电灯,而2号开关发布到多播地址“餐厅”,此时只有3号电灯节点订阅了这一地址,因此它是2号开关控制的唯一一盏电灯。请注意,这一例子也说明了节点可以订阅一个以上不同地址的消息——既强大又灵活

3、使用发布/订阅模型的多播和虚拟地址具有实质性好处,因为无需重新配置其他节点就能在mesh网络中删除、替换节点、添加新节点。可以想象在餐厅安装额外的照明灯将涉及哪些问题,新加入的设备将经过启动配置添加到网络,并订阅餐厅地址。其他节点均不会受到网络改变的影响。2号开关将消息发布到餐厅,现在3号电灯和新添加的电灯都会对其作出响应

六.状态和属性

1、状态:状态是某个类型的值,包含在一个元素内,状态有相关行为。蓝牙mesh定义一个叫为Generic OnOff的状态。电灯将具有该状态,并且On的值引发亮灯,而Off的值将导致电灯关闭
2、属性:属性类似于状态,包含在一个元素内,但它们与状态的差异较大,属性没有相关行为。例如,想一下特性Temperature的8位的温度状态类型,其具有多个相关属性,包括当前室内环境温度和当前室外环境温度,传感器能够发布传感器读数到这两个属性。属性分为两类:制造商和管理员,制造商为只读属性,管理员为读写属性

七.消息、状态和属性

消息都有三种类型:GET、SET和STATUS。GET消息请求获得来自一个或多个节点的指定定状态值,而STATUS消息是对GET消息的响应,且其中包含相关的状态值。SET消息会改变给定状态的值,需要确认的SET消息,将会受到STATUS消息作为对SET消息的响应;而不需要确认的SET消息则无需响应。通过消息操作码可知道要操作的具体状态,使用16位属性ID能要指定操作的属性

八.状态的转换以及绑定状态

从一个状态到另一个状态的改变称为状态转换。状态之间可能存在关系,一种状态的变化会触发另一种状态发生变化,这种关系被称为状态绑定,并且一种状态可能与其他多种状态绑定。例如由调光开关控制的照明灯,照明的状态有:Generic OnOff和Generic Level,两者相互绑定,当调暗照明亮度,直到Generic Level状态值为零(完全变暗),就会导致Generic OnOff状态从On变为Off

九.模型

模型将上述概念集合在了一起,并定义了mesh网络相关元素的某些或全部功能,有三类模型已得到了认可:

1、服务器模型定义状态、状态转换、状态绑定、和模型的元素可能发送或接收的消息,它还定义了与消息、状态和状态转换有关的行为
2、客户端模型不定义任何状态。相反,它定义了可以发送或接收的消息,以便获取(GET)、设定(SET)或询问相应服务器模型中定义的状态(STATUS)
3、控制模型是一个服务器模型和一个客户端模型的集合。服务器模型可与其他客户端模型进行通信,客户端模型可与服务器模型进行通信
4、模型可以通过扩展其他模型来创建,不可扩展的模型称为根模型

十.通用定义

我们知道到许多不同类型的设备具有语义上等价的状态,例如ON与OFF这样简单的状态。想一下电灯、风扇和插座,所有这些都可以被开启或关闭,因此蓝牙mesh模型定义了一系列可重复利用的通用状态,如Generic OnOff和Generic Level,与此同时,还定义了一系列基于通用状态的通用消息,如Generic OnOff Get和Generic Level Set。通用状态和通用消息用于通用服务器模型,如Generic OnOff服务器,以及通用客户端模型,如Generic Level客户端。通用模型让设备能够支持蓝牙mesh,而无需创建新的模型。记住,模型可以通过扩展其他模型来创建,因此通用模型会为快速创建新型设备的模型打下基础

蓝牙mesh手机连接 mesh 蓝牙_智能手机_02

十一.场景

场景是状态集合,可以通过接收特定类型的消息、或在指定时间被调用,使其成为指定状态。场景通过16位场景编号来识别,该场景编号在mesh网络中是唯一的。想象一下,傍晚时分,您喜欢将家中温度设置为20摄氏度,6个LED射灯将处于一定的亮度水平,并且房间角落桌子上的灯光也设置为恰到好处的黄色调,在这个场景中,手动将各种节点设置为以上状态,并其存储为场景,之后可随时通过发送相关的mesh消息或者在计划的时间点自动启动设置的场景

十二.启动配置

启动配置是设备加入mesh网络并成为节点的过程,它会生成各种安全密钥,并且本身也是是一个安全的过程。可使用平板电脑等设备上的应用进行配置,用于配置设备入网的设备称为启动配置设备(Provisioner)。进行配置有以下几个步骤:

1、Beacon广播
为支持各种不同的蓝牙mesh功能,引入了全新的GAP广播类型<<mesh Beacon>>广播类型。未经配置的设备会通过使用广播<<mesh Beacon>>广播类型的封包来说明它的存在。用户可以以这种方式启动设备广播,例如同时按下几个按钮、或长按某个按钮

2、邀请
启动配置设备将以启动配置邀请PDU(Provisioning InvitePDU)向设备发送邀请。Beacon设备会作出响应,在Provisioning Capabilities PDU中响应自身的信息。

3、交换公共密钥
启动配置设备和要进行配置的设备可以直接或者通过带外(OOB)方式交换他们的公共密钥,这些密钥可以是静态或暂时的。

4、认证
在认证步骤期间,要进行启动配置的设备会通过一定的形式给用户输出一个随机的数字。例如,它可能会闪烁LED灯数次,用户将设备输出的数字输入到启动配置设备中,两台设备之间进行这一随机数的加密交换,以完成两个设备彼此之间的认证。

5、启动配置数据的分配
认证成功完成后,会通过两台设备的私有密钥和交换的对称公共密钥生成会话密钥。会话密钥随后用于保护完成配置过程所需数据的后续分发,包括称为网络密钥(Netkey)的安全密钥。启动配置设备配置完成后,会为配置的设备分配网络密钥Netkey,这是一项mesh安全性参数,也称为IV索引和单播地址,现在的设备被称为节点。

十三.节点的特性

节点有四种可选特性:中继、代理、好友和低功耗特性。节点可以支持这些可选特性中的零到多个,并且支持的特性都可在某一时间点被启用或禁用

1、中继节点
能够将接收到的消息进行转发。中继使消息可遍历整个mesh网络,消息通过中继在设备之间进行多次转发。mesh网络PDU包括一个称为TTL(生存期)的字段,它可限制消息将在网络中转发的次数。例如,将TTL设置为3,则消息从始发节点开始最多转发三次。将其设置为0,则无法进行中继,且仅能实现单次跳跃

2、低功耗节点和友好节点
某些类型的节点受供电的限制,且需要尽可能地节省功耗。此外,这类设备可能主要涉及消息的发送,只是需要偶尔接收消息。想想一个由纽扣电池供电的温度传感器,只有温度高于上限和或低于下限阈值时,它才会每分钟发送一次温度读数。此外,用户还能向传感器发送消息,其改变温度阀值,此时接收消息时间比例会对功耗有影响。100%的接收比例将确保传感器不会错过任何温度阀值设置消息,但功耗也会达到最高。低比例将节省功耗,但传感器就可能存在遗漏消息的概率。这时候就需要好友节点了,温度传感器属于低功耗节点(LPN),LPN与另一节点(其不受电源限制的节点)协同工作,另一个节点设备称为好友节点。好友节点能够存储发送到LPN的消息,并且每当LPN探询好友节点以求获得处理的消息时,它就会将其发送到LPN。LPN可能相对没那么频繁地探询好友节点,以便节省功耗。当它进行探询时,好友节点存储的所有消息将被一个接一个地转发到LPN,并且消息具有被称为MD(更多数据)的标志,向LPN指示好友节点处是否还会发送更多消息

3、代理节点

现在由大量的设备支持蓝牙低功耗,包括智能手机和平板电脑都在其中。蓝牙mesh刚出来时,市场上的蓝牙设备并不具备蓝牙mesh的功能,但他们确实有一个蓝牙低功耗协议栈,也能GATT通用属性配置文件进行通讯。代理节点暴露了一个GATT接口,蓝牙低功耗设备可使用该接口与mesh网络进行通讯。定义了代理协议之后,GATT设备在Proxy节点的GATT特征进行读写的PDU将会转换为mesh PDU。总而言之,代理节点让不具有蓝牙mesh协议栈的蓝牙低功耗设备能够与mesh网络中的节点进行交互