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

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

python如何创建等差数列

《python如何创建等差数列》:本文主要介绍python如何创建等差数列的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python创建等差数列例题运行代码回车输出结果总结python创建等差数列import numpy as np x=int(in

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项