Edgexfoundry自动化安装与操作详解
目录
1. 概述
2. 环境准备
2.1. 操作系统与要求
2.2. 下载安装包
3. 安装edgex
3.1. 解压安装包
3.2. 修改配置文件
3.3. 执行安装
4. 验证安装
4.1. 查看docker安装情况
4.2. 查看docker-compose安装情况
4.3. 查看镜像
5. 启停edgex操作
5.1. 启动edgex
5.2. 验证Edgex启动情况
5.3. 停止edgex方法
5.4. 启停单个服务
5.4.1. 停止单个服务
5.4.2. 启动单个服务
5.4.3. 重启单个服务
6. edgex功能验证
6.1. 登录edgex-ui
6.2. 操作设备
6.2.1. Device-smiple设备服务
6.2.2. device-virtual设备服务
6.2.3. modbus设备服务
6.2.4. MQTT设备服务
6.3. 导出功能
6.3.1. 导出到MQTT
6.3.2. 导出为restful
6.4. 规则引擎
6.4.1. 启动服务
6.4.2. 创建引擎规则
6.4.3. 操作设备触发规则
6.4.4. 可能的问题
6.5. 通知功能
6.5.1. 邮件通知功能
6.5.2. Restful通知功能
6.6. event保存成图片功能(专业版)
6.6.1. 启动图片保存服务
6.6.2. 查看生成的图片
6.7. 导出到Kafka功能(专业版)
6.7.1. 启动kafka导出服务
6.7.2. 查看导出的kafka消息
7. 卸载edgex
8. 碰到的问题与关注点
8.1. 当主机IP变化时无法使有kafka
8.2. 无法操作设备
8.3. 通知邮件无法发出
8.4. 配置参数从consul中读
8.5. 关于几个hostname
8.6. 设备数据在内存
8.7. 关于无法发消息到kafka
8.8. Edgex模块启动顺序
图片太多,无法上传,原版含图片的,请联系古桥教育 QQ:15599633
古桥教育_古桥教育腾讯课堂官网 (qq.com)
本文通过安装包的方式,快速安装edgexfoundry,体验edgex功能。
版本:基于edgexfoundry fuji 1.1.0
与官方版本对比:
增加了kafka导出插件(通过app-functions-sdk),将接收到的event导出到kafka
增加了将图片event,保存到图片文件
Rule Engine,增加了通知功能
DeviceService:增加了设备操作支持图像显示
Rule Engine增加了通知功能,当规则触发时,同时可以发通知
Rule Engine 解决了创建规则不同profile,command重名混乱问题
export 模块mqtt导出显示大数量会中断问题
export 模块mqtt导出显示echart图形不显示问题,并增加了平均数显示
export 增加注册导出端时,Filters (optional)无法选择问题
下载安装文件包:
edgex-fuji_standard_1.1.0.tar.gz (标准版)
或
edgex-fuji_expert_1.1.0.tar.gz(专业版,含kafka与图片保存功能)
里面含有安装sh文件、配置文件与镜像,解压后目录类似如下:
tar zxvf edgex-fuji_standard_1.1.0.tar.gz (标准版)
tar zxvf edgex-fuji_expert_1.1.0.tar.gz (专业版)
并进入到edgex-fuji目录增加sh执行权限:
cd ./edgex-fuji
chmod -R +x ./bin
打开解压后目录下的host文件,将其中的IP改为你的真实的物理机IP(前后不要用空格)
1)进入安装目录,如下:
cd edgex-fuji/bin
2)修改可执行权限:
chmod -R +x *
3)执行安装脚本:
./ install-edgex.sh
如下图,输入“Y”进行安装,输入“n”则退出安装
如下图,输入“Y”会重新安装docker与docker-compose,输入“n”则不安装docker与docker-compose(此时确保本机已经有docker与docker-compose)
如下图,在安装docker与docker-compose
如下图,自动装载镜像:
输入命令:docker version
输入命令:docker-compose version
执行:docker images
进入安装目录,如下:
cd edgex-fuji/bin
执行启动脚本
提供两个版本的启动,可以任选一种
./start-edgex.sh mongo
若清除consul缓存与数据库启动,则用:
./start-edgex.sh mongo y (需要root用户身份)
./start-edgex.sh redis
若清除consul缓存与数据库启动,则用:
./start-edgex.sh redis y (需要root用户身份)
以Redis版启动为例,启动界面如下图:
在客户机浏览器输入如下地址:http://192.168.75.141:8500
(192.168.75.141改为你的真实IP)
上图Node health列全为绿色,表示edgex服务启动成功
进入安装目录,如下:
edgex-fuji/bin
执行启动脚本,提供两个版本的启动,根据之前启动的版本选择
./stop-edgex.sh mongo
./stop-edgex.sh redis
版本指:mongo 或 redis
服务名:见docker-compose-mongo.yml 或 docker-compose-redis.yml
服务名 |
服务名 |
||
配置 |
consul config-seed |
数据库 |
redis mongo |
核心 |
metadata data command |
支持 |
logging notifications scheduler |
导出 |
export-client export-distro |
规则引擎 |
rulesengine |
设备 |
device-simple device-mqtt device-modbus device-virtual |
App-function |
app-service-rules app-service-kafkaexport app-service-imagesave |
安全 |
vault vault-worker kong-db kong-migrations kong edgex-proxy |
内置mqtt |
edgex-mosquitto |
stop-one-sevice.sh 版本 服务名
start-one-sevice.sh 版本 服务名
restart-one-sevice.sh 版本 服务名
在客户机浏览输入:http://192.168.75.141:4000
(192.168.75.141改为你的真实IP)
输入:admin/admin 用户名与密登录
进入主界面如下
设置gateway
此设备演示灯光开关功能,根据Swicth的值(false,true两种)
当设备属性Switch值为false时,属性Image为黑色关灯图片,反之则为黄色亮灯图片
启动设备服务:
./start-one-sevice.sh redis device-simple
如下图依次点击
当点send按钮时,会根据Method列get 或 set方法操作device-simple设备,展示或设置设备的值
可能的问题
在获取属性值时,返回failed或显示不了图版时,说明设备工作异常,此时需重启此设备服务:
./stop-one-sevice.sh redis device-simple
./start-one-sevice.sh redis device-simple
或者
./restart-one-sevice.sh redis device-simple
操作后,刷新edgex-ui界面,重新偿试
启动设备服务:
./start-one-sevice.sh redis device-virtual
此设备服务共有三个设备,即温湿度、马达转速功能、boolean类数据操作
说明:
当EnableRandomization_Temperature 值设为true时,设置的Temperature属性值不起作用,由设备随机产生一个值;否则有效,始终返回指定的属性值
可能的问题
在不能正常获取属性值时,返回failed时,说明设备工作异常,此时需重启此设备服务:
先删除,后创建
./stop-one-sevice.sh redis device-virtual
./start-one-sevice.sh redis device-virtual
或者
./restart-one-sevice.sh redis device-virtual
操作后,刷新edgex-ui界面,重新偿试
此设备服务演示操作modbus设备,即读写modbus设备的属性值,本例使用了Modbus Slave模似器模拟一台modbus设备,modbus两种通讯连接方式
操作设备
启动设备
进入edgex-fuji/bin目录,如下所示,启动设备:
./start-one-service.sh redis device-modbus
Tcp通讯
修改设备地址,改为device-modbus设备服务能访问到的模拟设备:
操作设备
将operationMode的值设为2
查看模拟器的值已改了2
获取值,界面上get时,值也是2,相吻合
RTU串口通讯
查看串口参数
查看虚拟机所在的串口情况(若不虚拟机,用的是物理主机,则不需要下面操作):
命令:dmesg | grep tty
如果操作失败,可能下是的设备服务没有启动成功,需重启modbus设备服务
可能的问题
在获取属性值时,返回failed或显示不了图版时,说明设备工作异常,此时需重启此设备服务:
./stop-one-sevice.sh redis device-modbus
./start-one-sevice.sh redis device- modbus
或者
./restart-one-sevice.sh redis device- modbus
此演示通过mock模拟mqtt设备,接受device-mqtt的指令收发数据,并设备可主动向device-mqtt设备发送数据。
启动设备
进入edgex-fuji/bin目录,如下所示,启动设备:
./start-one-service.sh redis device-mqtt
由于机子性能问题,演示此例时,建议停止其实设备服务,避免消息拥堵。
操作设备
后台容器显示:
Service向设备发命令:
设备响消数据:
可能的问题
在不能正常获取属性值时,返回failed时,说明设备工作异常,此时需重启此设备服务:
先删除,后创建
./stop-one-sevice.sh redis device-mqtt
./start-one-sevice.sh redis device-mqtt
或者
./restart-one-sevice.sh redis device-mqtt
启动mqtt broker
./start-one-sevice.sh mongo edgex-mosquitto
注册客户端
下图画圈的对方必须如图所示
如下图关闭返回:
会看到不断有数据导出到配置的mqtt broker上了
拖到下方,并能看到设备属性动态图像
可以使用portainer进入容器上去查看:
启动portainer:
./start-one-sevice.sh redis portainer
登录进去:http://192.168.75.141:9000
创建一个不少于8个字串的密码
输入命令:
mosquitto_sub -h localhost -p 1883 -t test -u "mqttuser" -P "123456"
如下图:
注意事项:
不演示时,需要退出用户登录,或直接关闭浏览器,否则后台一直在导出该浏览器,可以观看edgex-ui后台
注册restful导出端
本次示例导出的目的服务器IP
查看导出情况
参考导出功能中的“导出为restful”章节,通过规则引擎触发一条通知,查看通知信息是否通知到目的地址:http://192.168.0.104:9000/recviedata
下面可以看到edgex发出的请求,说明数据已成功导出来了
可能的问题:
确保monitor运行的主机通讯端口是否被防火墙关闭了
可采用nc –zv hostname/ip port方式测试联通性
本次演示采用了app-service-configurable方式接收core-data的event,并push到5566端,规则引擎从此端口接收event(另外一种方式是从distro 服务push到5567端口,这个需要在consul中配置,修改规则引擎的event接收端口)
启动规则引擎与app-service-configurable服务:
./start-one-sevice.sh redis rulesengine
如下图,创建两个服务,一个是app-service-configurable,另一个是rulesengine(规则引擎)
登录edgex-ui创建规则
如下图,创建一条规则为:当温度大于40度时,将其设回到30度
创建成功如下图:
将设备温度设置高于40度
设置成功如下图:
然后发送get指令,可以看到设备的温度已置为30了
下图是规则引擎后台打印结果:
如下原因可能导致规则无法触电发:
注册通知接收方
通知注册成功,如下:
触发通知
现用规则引擎来演示触发一条通知
规则如下,当设备温度大于30度时,发送通知,并设置为25度
现在我们去操作设备,将其温度设置为大于30度,如下图设为31度
Get设备属性,如下:
很快就收到了QQ 邮件提醒了:
通知后台也有打印日志出来,没有错误
注册restful导出端
使用postman进行注册restful通知端
可在edgex-ui上可以查看到注册成功:
查看通知
同上面邮件通知类型,通过规则引擎触发一条通知,使用eclipse中的monitor工具,配置如下:
下面可以看到edgex发出的通知restful,成功接收到了
此功能演示device-simple设备服务定时发现的图片event,将其按时间戳保存起来。
./start-one-sevice.sh redis app-service-imagesave
如下图:
进入到如下目录,查看导出的图片:
cd /var/lib/docker/volumes/composefiles_images/_data
提醒:不用时,记得关于此服务,因为device-simple运行时,它会持续保存图片
关于服务方法:
./stop-one-sevice.sh redis app-service-imagesave
该功能演示,将edgex的event导出到kafak broker,方便数据进一步业务处理
./start-one-sevice.sh redis app-service-kafkaexport
通过portainer工具,进入kafka broker容器查看消息导出情况,如下图:
(若portainer没有启动,可通过./start-one-sevice.sh redis portainer命令拉起来)
在里面执行如下命令查看从edgex导出来的kafka消息:
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic edgexKafkaTopic
从下图可看出导出到kafka的event消息:
停止kafka服务方法:
./stop-one-sevice.sh redis app-service-kafkaexport
卸载会退回到edgex安装之前的状态
若需卸载docker 与 docker-compose,需要用root用户操作
进入edgex-fuji/bin目录,执行如下命令:
./uninstall-edgex.sh
解决办法:
修改kafkahost文件为正确的IP
执行./resetip.sh
设备get /set为failed
偿试如下办法:
牢记,修改configuration.yml无效时,应考虑去consul UI 看配置
需要在app-service-kafkaexport服务中增加hosts域名解析
注意:需在容器创建前就需要注入域名解析,不可启动后进入容器修改/etc/hosts
确保configseed启动完后,其它Core support export模块启动无后后顺序
================================全文结束=======================================