简介
元素(element)——是mesh协议规定的一些通用的功能描述符,通过查看“元素”这个标号,就知道该节点可能具备什么功能!
模型(model)——就是“元素”的实体“对象”
例如,一个灯节点,本身有开关、亮度、色温的功能,而刚好0x0106这个标号的“元素”就是用来描述开关、亮度、色温等功能的!所以该灯节点的程序里面只要注册了0x0106这个标号的元素,别的节点设备通过查看该灯节点的“元素”标号,就可以知道该灯节点“可能”会有开关、亮度、色温等功能!
而该灯节点如果在程序里面以0x0106这个标号的元素来注册了“开关模型”实体,别的节点设备就可以通过对该灯节点的“开关模型”实体进行“读写”操作,从而来控制该灯节点的开关功能!
节点,元素,模型的关系
节点,元素,模型的关系如下图:
:::info
图示的节点有3个元素,每个元素都可以代表一组功能,其中功能可以相同,只是用3个元素来作为标记,区分开节点自身的3个“功能区“,例如,一个开关面板,里面有3个独立开关,这样就需要3给元素来描述!
而图示的元素里面,都有2组模型,就代表了这3个元素分别都有2组“功能实体”,例如,开关功能,亮度功能! :::
客户端模型,服务端模型的理解
服务端模型和客户端模型!
知道了节点的组成部分有元素和模型之后,还要知道模型有2种模式!其作用如下图所示:
3种模型类型
配置模型config_model
配置模型是一个强制应用的模型,是节点首元素里面的一个模型,专门用来配置节点的各种初始化,绑定等功能!
通用模型generic_model
例如onoff这种,sig mesh协议里规定了的通用型模型,各个厂家只的设备之间可以互相通用!
厂家模型vendor_model
就是自定义模型,用来补充通用模型的功能的,厂家可以通过这个模型,来建立属于自己的通信方式!例如,透传!
应用参考
了解了相关概念之后,就可以接着了解,如何应用!
【PHY6252-SDK-blemesh】config模型的应用(配置应用)
【PHY6252-SDK-blemesh】vendor模型的应用示例(透传+publish)
【PHY6252-SDK-blemesh】generic模型的应用示例(订阅、发布)
sdk代码参考
应用流程
- 定义功能+注册模块(客户端注册客户端的,服务端注册服务端的)
- 注册回调(用来处理接收响应)
- 填目标地址,密码appkey
-
API位置
MS_config_api.h
- MS_generic_onoff_api.h
- vendormodel_client.h
- vendormodel_server.h
客户端(元素和模型的注册):
```cpp retval = MS_access_create_node(&node_id); / Register Element / /**TBD: Define GATT Namespace Descriptions from
https://www.bluetooth.com/specifications/assigned-numbers/gatt-namespace-descriptors
Using 'main' (0x0106) as Location temporarily.
*/
element.loc = 0x0106;
retval = MS_access_register_element
(
node_id,
&element,
&element_handle
);
if (API_SUCCESS == retval)
{
/* Register Configuration model client */
retval = UI_register_config_model_client(element_handle);
}
if (API_SUCCESS == retval)
{
/* Register Generic OnOff model client */
retval = UI_register_generic_onoff_model_client(element_handle);
}
#ifdef USE_VENDORMODEL
if (API_SUCCESS == retval)
{
/* Register Vendor Defined model server */
retval = UI_register_vendor_defined_model_client(element_handle);
}
<a name="lAema"></a>
## 服务端(元素和模型的注册):
```cpp
etval = MS_access_create_node(&node_id);
/* Register Element */
/**
TBD: Define GATT Namespace Descriptions from
https://www.bluetooth.com/specifications/assigned-numbers/gatt-namespace-descriptors
Using 'main' (0x0106) as Location temporarily.
*/
element.loc = 0x0106;
retval = MS_access_register_element
(
node_id,
&element,
&element_handle
);
if (API_SUCCESS == retval)
{
/* Register foundation model servers */
retval = UI_register_foundation_model_servers(element_handle);
}
if (API_SUCCESS == retval)
{
/* Register Generic OnOff model server */
retval = UI_register_generic_onoff_model_server(element_handle);
}
#ifdef USE_HSL
if (API_SUCCESS == retval)
{
/* Register Light Lightness model server */
retval = UI_register_light_hsl_model_server(element_handle);
}
#endif
#ifdef USE_CTL
if (API_SUCCESS == retval)
{
/* Register Light Lightness model server */
retval = UI_register_light_ctl_model_server(element_handle);
}
#endif
#ifdef USE_SCENE
if (API_SUCCESS == retval)
{
/* Register Light Scene model server */
retval = UI_register_scene_model_server(element_handle);
}
#endif
#ifdef USE_VENDORMODEL
if (API_SUCCESS == retval)
{
/* Register Vendor Defined model server */
retval = UI_register_vendor_defined_model_server(element_handle);
}