Edgexfoundry自动化安装与操作详解
目录
图片太多,无法上传,原版含图片的,请联系古桥教育 QQ:15599633
本文通过安装包的方式,快速安装edgexfoundry,体验edgex功能。
版本:基于edgexfoundry fuji 1.1.0
与官方版本对比:
- 功能增加
增加了kafka导出插件(通过app-functions-sdk),将接收到的event导出到kafka
增加了将图片event,保存到图片文件
Rule Engine,增加了通知功能
- Edgex-UI优化项
DeviceService:增加了设备操作支持图像显示
Rule Engine增加了通知功能,当规则触发时,同时可以发通知
Rule Engine 解决了创建规则不同profile,command重名混乱问题
export 模块mqtt导出显示大数量会中断问题
export 模块mqtt导出显示echart图形不显示问题,并增加了平均数显示
export 增加注册导出端时,Filters (optional)无法选择问题
- Ubuntu OS主机一台,亦可是虚拟机(内存建议4G以上),ubuntu安装可参考《vware上安装ubuntu虚拟机.docx》。本次演示安装在一台虚拟机上
- 安装时会提醒安装docker,如果需要安装,则主机需连互联网且下面所有操作需要root用户身份,如果机子已安装docker则无需互联网
- 建议以root身份执行所有安装与启动操作,因为在清除缓存功能需要用到操作/var/lib/docker目录,否则清除缓存功能无法
- 建议内存4G以上
下载安装文件包:
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
执行启动脚本
提供两个版本的启动,可以任选一种
- Mongo版本:
./start-edgex.sh mongo
若清除consul缓存与数据库启动,则用:
./start-edgex.sh mongo y (需要root用户身份)
- Redis 版本:
./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
执行启动脚本,提供两个版本的启动,根据之前启动的版本选择
- Mongo版本:
./stop-edgex.sh mongo
- Redis 版本:
./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了
下图是规则引擎后台打印结果:
如下原因可能导致规则无法触电发:
- app-service-configurable过滤的条件限制,导致没有接收event
- app-service-configurable没有启动
- zeromq端口没有配对
- 创建规则时,设备属性没有选对
注册通知接收方
通知注册成功,如下:
触发通知
现用规则引擎来演示触发一条通知
规则如下,当设备温度大于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
偿试如下办法:
- 重启设备服务,通过restop-one-service.sh脚本
- 浏览F12查看newwork网络通讯情况,如请求与响应消息
- 主机名配置错误,查看配置文件中的几处hostname是否一致
牢记,修改configuration.yml无效时,应考虑去consul UI 看配置
- 手工修工数据库不能生效,需要重启服务meta 与 data模块
- 用过postman修改,可立即生效,post 数据格式可参考官方提供的edgex-go\api\raml查看,或edgex-ui浏览器中F12查看
需要在app-service-kafkaexport服务中增加hosts域名解析
注意:需在容器创建前就需要注入域名解析,不可启动后进入容器修改/etc/hosts
确保configseed启动完后,其它Core support export模块启动无后后顺序
================================全文结束=======================================