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

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模