edgeX创建两个device-mqtt并导出实战

2023-10-12 20:59

本文主要是介绍edgeX创建两个device-mqtt并导出实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

edgeX创建两个mqtt-device并通过rules-engine导出

    • 准备工作
      • 首先使用docker将edgeXrun起来
      • 更新好edgex-device-mqtt以及下载edgex-ui
        • 更新edgex-device-mqtt
        • 下载edgex-ui
      • 修改docker-compose.yml文件
    • 添加mqtt设备(南侧)
      • 使用ui生成设备配置信息
        • 1.下载配置文件
        • 2.打开ui
        • 3.添加配置文件
        • 4.生成配置信息
    • 模拟Mqtt设备发送信息并验证
        • 模拟mqtt设备
        • 验证信息以及发送到coreData
    • 通过rules engine导出到不同mqtt Broker
        • 1导出数据时丢包
        • 2json不支持'单引号

准备工作

首先使用docker将edgeXrun起来

该过程在官网有详细教程
我的工作目录如下
图0

更新好edgex-device-mqtt以及下载edgex-ui

更新edgex-device-mqtt

首先使用git下载新版本edgex-device-mqtt,进入device-mqtt-go文件夹,修改Dockerfile文件,在WORKDIR语句上方添加一句 ENV GOPROXY=https://goproxy.cn,如图1所示。
图1
因为在生成image的时候需要用到GO语言的外部库,上述语句是为了防止外部库被墙。

修改完Dockerfile文件之后使用命令docker build -t device-mqtt-do:v1 .来创建device-mqtt镜像。创建完成之后使用docker images查看镜像,如果出现图2所示,则说明安装镜像成功。图2

下载edgex-ui

如果当前edgeX没有自带edgex-ui的情况下需要下载,据说在几个月后将自带edgex-ui。
使用git下载edgex-ui,进入edgex-ui-go文件夹,修改Dockerfile文件,在ENV GO111MODULE=on 语句下方添加ENV GOPROXY=https://goproxy.cn语句,然后执行docker build -t edgex-ui-go:v1 .生成edgex-ui镜像,同样如果出现图3所示,则说明安装镜像成功。
图3

修改docker-compose.yml文件

进入到geneva目录下修改docker-compose。yml文件,需要修改的有两点,
第一点,将device-mqtt部分取消注释,并且将image修改成device-mqtt-go:v1,如图4所示。
图4

第二点,添加如图5代码,具体可参考这里
图5
进行上述操作之后restart整个edgex项目,然后运行docker inspect edgex-mqtt-go | grep MergedDir cd进入MergedDir表示的路径,再进入res目录,修改configuration.toml,将其中的IncomingHost和ResponseHost的地址修改成为自己的mqtt-Broker的地址,或者使用官方免费broker.eqmx.io。修改之后再restart整个edgex项目。

添加mqtt设备(南侧)

使用ui生成设备配置信息

1.下载配置文件

首先到此处下载配置文件,并保存到本地。

2.打开ui

因为在docker-compose.yml中ports设置成0.0.0.0,即意味着该端口能在公网访问到(127.0.0.1只能能访问),因此在本地输入hostip:4000即可打开ui界面。

3.添加配置文件

如图6所示,点击Device Profile下面的+号就会弹出New Profile这个框,然后添加第一步下载的配置文件。
图6

4.生成配置信息

如图7所示,首先点击创建device,用黑框标注出来的是需要注意的地方,首先,DeviceService处的Name需要选择edgex-device-mqtt,Device处的Name可以任意,但需要与device.go中的Name对应(下面会说到),DeviceProfile选择刚刚我们上传的配置文件,在DeviceAddressable处,Host选择自己的broker地址,Topic可以任意,同样需要与device.go中的Topic相对应。点击左上角✔之后就生成了一个mqtt-device的配置信息,如法炮制可以生成第二个device的配置信息。将其命名为test1.
图7

模拟Mqtt设备发送信息并验证

模拟mqtt设备

在之前我们下载过的mqtt-device-go文件中带有模拟mqtt设备的程序,首先我们需要在电脑上安装go语言,版本>=1.14,这随便百度就可以配置好,安装完之后需要执行指令go env -w GOPROXY=https://goproxy.cn,direct将下载外部库的镜像指定到国内。然后我们进入到mqtt-device-go/mock目录下,修改device.go文件(修改前建议先拷贝),需要修改的地方如图8所示。
图8

其中,brokerUrl需要修改成自己的broker地址,data[“name”]需要修改成为mqtt配置信息中的Name。data[“cmd”]的内容需要修改成为randfloat32是因为我们下载的mqtt-profile文件中,它的name是randfloat32,如图9所示。data[“randfloat32”]同样如此。
图9
还有两个mqttClientId需要修改是因为我们要运行两个mqtt-device,mqtt上传的clientId是不允许重复的。在上图中没有显示出来的还有topic这个变量需要修改成配置信息中的topic名字一样,这样才可以进行发布订阅。修改完device.go之后我们就可以使用go run device.go来运行这个go文件。如果没有问题的话就会出现如图10所示的output。然后我们再新起一个终端,运行另外一个device。如果出现了MQTT connect lost EOF之类的报错,可以先检查一下是否clientId没有修改。
图10

验证信息以及发送到coreData

运行docker logs --follow edgex-device-mqtt查看device-mqtt服务运行情况,如果出现了reading received和pushed event to core data就说明数据以及push到core data中去了,我们上述步骤运行成功了。如果报错则再看看上面的步骤是否有漏掉。如图11所示,我们可以看到,mqtt接收到device为test和test1两个设备的数据了。
图11

通过rules engine导出到不同mqtt Broker

这一部分可以参考kuiper的官方文档以及它下面的mate的拓展阅读,上面写的很详细,我这这里简要说几点需要注意的。

1导出数据时丢包

如果在上述步骤,你将所有的broker的地址设置为自己的服务器,就很有可能broker处理不过来产生丢包,此时建议将一部分broker的地址设置成为官方的broker,地址为broker.emqx.io

2json不支持’单引号

在编辑rule.txt时,“sql”:""对应语句时,如果创建了不同的流,则对应的流需要使用双引号引起来,此时我们将双引号转义即可


上述如果有问题欢迎私信提出,也可以发我邮箱相互探讨邮箱:YuanlinHu@bupt.edu.cn

这篇关于edgeX创建两个device-mqtt并导出实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/198436

相关文章

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

Java使用Tesseract-OCR实战教程

《Java使用Tesseract-OCR实战教程》本文介绍了如何在Java中使用Tesseract-OCR进行文本提取,包括Tesseract-OCR的安装、中文训练库的配置、依赖库的引入以及具体的代... 目录Java使用Tesseract-OCRTesseract-OCR安装配置中文训练库引入依赖代码实

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c