BLE Mesh蓝牙组网技术详细解析之Model Layer模型层(八)

目录

一、什么是BLE Mesh Model Layer模型层?

二、SIG Model

2.1 模型概念

2.2 消息格式 

2.3 开关模型

四、资料获取


一、什么是BLE Mesh Model Layer模型层?

Models Layer的作用是定义了一些通用的或特定的模型,用于实现网络节点设备的基本功能和控制行为。每个模型都包含了一些状态、消息和规程,用于描述设备的属性、功能和行为。模型可以分为基础模型和SIG模型两类。基础模型负责实现与Mesh网络配置和管理相关的功能,如Configuration Server/Client model和Health Server/Client model。SIG模型负责实现与Mesh网络应用相关的功能,如Generic OnOff Server/Client model、Sensor Server/Client model和Lighting Server/Client model等。 

二、SIG Model

2.1 模型概念

Model Layer中的SIG model是一些标准的模型,用于实现典型的用户场景功能,如开关、传感器、灯光等。SIG model的实现主要包括以下几个方面:

  • 定义一组相关的状态,用于表示模型的当前属性或目标属性
  • 定义一组消息,用于查询或更改状态的值,或者通知状态的变化
  • 定义一组行为,用于响应消息的请求,或者执行状态的转换
  • 定义一组绑定关系,用于描述不同状态之间的联动效果
  • 定义一个唯一的模型识别码,用于区分不同的模型

下图展示了设备的一种元素模型结构,该设备具体实现了一个服务器模型(标记为设备C),具备相应的状态,并支持以下消息:R、S、T、X、Y、Z。同时,该设备还包含两个实现客户端模型的设备,其中设备a主要支持消息X、Y和Z,而设备B则主要支持消息R、S、T和Z。

2.2 消息格式 

Model Layer的消息格式是由Access Layer定义的,主要包括两个部分:Opcode和Parameters。Opcode是一个1到3字节的字段,用于标识消息的类型和用途。Parameters是一个可选的字段,用于携带消息的具体内容,比如状态的值,目标的地址,操作的码等。不同的模型定义了不同的Opcode和Parameters,以实现各自的功能和状态。例如,Generic OnOff Server模型定义了以下三种消息:

  • Generic OnOff Get:用于查询开关状态,Opcode为0x8201,无Parameters。
  • Generic OnOff Set:用于设置开关状态,Opcode为0x8202,Parameters为OnOff(1字节),TID(1字节),Optional Fields(5字节)。
  • Generic OnOff Status:用于响应开关状态,Opcode为0x8203,Parameters为Present OnOff(1字节),Optional Fields(3字节)。

2.3 开关模型

Model Layer开关模型消息通信的过程是这样的:

  • 开关模型包括Generic OnOff Server模型和Generic OnOff Client模型,它们分别定义了一个布尔类型的状态Generic OnOff State,以及三种消息Generic OnOff Get,Generic OnOff Set,Generic OnOff Status。
  • Generic OnOff Client模型可以向Generic OnOff Server模型发送Generic OnOff Get消息,用于查询开关状态,也可以发送Generic OnOff Set消息,用于设置开关状态。
  • Generic OnOff Server模型可以向Generic OnOff Client模型发送Generic OnOff Status消息,用于响应开关状态,也可以向订阅了该模型的其他节点发送Generic OnOff Status消息,用于通知开关状态的变化。
  • Generic OnOff Set消息有两种类型:Acknowledged和Unacknowledged,前者要求服务器回复一个Generic OnOff Status消息,后者不要求回复。
  • Generic OnOff Status消息包含一个字节的Present OnOff值,表示当前的开关状态,以及可选的三个字节的Target OnOff值,Transition Time值和Remaining Time值,表示目标的开关状态,状态转换的时间和剩余的时间。
  • Generic OnOff Server模型和Generic OnOff Client模型之间的消息通信是通过Access Layer承载的,Access Layer负责对消息进行格式化,加密,解密,认证和验证。
  • Access Layer的消息是通过Upper Transport Layer和Lower Transport Layer传输的,Upper Transport Layer负责对消息进行加密,解密和认证,Lower Transport Layer负责对消息进行分段和重组。
  • Lower Transport Layer的消息是通过Network Layer传输的,Network Layer负责对消息进行加密,解密,混淆,反混淆,中继和代理。
  • Network Layer的消息是通过Bearer Layer传输的,Bearer Layer负责对消息进行封装,解封,广播和接收。
  • Bearer Layer可以有两种类型:Advertising Bearer和GATT Bearer,前者基于BLE的广播机制,后者基于BLE的连接机制。

/*源自开源协议栈NimBLE*/
static int gen_onoff_status(struct bt_mesh_model *model,struct bt_mesh_msg_ctx *ctx)
{int err;struct bt_mesh_gen_onoff_srv *cb = model->user_data;struct os_mbuf *msg = NET_BUF_SIMPLE(3);uint8_t *state;bt_mesh_model_msg_init(msg, OP_GEN_ONOFF_STATUS);state = net_buf_simple_add(msg, 1);if (cb && cb->get) {cb->get(model, state);}BT_DBG("state: %d", *state);err = bt_mesh_model_send(model, ctx, msg, NULL, NULL);if (err) {BT_ERR("Send status failed");}os_mbuf_free_chain(msg);return err;
}static int gen_onoff_get(struct bt_mesh_model *model,struct bt_mesh_msg_ctx *ctx,struct os_mbuf *buf)
{BT_DBG("");return gen_onoff_status(model, ctx);
}static int gen_onoff_set_unack(struct bt_mesh_model *model,struct bt_mesh_msg_ctx *ctx,struct os_mbuf *buf)
{struct bt_mesh_gen_onoff_srv *cb = model->user_data;uint8_t state;state = buf->om_data[0];BT_DBG("state: %d", state);if (cb && cb->set) {return cb->set(model, state);}return 0;
}static int gen_onoff_set(struct bt_mesh_model *model,struct bt_mesh_msg_ctx *ctx,struct os_mbuf *buf)
{BT_DBG("");gen_onoff_set_unack(model, ctx, buf);return gen_onoff_status(model, ctx);
}static int gen_level_status(struct bt_mesh_model *model,struct bt_mesh_msg_ctx *ctx)
{int err;struct bt_mesh_gen_level_srv *cb = model->user_data;struct os_mbuf *msg = NET_BUF_SIMPLE(4);int16_t *level;bt_mesh_model_msg_init(msg, OP_GEN_LEVEL_STATUS);level = net_buf_simple_add(msg, 2);if (cb && cb->get) {cb->get(model, level);}BT_DBG("level: %d", *level);err = bt_mesh_model_send(model, ctx, msg, NULL, NULL);if (err) {BT_ERR("Send status failed");}os_mbuf_free_chain(msg);return err;
}

四、资料获取

通过点击以下链接,您可以获取BLE Mesh模块原理图、源代码以及开发资料。链接地址将为您提供详细的文件资料,以供您进行参考和使用。

如果您在使用过程中遇到任何问题或疑虑,欢迎加我QQ ,一起探讨技术问题,我的QQ号是986571840,加的时候请注明CSDN。

BLE Mesh蓝牙组网模块 - 硬创社 (jlc.com)icon-default.png?t=N7T8https://x.jlc.com/platform/detail/001d23cba7b64b0d9df5b9b69720fadb

感谢各位用户点赞、分享、在看,这些行为让知识得以更加广泛地传播,从而让更多人受益。

请在转载作品时注明出处,严禁抄袭行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/602117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Beauty algorithm(四)眼影

一、skills 前瞻 略 二、目标区域定位 1、 眼影区域 1、眼部关键点 左侧:36,37,38,39,40,41 右侧:42,43,44,45,46,47 2、计算roi区域的w,h,center 目的调整mask的比列。 FaceRegion left_es, right_es; left_es.w = landmarks.at(39).x - landmarks.at(36).x; left_es.…

书生·浦语大模型实战营第一次课堂笔记

书生浦语大模型全链路开源体系。大模型是发展通用人工智能的重要途径,是人工通用人工智能的一个重要途径。书生浦语大模型覆盖轻量级、重量级、重量级的三种不同大小模型,可用于智能客服、个人助手等领域。还介绍了书生浦语大模型的性能在多个数据集上全面超过了相似量级或相近…

并发(3)

目录 11.Synchronized本质上是通过什么保证线程安全的? 12.Synchronized使得同时只有一个线程可以执行,性能比较差,有什么提升的方法? 13.Synchronized由什么样的缺陷?Java Lock是怎么弥补这些缺陷的? 1…

《微信小程序开发从入门到实战》学习七十三

6.7数据缓存API 6.7.2 获取数据API 使用wx.getStorageSync和wx.getStorage接口可从本地缓存读取指定key中的数据。使用方式如下: // 异步接口,可以使用三回调函数 wx.getStorage({ key: key, success(res) { console.log(res.data) // 读取的数据保存到…

牛客网编程题——“求IBSN码”

这是我今天在牛客网上面刷题看到的一道相对而言比较有价值的题,个人非常的喜欢昂(因为我没有做起...),先看题目: 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符&…

看了致远OA的表单设计后的思考

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/n…

通信原理期末复习——计算大题(一)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…

Linux操作系统基础(13):文件管理-文件目录命令

1. 文件操作 1.1. 创建文件和目录 touch命令用于创建新的空文件或更新现有文件的时间戳。 #1.创建一个test.txt文件 touch test.txt#2.创建多个文件(test1.txt、test2.txt、test3.txt) touch test{1..3}.txtmkdir命令用于创建一个新的目录&#xff08…

最小覆盖子串【子串】【滑动窗口】【哈希】

Problem: 76. 最小覆盖子串 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 窗口左右边界为i和j,初始值都为0,j一直往右搜索,然后记录一下窗口内的字符是否达到了全部覆盖,如果达到了,那么就开始i往右搜…

交换机04_远程连接

通过远程管理方式连接交换机 1、telnet简介 telnet 是应用层协议 基于传输层TCP协议的,默认端口:23 采用的是明文密码方式 不是很安全,一般用于内网管理。 2、ssh协议简介 ssh 是应用层的协议,基于传输层的TCP协议&#x…

打造清晰的日志管理策略:如何在 NestJS 中集成 winston 高级日志系统

前言 在Web应用程序的开发过程中,日志管理是不可或缺的一部分。日志可以帮助我们了解应用程序的运行状态,监控系统行为,以及在出现问题时快速定位和解决问题。 对于使用NestJS框架的项目来说,集成一个高效、可扩展的日志系统尤为…

面试官:说说接口和抽象类有什么区别

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

高密集型数据服务--第2章 数据模型与查询语言

一、引言 数据模型可能是开发软件最重要的部分,而且还对如何思考待解决的问题都有深远的影响。 大多数应用程序是通过一层一层叠加数据模型来构建的。每一层都面临的关键问题是:如何将其用下一层来表示? 1.作为一名应用程序开发人员,观测现实…

Python中的cls语法

在Python中,cls 是一个用于指代类本身的约定性名称,通常用作类方法(class method)中的第一个参数。cls 类似于 self,它是对类的引用,而不是对实例的引用。cls 通常在类方法中用于访问类级别的属性和方法。举…

kafka处理大量消息积压tips —— 筑梦之路

一、consumer导致kafka积压了大量消息 场景: 1. 如果是Kafka消费能力不足,则可以考虑增加 topic 的 partition 的个数, 同时提升消费者组的消费者数量,消费数 分区数 (二者缺一不可) 2. 若是下游数据处理…

cookie和session的区别

cookie和session主要有以下区别: 1. 存放的位置: cookie: 浏览器端 session: 服务器端 2. 安全性: cookie是以明文的方式存放在客户端的,安全性相对较低 session存放于服务器中,所以安全性相对较好 3. 网络传输量…

LeetCode 28 找出字符串中第一个匹配项的下标

题目描述 找出字符串中第一个匹配项的下标 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1&…

LLM Agent之数据分析领域的应用

数据分析:Data-Copilot paper: Data-Copilot: Bridging Billions of Data and Humans with Autonomous Workflow github: https://github.com/zwq2018/Data-Copilot 先介绍下浙大提出的已扩展的数据分析框架,支持多种金融数据类型的查询,数…

Vue3-40-路由- 动态路由

说明 本文主要介绍了 对路由的动态配置,主要包括以下几个部分:1、判断某个路由是否存在;2、查看路由对象中的所有路由配置;3、添加一个路由;4、删除一个路由。针对上述四个方面,vue-router 中提供了对应的…

论文笔记 Understanding Electricity-Theft Behavior via Multi-Source Data

WWW 2020 oral 1 INTRO 1.1 背景 1.1.1 窃电 窃电(electricity theft)指用户为了逃避电费而进行非法操作的一种行为 常用的反窃电方法可分为两类: 基于硬件驱动的反窃电方法 ​​​​​​​电表开盖检测、集中器检测。。。。 硬件驱动的…