蓝牙Mesh学习总结三(Mesh术语解释)

1.设备(Device)

        未配网的支持蓝牙Mesh的设备,比如一个刚买回来的灯。也称为“未配网的设备”(unprovisioned devices)。

2.节点(Nodes)

        已经完成配网,成为蓝牙mesh中的一部分的设备,成为节点。

3.元素(element)

        在设备中可以根据寻址访问到的实体。比如现在有一个插排有三个插孔,这个插排就是一个节点(Node)。如果想到单独控制这个插排的插孔,就需要有三个元素,每个元素对应一个插孔。这样在控制的时候就可以根据元素来进行寻址控制。

4.消息(messages)

        如果一个节点需要获取或者控制别的节点,或一个节点想要上报状态时,就需要发送对应类型的消息。在蓝牙Mesh里定义了很多种类型的消息,每种消息都有对应的操作码(opcode)。而根据是否需要应答,消息也分为“需要应答(ack)”和“不需要应答(unack)”。需要应答的消息被目标节点接收到后,需要回复“我收到啦”,告诉发送方信息已经被接收到。如果发送方没有收到应答,则发送方会进行重发。而不需要应答的消息,发出去后就不再管了。

5.地址(address)

        地址就跟家里的门牌号是一样的。蓝牙mesh里边定义了四种类型的地址,未分配地址(unassigned address)、单播地址(unicast address)、组播地址(group address)和虚拟地址(virtual address)。而具体的地址分配范围,可以查看第一篇文章。蓝牙Mesh学习总结一(蓝牙Mesh介绍)_qq_34981的博客-CSDN博客

        未分配的地址就是还没有进入mesh网络的设备地址。该地址不能用于网络数据的传输

        单播地址是唯一性的地址,可以根据改地址识别到具体的元素。这个地址是在配网的时候分配给设备的。一个mesh网络中可以有32767个单播地址。比如上文说到的一个三孔插排,那每一个插孔,就有一个单播地址。

        组播地址是一个包含一个或多个元素的广播地址。组播地址可以有蓝牙SIG来定义(SIG Fixed Group Address),也可以动态分配。目前SIG定义了4个组播地址(All-provies 0xFFFC、All-friends 0xFFFD、All-relays 0xFFFE、All-nodes 0xFFFF)。比如现在一个房间里边有多个灯,如果想要同时控制这个房间里的所有灯的同时亮灭,就需要把这个房间里的灯都分配到一个组里边,根据组播地址来进行控制。组播地址一般被用于元素模型的订阅(Subscribe)和发布(Publish)地址。

        虚拟地址一般用法与组播地址类似,虚拟地址是通过Label UUID生成,由0x8000开始到0xBFFF结束,Label有16字节构成,其地址空间无限大,可以弥补组播地址的空间约束性。也可以认为虚拟地址是组播地址的一个扩展。虚拟地址可以使用128位的标签label UUID逻辑上来表示,因为UUID太长,所以使用哈希值来表示这些UUID。一共有16384个哈希值,每个哈希值代表一串虚拟地址。虚拟地址不用集中管理,增加了随意性。

6.发布和订阅(publish / subscribe)

        在蓝牙Mesh里面发消息的动作叫做发布(publish)。节点发布消息到单播地址、组播地址或者虚拟地址。节点有兴趣接受这些数据的可以订阅这些地址。

        比如上图,开关1发布消息给组播地址“kitchen”,灯1灯2灯3都注册到了"kitchen"这个地址,因此他们都能收到kitchen的消息,就是开关1可以控制灯123。灯3还另外注册到了“Dining room”地址,开关2发布消息到“Dining room”,所以,开关2可以控制灯3。这样做的好出是当需要一些节点添加、删除或者替换的时候,其他节点不用重新配置。比如新买了一个开关,把它配网以后发布到“Kitchen”,那么灯123同样可以被新的开关所控制。

7. 状态(states)

          指一个元素(element)下的状态,比如上文中的例子,一个三孔插座,每个插孔就是一个元素(element),而每个插孔的开关,就是一个状态(state)。状态是一个特定类型的值,也对应着相关的动作。比如收到ON的状态,则执行打开动作。

        消息与状态之前有一些联系,比如消息有SET、GET和STATUS类型GET就是获取一个或多个节点的特定状态。当节点收到GET消息后,就发送包含对应状态的STATUS消息。SET消息分为有应答和无应答两种。如果节点收到有应答的SET消息,执行SET的状态后,回复STATUS消息。如果收到无应答的SET,则只执行SET的状态,不回复消息。而STATUS消息除了通过SET和GET获取之外,设备还可以主动上报。比如一个温度传感器,就每隔一段时间自动上报一条STATUS消息。

        不同的状态之间可能会有一些关系,比如说一个状态的变化会造成另外状态的触发,这种关系叫做状态绑定。状态的绑定可以是跨model的,也可以是跨元素的。比如灯光亮度状态和开关状态,当把亮度状态改为0,也就触发了开关的“关”状态。

8 属性(priperties)

        mesh中元素的属性与BLE中properties的属性大致相同,不同的是mesh中的属性可以让接收者识别出对应的是哪个元素。

        绝大部分的mesh消息都是对状态进行操作,只有特别的和属性相关的消息,才会对属性进行操作,而且需要制定16位的属性ID。

9 模式(models)

        model定义了一个节点的基本功能。一个节点可以包含多个model。model包含节点所需要的的所有状态。消息会对这些状态进行操作,从而产生相应的行为

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

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

        而Client model没有定义任何的状态status,但是定义了要收发哪些消息。这些消息是为了GET、SET或者获取在Server models里面定义的状态。比如一个灯元素,Server model中定义和存放灯的状态ON/OFF。而开关定义一个对应的Client model来进行控制。

        有一些设备需要执行比较多的操作,比如一个灯光控制器,它可以根据采集外部的光亮变化来控制某些灯的开关。这种情况下,就需要既获取一些元素的状态,同时也需要控制别的元素。这种model在mesh网络中被称为control model(其实就是一个server和client模式的结合)。如下图

 10 配网(Provisioning)

        配网的全过程包括大概5个步骤:1.Beaconing.2 Invitation.3 Exchanging public Keys.4.Authentication.5.Distribution of the Provisioning Data。

        第一步,通过广播包,通知配网者(provisioner)自己需要进行配网。第二步,配网者(provisioner)听到这个Beacon以后,发送一个配网邀请PDU(Protocol Data Unit).需要配网的设备收到邀请后会发送自己的一些配网能力(Provisioning capablities)。第三步,公开交互公钥。第四部,互动随机数的认证。认证完成后,从公钥和设备的私钥中派生出session key。后续的配网信息交互过程就通过session key加密。第五步,分发配网信息。分配给节点地址和Netkey等信息。

11 生命周期TTL(time to live)     

        Mesh的网络层发送的数据包中,有一个字段TTL,占用7bit。数值从0-127。

        0:尚未转发,也不会转发

        1:可能已经被转发,但不会被转发

        2-126:可能已经被转发,可以被转发

        127:还没有被转发,可以被转发

        当TTL的值大于1时,每次中继转发后该值会减一,其中一个中继收到的TTL是1的时候就不会再转发。所以最多被转发126次。而TTL值为0,即用在LPN和friend节点之间,不会被中继。

12 Unprovisioned Device Beacon(UDB)

       UDB是未配网的device发出的,可以被provisioner发现。包含device UUID、OOB信息(配网过程中使用)

13 Secure Network Beacon(SNB)

        SNB是由已配网的Node发出,用来表明当前的security state。

        当网络中的任意设备接收到SNB时,需要监听IV index updates和Key Refresh procedures。网络中的SNB interval推荐为10秒左右。         

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值