本文基本内容来自几位大牛的博客,顺便加上了个人见解,记录于此是怕时间一久忘记。
Mesh走的是Becon广播交互,本身不连接,通过互相扫描和广播来交互。
低功耗节点(LPN)是Mesh里面最基础的节点,类似于BLE设备;friend节点用来存储发往低功耗节点(LPN)的消息和安全更新,一般没有功耗限制;中继节点用来传递消息;代理节点处理gatt和mesh网络之间的消息。
元素
每个节点有一个或多个元素(必须有一个主元素),例如,一个Mesh灯节点,灯的开关(主元素),灯的颜色(其它元素1),灯的亮度(其它元素2)。节点中的每个元素都有一个唯一的地址,称为单播地址(unicast address),使每个元素都有址可寻,例如在Mesh底层代码里控制灯开关、颜色、亮度都是分配了不同地址来处理。
一个元素里最少拥有一个Model,一个Model里面可以有多个元素状态(元素和元素状态是两回事,例如灯的开关这个功能是元素,灯打开或者灯关闭是元素状态,而model就是这个定义了这个元素状态可以被改变还是只可以读)。
Model
model 有三种类型:control 、server 和client ,这里面control包含了server和client ,model相当于一个节点的功能;
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里面定义的状态。
比如,定义一个灯的开关状态,那么拥有这个状态(可以被开关)的叫做server model,去查询、接收或者设置这个状态的叫做client model,同时拥有这两个功能的叫做control model。一个节点可以有多个model,就相当于BLE里面的服务(profile)。
(原文地址:https://blog.csdn.net/JaLLs/article/details/88864967)
Sig Mesh
就是蓝牙技术联盟统一推出的Mesh公有协议(基于CSR),Sig Mesh有三种类型地址,唯一地址(元素使用的unicast address)、虚拟地址、组地址,所以一般是用唯一地址来判断是哪个设备。