#树莓派上的Edgexfoundry实战
此文档用于详细描述边缘计算框架degexfoundty部署到树莓派上的方法,可能出现的bug以及必要的说明
目录
[TOC]
- 官方文档 :https://docs.edgexfoundry.org
- Core Service层:core-data, core-metadata, core-command
- Support Service层
- Export Service层
- Device Service层:device-mqtt
- EdgeX UI:https://github.com/edgexfoundry/edgex-ui-go
- 官方github: https://github.com/edgexfoundry
- 官方维基:https://wiki.edgexfoundry.org
device-opcua微服务位于Device Service层,与基于OPCUA协议的设备通讯
针对基于OPC-UA协议的设备/传感器,基于官方github给出的 device-skd-go,定制device-opcua微服务的golang版本,调用opcua的 go SDK接口,可以实现对此类设备的注册、管理、控制等,制作此微服务的Docker镜像,并部署在树莓派3b+,实现对OPCUA服务端节点的读取、设置、监听等操作。
可提前准备好配置文件和Device Profile,方便设备微服务读取。服务启动后,配置信息可以通过consul服务注入,Device Profile, Device的信息等可利用Postman软件调用core-matadata服务的API添加
-
configuration.toml
文件提供device-opcua服务的信息、consul服务的信息、其他需要和设备服务交互的微服务的信息、Device信息(包含Device Profile的目录)、日志信息、预定义Schedule和SchedukeEvent信息(包含要定时执行的命令)、预定义设备信息(包含设备的Endpoint信息)、订阅设备及Node信息。 -
configuration-driver.toml
文件提供OPCUA Server的NodeID与deviceResource的对应关系,以及监听操作的端点信息和设备资源对应关系 -
OpcuaServer.yaml
作为设备的Device Profile, 有关它的书写参见相关资料1 2
注 :configuration.toml, configuration-driver.toml和Device Profile应确定好唯一的映射关系
- OPCUA设备管理
- 监听OPCUA节点上的值
- 对指定节点进行读取操作
- 对指定节点进行写入操作
- 根据预定义的schedule执行命令
Device Service的编写参考官方文档:https://docs.edgexfoundry.org/Ch-GettingStartedSDK-Go.html
代码已提交至github仓库:https://github.com/Burning1020/device-opcua-go
包管理工具可以自动下载代码所需要的依赖,不需要手工添加,只需要指定好包的地址和版本
-
edgex-go的deihi分支采用第三方包管理工具glide,利用glide.yaml下载代码所需依赖
-
go 1.11版本支持“modules”特性,使用vgo作为包管理工具,利用go.mod文件下载配置依赖,master分支采用vgo
bug提示 :下载golang.org的包会被墙,要修改go.mod用github.com/golang替代源
在$GOPATH/src/github.com/edgexfoundry/device-opcua-go
目录下:
- 执行
make build
命令编译可执行二进制文件device-opcua-go至cmd目录 - 执行
make run
命令运行此可执行文件 - 执行
make build-arm64
命令构建镜像,此镜像可放在树莓派内的Docker容器中运行,配置文件的读取参见1.2.4
Export 微服务可将数据导出到西门子工业云平台MindSphere
先将Open Edge Diver Kit置为export-distro的客户端,然后对其进行初始化并采集数据上云所需参数,最后发送数据
详见: Export-go: https://github.com/Burning1020/export-go
-
OPC中国:http://opcfoundation.cn/developer-tools/specifications-unified-architecture/index.aspx
-
OPCUA虚拟设备:https://www.prosysopc.com/products/opc-ua-simulation-server
详见相关资料3
-
烧录系统:推荐ubuntu 16.04 链接: https://pan.baidu.com/s/1gRXex4njLKi6dAHcqzrgjw 提取码: 9y5h
-
安装Docker:https://docs.docker.com/install
-
安装Docker-Compose:https://docs.docker.com/compose/install
*提示:*安装出现问题参见相关资料3
修改docker-compose.yml文件,按需修改服务的image地址为nexus.edgexfoundry.org:10004/<微服务>-go-arm64:<tag号>
,具体详见:https://docs.edgexfoundry.org/Ch-GettingStartedUsersNexus.html
拉取镜像的快慢取决于网络环境,网络环境差的可以参考相关资料3
将构建和的镜像打标签后推送至docker hub
docker tag
docker push
同一局域网下,服务器和树莓派IP地址已知,让树莓派中运行的Docker拉取服务器中的镜像,在服务器中执行以下命令:
-
创建本地仓库:
docker pull registry
-
容器中启动仓库:
docker run -d –p <端口:端口> <仓库名>
-
查看本地仓库:
curl 127.0.0.1:<端口>/v2/_catalog
-
打标签:
docker tag <目标镜像> <服务器IP:端口/镜像名>
-
修改push的HTTPS要求:
vim /etc/docker/daemon.json
{ "insecure-registries": ["<服务器IP:端口>"] }
-
重启docker:
systemctl restart docker
-
启动仓库,推送镜像:docker push <tag后的镜像名>
-
向docker-compose.yml文件添加device-opcua服务,image地址为 <tag后的镜像名>
-
修改pull的HTTPS要求:
vim /etc/docker/daemon.json
{ "insecure-registries": ["<服务器IP:端口>"] }
-
重启docker:
systemctl restart docker
-
拉取并启动device-opcua服务:
docker-compose up -d device-opcua
待补充
利用kubernetes将报警服务分发到节点并启动,当条件满足时触发报警动作
-
EdgeX Tech Talks (YouTube 频道需要翻墙) :https://www.youtube.com/playlist?list=PLih1NL_0jlJNyzs-y_kUuni4yr8J04Nnp
-
EdgeX Foundry中国社区:http://www.edgexfoundry.club
-
CSDN博客:
如果您喜欢这个项目,请在github上为我点赞,您的鼓励是我最大的动力!