本文主要是介绍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起来
该过程在官网有详细教程
我的工作目录如下
更新好edgex-device-mqtt以及下载edgex-ui
更新edgex-device-mqtt
首先使用git下载新版本edgex-device-mqtt,进入device-mqtt-go文件夹,修改Dockerfile文件,在WORKDIR语句上方添加一句 ENV GOPROXY=https://goproxy.cn
,如图1所示。
因为在生成image的时候需要用到GO语言的外部库,上述语句是为了防止外部库被墙。
修改完Dockerfile文件之后使用命令docker build -t device-mqtt-do:v1 .
来创建device-mqtt镜像。创建完成之后使用docker images
查看镜像,如果出现图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所示,则说明安装镜像成功。
修改docker-compose.yml文件
进入到geneva目录下修改docker-compose。yml文件,需要修改的有两点,
第一点,将device-mqtt部分取消注释,并且将image修改成device-mqtt-go:v1,如图4所示。
第二点,添加如图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这个框,然后添加第一步下载的配置文件。
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.
模拟Mqtt设备发送信息并验证
模拟mqtt设备
在之前我们下载过的mqtt-device-go文件中带有模拟mqtt设备的程序,首先我们需要在电脑上安装go语言,版本>=1.14,这随便百度就可以配置好,安装完之后需要执行指令go env -w GOPROXY=https://goproxy.cn,direct
将下载外部库的镜像指定到国内。然后我们进入到mqtt-device-go/mock
目录下,修改device.go文件(修改前建议先拷贝),需要修改的地方如图8所示。
其中,brokerUrl需要修改成自己的broker地址,data[“name”]需要修改成为mqtt配置信息中的Name。data[“cmd”]的内容需要修改成为randfloat32是因为我们下载的mqtt-profile文件中,它的name是randfloat32,如图9所示。data[“randfloat32”]同样如此。
还有两个mqttClientId需要修改是因为我们要运行两个mqtt-device,mqtt上传的clientId是不允许重复的。在上图中没有显示出来的还有topic这个变量需要修改成配置信息中的topic名字一样,这样才可以进行发布订阅。修改完device.go之后我们就可以使用go run device.go
来运行这个go文件。如果没有问题的话就会出现如图10所示的output。然后我们再新起一个终端,运行另外一个device。如果出现了MQTT connect lost EOF之类的报错,可以先检查一下是否clientId没有修改。
验证信息以及发送到coreData
运行docker logs --follow edgex-device-mqtt
查看device-mqtt服务运行情况,如果出现了reading received和pushed event to core data就说明数据以及push到core data中去了,我们上述步骤运行成功了。如果报错则再看看上面的步骤是否有漏掉。如图11所示,我们可以看到,mqtt接收到device为test和test1两个设备的数据了。
通过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并导出实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!