蓝牙mesh基本概念讲解(3)

模型(Models)

模型(Model)定义了一个节点的基本功能。一个节点当然可以包含多个Model。一个Model定义了节点所需要的所有的状态。消息会给基于这些状态进行操作,当然也会有相应的行为随之产生。

Mesh的应用定义的是使用“发布-订阅(publish-subscribe)”的典型的“服务器-客户端(client-server)”的架构。在Mesh里面,并没有沿用传统的端到端的“Profile”的概念,而是定义了三种不同的模式, Client, Server 和Control。

Server model: 定义了状态states, 状态转换 state transitions, 状态绑定state bindings 和包含了哪些消息,当然也同样定义了与这些消息,状态,状态转换相关的行为Behaviors。

Control model:具备client model的功能与其他的server model进行交互,同时也可以有server model功能与其他client model进行交互。内置了逻辑控制层(一套规则和行为在各个与之连接的模型中进行协调交互)。

Client model: 没有定义任何的状态States,但是它定义了要收发哪些消息。定义这些消息是为了GET,SET或者获取在Server models里面定义的状态。

下图展示的是Device C(server model)带有状态,支持R S T X Y Z消息,Device A(client model)支持 X Y Z消息,Device B(client model)支持 R S T Z消息。

蓝牙mesh基本概念讲解(3)_第1张图片

 

下图中 Device C(control model)可以作为client model与server model(device A与device B)进行通讯(分别支持X Y Z 和R S T消息),也可以作为server model与client model(device D)进行通讯(支持 A B C消息)。

蓝牙mesh基本概念讲解(3)_第2张图片

 通用(Generics)

为了满足不同的需求,Mesh中定义了多种不同的models,实际上SIG确实有一个Model specification。现在是1.0的版本,只定义了几个Model group:Generics,Sensors,Time and Scenes和Lighting 。你仔细看一下这几个名字就会发现,其实Generic这个model就是把很多不同应用的相似的部分例如ON/OFF,Level一些状态和行为放在了一个叫做 通用 的model里面。如果你的产品没有办法找到对应的model,就可以先用 generic 这个model先用。

配网(Provisioning)

配网的全过程包括大概5个步骤,分别是

Step 1. Beaconing;

Step 2. Invitation;

Step 3. Exchanging Public Keys;

Step 4. Authentication;

Step 5. Distribution of the Provisioning Data

其实也很简单,第一步,告诉你我要配网,这里使用的是新定义的AD广播包类型, Mesh AD。第二部, 配网者Provisioner听到了这个Beacon以后,就发一个邀请,这个邀请就是配网邀请PDU(Protocol Data Unit)。要入网的设备收到邀请以后,会把自己的一些配网的能力(Provisioning capabilities)发回来。接下来,既然郎有情妾有意, 就公开交换信物-公钥呗。接下来就会有一个互动随机数的认证流程,这点和原来蓝牙输入0000  的密码很像, 但是会简单一点点。 最后一步,认证完成,从公钥和两个设备的私钥派生出Session Key。后面的配网的信息交互的过程会用这个Session key来加密。配网成功以后,就会根据最后一步里面包含交换的NetKey来加密后面的数据交换。跟加密相关的一些参数例如IV index, 和单播地址,会存在配网者那里。

 

节点特性(node features)

mesh里面还给每个节点有一些额外的四种可选的特性(Features)。分别是中继Relay,代理Proxy,朋友Friend低功耗Low Power features。节点可以在某个时间点选择不支持或者支持多个Feature。

中继(Relay)支持中继的节点,可以帮忙转发收到的消息。因为有了Relay,Mesh网络就可以实现多跳(Hops)。

低功耗和朋友(Low Power Nodes and Friend Nodes), 这是搭配来用的。我们先说Low power节点,类似于对功耗有要求的设备,例如温度传感器。这种类型的设备为了节约功耗,很大的时间都是在休眠的。也就是意味着他们收不到网络中发过来的消息。Friend节点能帮LP节点暂存消息。当LP节点需要的时候,可以发消息给Friend节点, 问问有没有“waiting message”。如果有,就会一条条的发给LP节点。简而言之,Friend节点就像是门卫的张大爷,你(Low power node)想起来的时候去门卫拿你要的信就好了。这种方式和zigbee里面的enddevice向父节点拿数据的方式类似。

下面简单的拓扑结构基本上说明了这两种Feature和其他一般Node的关系和消息路径。显而易见,如果有消息要发从T发给L,S会帮忙转发,O会帮忙L存起来。L要消息的时候,O再把T的消息发给L。

蓝牙mesh基本概念讲解(3)_第3张图片

图 :  mesh 网络中的拓扑结构

 

 

代理(Proxy)的feature又是什么呢?这就是Mesh想到的兼容现有的非Mesh设备的方法。在Proxy节点, 其实是可以通过BLE的GATT来交流的。(这是现在非Mesh BLE设备最常用的数据交流方式)。

蓝牙mesh基本概念讲解(3)_第4张图片

图: 有mesh功能与无mesh功能之间的通讯方式

 

每个节点当然还有一系列配套的配置集,在Configuration Server Model和Configuration Client Model里的States都有实现。比如,上面说到的不同的Feature,都是在Configuration Server states说明的。在蓝牙Mesh也一样定义了配置消息(configuration messages)集。

你可能感兴趣的:(蓝牙mesh介绍)