简介

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

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

节点,元素,模型的关系

节点,元素,模型的关系如下图:
image.png :::info 图示的节点有3个元素,每个元素都可以代表一组功能,其中功能可以相同,只是用3个元素来作为标记,区分开节点自身的3个“功能区“,例如,一个开关面板,里面有3个独立开关,这样就需要3给元素来描述!

而图示的元素里面,都有2组模型,就代表了这3个元素分别都有2组“功能实体”,例如,开关功能,亮度功能! :::

客户端模型,服务端模型的理解

服务端模型和客户端模型!

知道了节点的组成部分有元素和模型之后,还要知道模型有2种模式!其作用如下图所示:
image.png

3种模型类型

模型除了模式之外,还有类型!即下面3种类型!

配置模型config_model

配置模型是一个强制应用的模型,是节点首元素里面的一个模型,专门用来配置节点的各种初始化,绑定等功能!

通用模型generic_model

例如onoff这种,sig mesh协议里规定了的通用型模型,各个厂家只的设备之间可以互相通用!

厂家模型vendor_model

就是自定义模型,用来补充通用模型的功能的,厂家可以通过这个模型,来建立属于自己的通信方式!例如,透传!
image.png

应用参考

了解了相关概念之后,就可以接着了解,如何应用!
【PHY6252-SDK-blemesh】config模型的应用(配置应用)
【PHY6252-SDK-blemesh】vendor模型的应用示例(透传+publish)
【PHY6252-SDK-blemesh】generic模型的应用示例(订阅、发布)

sdk代码参考

应用流程

  • 定义功能+注册模块(客户端注册客户端的,服务端注册服务端的)
    • 注册回调(用来处理接收响应)
  • 填目标地址,密码appkey
  • 调用api发送

    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 / /**
    1. TBD: Define GATT Namespace Descriptions from
    2. https://www.bluetooth.com/specifications/assigned-numbers/gatt-namespace-descriptors
  1. Using 'main' (0x0106) as Location temporarily.
  2. */
  3. element.loc = 0x0106;
  4. retval = MS_access_register_element
  5. (
  6. node_id,
  7. &element,
  8. &element_handle
  9. );
  10. if (API_SUCCESS == retval)
  11. {
  12. /* Register Configuration model client */
  13. retval = UI_register_config_model_client(element_handle);
  14. }
  15. if (API_SUCCESS == retval)
  16. {
  17. /* Register Generic OnOff model client */
  18. retval = UI_register_generic_onoff_model_client(element_handle);
  19. }
  20. #ifdef USE_VENDORMODEL
  21. if (API_SUCCESS == retval)
  22. {
  23. /* Register Vendor Defined model server */
  24. retval = UI_register_vendor_defined_model_client(element_handle);
  25. }
  1. <a name="lAema"></a>
  2. ## 服务端(元素和模型的注册):
  3. ```cpp
  4. etval = MS_access_create_node(&node_id);
  5. /* Register Element */
  6. /**
  7. TBD: Define GATT Namespace Descriptions from
  8. https://www.bluetooth.com/specifications/assigned-numbers/gatt-namespace-descriptors
  9. Using 'main' (0x0106) as Location temporarily.
  10. */
  11. element.loc = 0x0106;
  12. retval = MS_access_register_element
  13. (
  14. node_id,
  15. &element,
  16. &element_handle
  17. );
  18. if (API_SUCCESS == retval)
  19. {
  20. /* Register foundation model servers */
  21. retval = UI_register_foundation_model_servers(element_handle);
  22. }
  23. if (API_SUCCESS == retval)
  24. {
  25. /* Register Generic OnOff model server */
  26. retval = UI_register_generic_onoff_model_server(element_handle);
  27. }
  28. #ifdef USE_HSL
  29. if (API_SUCCESS == retval)
  30. {
  31. /* Register Light Lightness model server */
  32. retval = UI_register_light_hsl_model_server(element_handle);
  33. }
  34. #endif
  35. #ifdef USE_CTL
  36. if (API_SUCCESS == retval)
  37. {
  38. /* Register Light Lightness model server */
  39. retval = UI_register_light_ctl_model_server(element_handle);
  40. }
  41. #endif
  42. #ifdef USE_SCENE
  43. if (API_SUCCESS == retval)
  44. {
  45. /* Register Light Scene model server */
  46. retval = UI_register_scene_model_server(element_handle);
  47. }
  48. #endif
  49. #ifdef USE_VENDORMODEL
  50. if (API_SUCCESS == retval)
  51. {
  52. /* Register Vendor Defined model server */
  53. retval = UI_register_vendor_defined_model_server(element_handle);
  54. }