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

相关文章

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

基于C#实现MQTT通信实战

《基于C#实现MQTT通信实战》MQTT消息队列遥测传输,在物联网领域应用的很广泛,它是基于Publish/Subscribe模式,具有简单易用,支持QoS,传输效率高的特点,下面我们就来看看C#实现... 目录1、连接主机2、订阅消息3、发布消息MQTT(Message Queueing Telemetr

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

Java 如何创建和使用ExecutorService

《Java如何创建和使用ExecutorService》ExecutorService是Java中用来管理和执行多线程任务的一种高级工具,可以有效地管理线程的生命周期和任务的执行过程,特别是在需要处... 目录一、什么是ExecutorService?二、ExecutorService的核心功能三、如何创建