首页 > 编程知识 正文

什么是蓝牙mesh,蓝牙网关和蓝牙mesh

时间:2023-05-06 15:05:40 阅读:191975 作者:4080

常用概念/术语及解释 常用概念/术语及解释设备/节点启动配置消息地址发布、订阅元素模型状态中继节点代理节点Friend节点--LPN节点

常用概念/术语及解释 设备/节点

mesh网络中的设备称为节点,非mesh网络中的设备称为“未经启动配置的设备”

启动配置


启动配置是设备加入mesh网络并成为节点的过程。它涉及几个阶段,会生成各种安全密钥,并且本身是一个安全的过程。可以使用手机、平板、智能音箱等设备上的应用对未经启动配置的设备进行预置,此时手机、平板等这类用于驱动预置过程的设备被称为启动配置设备(Provisioner)。
预置过程通过五个步骤进行:

Beacon广播------ 未经预置的设备会通过使用广告封包中的《mesh Beacon 》 广播类型来进行广播,使得启动配置设备可以发现自己。对应到具体产品,可能是按下按钮组合、或按住某个按钮一段时间,产品便进入到这种广播状态邀请------ 启动配置设备收到Beacon广播后,会向未经配置的设备发送邀请PDU(Provisioning Invite PDU),设备在收到邀请后会回复一个Provisioning Capabilities PDU,包含设备自身的一些信息交换公共密钥------ 启动配置设备和未经配置的设备可以直接或者通过带外(OOB)方式交换他们的公共密钥,这些密钥可以是静态或暂时的认证------ 在认证步骤期间,未经配置的设备会通过一种符合其功能的动作,以某种形式向用户输出一个随机的单位或多位数字。例如,它可能会闪烁LED灯数次。用户将新设备输出的数字输入到启动配置设备中,两台设备之间进行这一随机数的加密交换,以完成两个设备彼此之间的认证。
阿里精灵中Mesh规范使用的是static OOB方式,所以没有上述的需要用户操作的部分,使用AuthValue值认证,AuthValue = SHA256(Product ID,MAC,Secret),将ProductID,MAC,Secret三元组通过字符串用英文逗号连接,然后进行SHA256摘要计算,取前16字节启动配置数据的分配------ 认证成功完成后,会通过两台设备的私有密钥和交换的对等公共密钥生成会话密钥。会话密钥随后用于保护完成预置过程所需数据的后续分发,包括网络密钥(NetKey)、应用密钥(AppKey)等。 消息

网络中的所有通信均以消息为中心。例如当某一节点需要查询其他节点状态,或需要以某种方式控制其他节点时,会发送合适类型的消息。每个消息都有自己的操作码(Opcode),来区分不同的消息。
消息按大类分,分为:①需要应答(在收到信息后需回复一条应答消息);②无应答。
按功能分:①get消息,获取节点的状态值,比如灯的亮灭;②status消息,status消息作为get消息的响应,包含对应的状态值;③set消息,用于设置节点的状态值,比如打开灯,如果需要应答,则回复一个status消息。

地址

消息的发送必须从一个地址到另外一个地址。蓝牙Mesh协议定义了三种地址类型:①单播地址;②群组地址;③虚拟地址

单播地址:用于识别元素,一个元素一个单播地址,单播地址在配置过程中分配给设备群组地址:表示一个或多个元素的多播地址,比如所有的灯可以设置一个群组地址。SIG目前已经定义了4组固定的群组地址,分别为:All-proxy、 All-friends、 All-relay和Allnodes虚拟地址:可以分配给跨越一个或多个节点的一个或多个元素的地址。它采用128位UUID值的形
式,任何元素都可以与之相关联,基本上相当于一个标签 发布、订阅

发布发送消息的行为
订阅*有选择的接收发送到特定地址的消息
通常,消息被发送到群组或虚拟地址。如下图所示,开关1将消息发送到“厨房”这个群组地址,灯1、2、3订阅了“厨房”地址,所以可以使用1号开关开启或关闭1号电灯、 2号电灯和3号电灯。3号电灯同时还定订阅了2号开关,说明节点可以订阅一个以上不同地址的消息,丰富了使用场景。

使用发布/订阅通信模型的群组和虚拟地址,不需重新配置其他节点就能在网络中删除、替换节点,或添加新节点。例如在餐厅中添加一个灯,只需要订阅“餐厅”这个群组地址就可以了,不需要修该其他的节点,方便实用。

元素

一些节点可能具有多个组成部分,并且每个都能独立进行控制,那么每个部分称为一个元素。例如一个设备上有三个灯,如果这三个灯需要分开控制,那么三个灯就组成三个元素。
每个节点必须有一个元素,该元素被称为主要元素(主要包括一些无需用户修改的设备信息,用户也可以添加应用层的模型到主元素),其他元素称为次要元素。在配网时单播地址会分配给主要元素,次要元素依据主要元素的单播地址依次加1作为自己的地址

模型

模型可以抽象的认为是定义功能,比如灯的开关模型、亮度调节模型、颜色调节模型。
模型分为客户端模型、服务器模型、控制模型
客户端模型:不定义任何状态。相反,它定义了自身可以发送或接收的消息,以便获取(get)、设置(set)或询问相应服务器模型中定义的状态(status)
服务器模型:定义状态、状态转换、状态绑定和包含这一模型的元素可能发送或接收的消息集合。比如灯的开和关状态,开关状态转换,接收客户端模型发来的get/set状态和询问状态的消息
控制模型包含一个服务器模型和一个客户端模型。服务器模型可与其他客户端模型进行通信,客户端模型可与服务器模型进行通信。

如上图所示,拥有onoff客户端模型的简单作为开关控制拥有onoff服务器模型的电灯。nordic的mesh SDK中demo模型(model)的实现就明确的分为服务器模型和客户端模型,并且代码非常规范,适合阅读理解协议

状态

状态是某个类型的值,包含在一个元素内,比如灯的开关、灯的亮度值等。蓝牙mesh定义了一个名为Generic OnOff的状态,On的对应亮灯或者打开灯,Off表示灯灭或者关闭灯

如下图所示节点、元素、模型、状态间的关系:

中继节点

支持中继功能的节点称为中继节点,能够重新传送接收到的消息。中继是消息可遍历整个mesh网络的重要机制,通过中继在设备之间进行多次“跳跃”。mesh网络PDU包括一个称为TTL(生存期) 的字段。它需要一个整数值,可限制消息将在网络中跳跃的次数。例如,将TTL设置为3,则消息可被中继,从始发节点开始最多跳三次。将其设置为0,则无法进行中继,且仅能实现单次跳跃。

代理节点

代理节点为不支持蓝牙mesh的设备提供了加入mesh网络的可能,能够与mesh网络中的节点进行交互。
代理节点暴露了一个GATT接口,ble设备可使用该接口与mesh网络进行交互。定义了代理协议(意在用作面向连接的承载,一个GATT sever)之后, GATT设备在Proxy节点实施的GATT特征范围内读写代理协议PDU。代理节点将这些PDU转换为mesh PDU。简单说,代理节点与不支持mesh的设备通过ble连接,将接受到的数据转换成mesh支持的PDU并广播到mesh网络中

Friend节点–LPN节点

有些设备对功耗特别敏感,比如使用纽扣电池供电的温度传感器。为了使这类设备降低功耗,延长使用时间,Mesh协议定义了一种低功耗特性,可以满足这类设备的需求。可以指定对应节点设置成为低功耗节点。比如带有温度传感器的设备,直接烧录打开LPN特性的程序便可以了。Nordic是设置对应的宏开关LPN,Telink是独立的LPN工程
低功耗节点(LPN)与好友节点(friend节点)建立友谊关系(friendship)。friend节点能够存储其他节点发送到LPN的消息,并且每当LPN探询(poll)“friend节点以求“等待处理的消息”时,就会将其发送到LPN。 LPN并不会频繁地探询“好友”,以便节省电量、以及及时接收和处理配置消息。当LPN节点进行探询时,friend节点存储的所有消息将被一个接一个地转发给LPN,并且在消息包中有一个被称为MD(更多数据)的标志,向LPN指示friend节点是否还会发来更多消息。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。