当前位置: 首页 > news >正文

Neuron协议网关的北向应用插件开发

目录

概述

指令处理层开发​

应用层开发​

.open​

.close​

.init​

.uninit​

.start​

.stop​

 .setting​

 .request​

插件设置文件​

 适配华为的思路


概述

最近研究了一段时间的Neuron协议网关,前面的博文也提到它虽然能够把数据发到华为的IoT平台上,但是不支持华为的物模型,都是以自己的数据形式发送的。如果想支持华为的模型,就必须开发北向应用插件。今天就学习一下相关的开发。

北向应用开发主要包含以下几个部分,最底层的是指令处理层开发,最外层的是应用层开发。

模块文件说明
指令处理层开发command.c command.h common.h heartbeat.c heartbeat.h read_write.c read_write.h插件对指令的解析
应用层开发mqtt_plugin.c mqtt_plugin.h mqtt_util.c mqtt_util.h插件主题框架的实现
插件设置文件mqtt.json插件设置文件的定义

Neuron提供了3个MQTT插件(早期版本是1个,没有AWS和Azure),这三个插件的MQTT部分是相同的。 可以学习一下其MQTT插件的源码。

指令处理层开发​

MQTT 目前实现了上传数据、心跳数据、读 Tags 和写 Tags 的接口。command.c 中定义了 mqtt 请求对应响应的具体处理, heartbeat.c 和 read_write.c 为 command.c 提供需要的函数实现。

函数说明
command_response_handlemqtt 响应处理
command_read_once_response读主题的响应处理
command_read_periodic_response上传主题的响应处理
command_write_response写主题的响应处理
command_heartbeat_response心跳数据的响应处理

应用层开发​

mqtt_util.c 和 mqtt_util.h 文件定义 mqtt_plugin.c 文件中使用的具体函数实现。

南北向驱动层开发中都需要先构建 neu_plugin_intf_funs_t 的结构体,并实现结构体中的每个元素的功能。

c

static const neu_plugin_intf_funs_t plugin_intf_funs = {.open    = mqtt_plugin_open,.close   = mqtt_plugin_close,.init    = mqtt_plugin_init,.uninit  = mqtt_plugin_uninit,.start   = mqtt_plugin_start,.stop    = mqtt_plugin_stop,.setting = mqtt_plugin_config,.request = mqtt_plugin_request,
};

.open​

调用 mqtt_plugin_open 函数,基于 plugin 创建 node 时 neuron 第一个调用的函数,创建插件自己定义的结构体 struct neu_plugin。该结构体在 mqtt_plugin.h 中定义,需要注意的是结构体中的第一个成员一定是 neu_plugin_common_t common,其他成员可根据驱动的具体实现增加。

.close​

调用 mqtt_plugin_close 函数,删除 node 时,neuron 调用的最后一个函数,用于释放由 open 创建的 neu_plugin_t。

.init​

调用 mqtt_plugin_init 函数,在创建 node 时,neuron 调用完 open 后,紧接着调用的函数。此函数主要做插件内需要初始化的一些资源,mqtt 插件中主要初始化 mqtt 的运行状态及配置。

.uninit​

调用 mqtt_plugin_uninit 函数,删除 node 时,neuron 首先调用的函数,此函数主要释放一些在 init 中申请以及初始化的资源。

.start​

调用 mqtt_plugin_start 函数,用户在 neuron node 页面,点击开始时,neuron 会调用此函数,通知插件开始运行,以及开始连接设备等,如果配置不正确,将会返回节点设置无效的错误。

.stop​

调用 mqtt_plugin_stop 函数,用户在 neuron node 页面,点击停止时,neuron 会调用此函数,stop 通知插件停止运行,关闭插件与 neuron 之间的连接。

 .setting​

调用 mqtt_plugin_config 函数,用户在 neuron node 设置页面进行设置时使用,node 设置的参数将通过 json 方式呈现(json 文件的配置请参考 插件设置文件 ),neuron 将通过此函数通知插件进行设置。mqtt_plugin_config 函数首先会解析并保存配置信息,然后建立连接。

 .request​

调用 mqtt_plugin_request 函数,根据请求类型对应响应处理。

插件设置文件​

mqtt.json 文件设置应用配置参数,配置 mqtt 插件每个参数的字段说明如下所示。

参数说明
name页面显示该参数的名称
description该参数的具体说明
type该参数的类型,目前常用的是 int 和 string 两种类型
attribute该参数的属性,只有两种可选和必选,即 required 和 optional
default设置该参数的默认值
valid该参数可填写的范围,string 类型用 length,int 类型使用 max 和 min
map用于设置选项框

 适配华为的思路

首先简单的修改一下配置文件,删除掉不支持的选项,如map方式。考虑增加个deviceid的选项,有点像Azure。这部分改动不大。

可以在azure_iot_plugin.c的基础上进行插件的入口函数的设置,这部分也可以照搬。

azure_handle_trans_data这个函数需要修改一下,主要是其中调用的generate_upload_json函数,这个函数控制上传的JSON格式,需要安装华为的物模型进行修改。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • mysql之视图的创建以及查询;
  • uboot的mmc partconf命令
  • 谷粒商城实战笔记-56~57-商品服务-API-三级分类-修改-拖拽功能完成
  • 前端Vue项目中腾讯地图SDK集成:经纬度与地址信息解析的实践
  • GD32 MCU电源复位和系统复位有什么区别
  • FastGPT 源码调试配置
  • mesa LLVMpipe ORCJIT 上游化:一场历时两年的后端合并马拉松,幕后英雄竟是 TA!
  • 基于 HTML+ECharts 实现监控平台数据可视化大屏(含源码)
  • 使用 @Audited 增强Spring Boot 应用程序的数据审计能力
  • vue3.2使用@wangeditor/editor-for-vue实现富文本编辑器,后端使用thinkphp上传图片
  • 父子组件的传参问题,一方改变,另一方随之改变
  • JQuery+HTML+JavaScript:实现地图位置选取和地址模糊查询
  • 图片上传成功却无法显示:静态资源路径配置问题解析
  • GUL图形化界面操作(上部)
  • 大厂面试官问我:两个1亿行的文件怎么求交集?【后端八股文十五:场景题合集】
  • .pyc 想到的一些问题
  • [NodeJS] 关于Buffer
  • 【个人向】《HTTP图解》阅后小结
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • codis proxy处理流程
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java深入 - 深入理解Java集合
  • node学习系列之简单文件上传
  • quasar-framework cnodejs社区
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Shell编程
  • 阿里云Kubernetes容器服务上体验Knative
  • 跨域
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 区块链共识机制优缺点对比都是什么
  • 深度学习在携程攻略社区的应用
  • 实现菜单下拉伸展折叠效果demo
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 微信公众号开发小记——5.python微信红包
  • 移动端 h5开发相关内容总结(三)
  • # 数据结构
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (2)STM32单片机上位机
  • (20050108)又读《平凡的世界》
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Git) gitignore基础使用
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (二)WCF的Binding模型
  • (二)换源+apt-get基础配置+搜狗拼音
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (译) 函数式 JS #1:简介
  • (转)Sql Server 保留几位小数的两种做法
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转)平衡树
  • (转)项目管理杂谈-我所期望的新人