前言

在网上搜了很多教程,大多数都是一上来就介绍mesh协议有哪些网络层,有什么功能,什么特征等等一大堆概念,对于一个刚接触的人来说,简直就是一头雾水。。。有时候仅仅只需要一个安全便捷一点的无线连接方案,却不得不把整个mesh协议学个遍,虽说,学习多一项技术是好事,但对于一个需要推进项目进度的应用工程师来说,实在是不应该把时间浪费在重复造轮子上!

于是,我在这里先从应用需求的角度,来描述mesh到底是怎么回事,尽量先“用起来”,然后遇到问题或者感兴趣再去仔细的了解原理!(尽量减少mesh的术语,用一般人都能理解的术语来描述)顺便作为自己的记忆标签,当下次再用到mesh的时候,来这里看看,快速调动起之前所学到的东西。

PHY622X MESH 开发指南

入网概念

下面只记录最简化的概念,具体细节在详细的章节里介绍!

  1. 既然mesh是无线连接,那各个设备就需要连接到同一个网络中,就像家里的”wifi路由器“一样,各个连接同一个wifi路由器的设备,都在同一个网络,而mesh网络也需要一个“wifi路由器”去建立网络,以及为网络里其他设备分配地址!而这个”wifi路由器“在mesh网络里就叫”配网器( Provisioner)“!
  2. 既然有配网器,就有了网络,而那些需要入网,但还没入网的设备,在mesh网络里叫” 未配网设备(Unprovisioned Device)
  3. 未配网设备,加入网络的过程,在mesh网络里叫” 配网(Provisioning)
  4. 配网成功的设备,在mesh网络叫”节点(Node)

image.png
入网流程就是如图所示,由未配网设备发起“入网请求”,配网器收到“入网请求”后,就开始跟未配网设备进行“认证”和“数据交换”,最终未配网设备入网成功,成为节点!
其中,“认证”和“数据交换”是一个比较复杂的过程,为了快速的大概了解mesh,这里先略过~
【PHY6252-SDK-blemesh】协议的分层结构
【PHY6252-SDK-blemesh】配网过程
【PHY6252-SDK-blemesh】节点的特征(低功耗、朋友、中继、代理)

应用概念

既然设备入网成为节点了,那么节点之间就可以互相通信了,接下来就是看看怎么用起来,我们先从最简单的应用场景举例,去了解相关的概念。

应用场景:
节点A(开关)按下“打开/关闭”按键,节点B(灯)相应的进行“开灯/关灯”的操作。

问题分析:

1.怎么知道节点A/B是什么设备,有什么功能?

答:元素,模型

简单理解:
元素(element)——是mesh协议规定的一些通用的功能描述符,通过查看“元素”这个标号,就知道该节点可能具备什么功能!
模型(model)——就是“元素”的功能具体实现模块!

例如,一个灯节点,本身有开关、亮度、色温的功能,而0x0106这个标号的“元素”就是用来描述开关、亮度、色温等功能的!所以该灯节点的程序里面只要注册了0x0106这个标号的元素,别的节点设备通过查看该灯节点的“元素”标号,就可以知道该灯节点“可能”会有开关、亮度、色温等功能!
而该灯节点如果在程序里面以0x0106这个标号的元素来注册了“开关模型”实体,别的节点设备就可以通过对该灯节点的“开关模型”实体进行“读写”操作,从而来控制该灯节点的开关功能!
【PHY6252-SDK-blemesh】元素&模型

2.开关节点怎么才能把“打开/关闭”命令,发送到指定的灯节点上?

答:地址,单播,广播,订阅+发布

简单理解:
地址——这个很好理解,就是像名字一样,网络中每个节点都分配了一个特定的名字“地址”,这样就可以找到指定名字“地址”的节点,进行通信了。
单播——就是端对端的直接发送命令!直接通过寻址的方式,把命令发送到指定节点上。
广播——就是一对多的发送命令!没有指定的“地址”,所有节点都能接收该命令
订阅+发布——某个节点“订阅”了特定的“地址”后,就可以收到别的节点发布到该“地址”的命令

用订阅+发布的方式来举例,灯节点订阅了地址“0xcfff”,只要开关节点往“0xcfff”这个地址发布“打开/关闭”命令。灯节点就会收到开关节点的“打开/关闭”命令,从而实现“开灯/关灯”的操作!

详细介绍:
【PHY6252-SDK-blemesh】地址的简介

3.发送过程中,怎么确保命令信息的“安全”?

答:网络密钥,设备密钥,应用密钥

简单理解:
网络密钥(netkey)—— 节点入网后就会被分配到,用来防止其他网络的设备“串网”,可以是多个,代表一个节点可以在多个网络中。
设备密钥(devicekey)—— 也是在节点入网时被分配到的,专门给应用层的“配置模型”用的,只有1个,在节点“配置”时用的。
应用密钥(appkey)—— 给应用层其他各种“功能模型”用的,可以有多个密钥,用来区分一些特定的需求

用“应用密钥appkey”来举例,灯节点入网后,在网络中获取一个“应用密钥”,把“应用密钥”与自身的“开关模型”进行绑定(类似于“注册账号密码”),然后开关节点,通过发送附带相同“应用密钥”的“开/关”命令,来

注意:网络密钥netkey与应用密钥appkey,是整个网络共享的,节点想要读取某个key,只需通过搜索key的索引(index)即可获取到key的内容。

详细介绍:
【PHY6252-SDK-blemesh】各种安全密钥

4.两个新的节点入网后,怎么知道他们的功能怎么去绑定(即谁控制谁,谁又被谁控制)?

答:统一通过config功能模型,进行“初始化”。

简单理解:
config模型——就是在每个节点入网后,用来配置节点功能模型的“应用密钥”,以及“订阅/发布”地址等功能。

详细介绍:

特征-低功耗,朋友,中继,代理

【PHY6252-SDK-blemesh】config模型的应用(配置应用)
【PHY6252-SDK-blemesh】vendor模型的应用示例(透传+publish)
【PHY6252-SDK-blemesh】generic模型的应用示例(订阅、发布)