关于2022 EdgeX中国挑战赛
2022 EdgeX中国挑战赛暨中关村国际前沿科技创新大赛EdgeX专题赛正式拉开帷幕。大赛由北京市科委、中关村管委会指导,由Linux基金会主办,由阿里云、百度智能云、EMQ、GSMA 5G IN、英特尔、InnoSpace、中科创达、VMware、紫竹ET孵化器等联合承办单位共同支持,将在线上线下同步开赛。
本次大赛分设两大赛道:医疗、教育、消费行业赛道和能源、工业、供应链赛道。大赛致力于构建一个物联网及边缘计算的学习和分享平台,基于EdgeX Foundry,针对不同赛道的多个应用场景,以共享技术投资解决行业技术问题。除了40w+人民币总奖励,参赛者还可以获得技术、资本、市场等一系列参赛回报。
为帮助参赛选手更好地了解并运用相关技术,本次大赛将在7月至9月持续开展3轮技术培训,涵盖初、中、高不同层级,帮助开发者系统学习智能边缘系统知识。我们邀请到来自英特尔、VMware、阿里云等多家机构的技术专家进行分享。
初级培训第一场于7月18日举办,由VMware中国研发中心的高级软件工程师张华乔主讲,培训主题为**“简要介绍EdgeX及Hello World编程”,演讲内容包括EdgeX Foundry体系架构简介,以及如何使用EdgeX提供的SDK编写一个设备服务连接一个模拟设备,并使其输出HelloWorld信息。下面,让我们共同回顾讲座的精彩内容吧!
在培训中,张华乔讲师首先对EdgeX的架构体系和环境准备**展开了介绍:
图注:EdgeX架构体系
环境准备主要包括以下几个部分:
·Docker最新版本:https://docs.docker.com/engine/install/·docker-compose最新版本:https://docs.docker.com/compose/install/
·Golang语言开发环境
·make命令,VScode IDE工具
·EdgeXFoundry v2.2.0部署文件
此次培训还分享了编写Hello World的基础文件资料(云盘链接:https://pan.baidu.com/s/1UTX2Qdmf9NYzNDFx4iX3iQ 提取码: 61nq),包括:
·helloworld-profile.yaml文件
·mock-device可执行程序,支持macOS,Linux,Windows
·EdgeX快速启动部署文件docker-compose-no-secty.yml
随后,他还介绍了EdgeX的快速安装启动步骤:
关于访问EdgeX GUI(EdgeX官方GUI由VMware提供和维护):
·打开浏览器,地址栏输入http://:4000,请替换EdgeX GUI实例运行ip地址
此次培训也对如何使用Device Service SDK编写设备驱动服务展开了详尽的说明:
1:创建工作空间
mkdir -p ~/edgexfoundry
2:下载device service SDK开发包
cd ~/edgexfoundry
git clone --depth 1 --branch v2.2.0 https://github.com/edgexfoundry/device-sdk-go.git
3:创建设备驱动服务项目
推荐命名方式device-,protocol的依据实际协议名命令,比如modbus,mqtt,rest。
mkdir -p ~/edgexfoundry/device-simple
4:从SDK开发包添加device service模板工程
cd ~/edgexfoundry
cp -rf ./device-sdk-go/example/* ./device-simple/
5:添加Makefile和Version文件
cp ./device-sdk-go/Makefile ./device-simple/
cp ./device-sdk-go/version.go ./device-simple/
6:使用VScode打开cmd/device-simple/main.go文件修改相关依赖路径
github.com/edgexfoundry/device-sdk-go/v2/example/driver==>github.com/edgexfoundry/device-simple/driver
github.com/edgexfoundry/device-sdk-go/v2==>github.com/edgexfoundry/device-simple
7:使用VScode打开Makefile文件
MICROSERVICES=example/cmd/device-simple/device-simple==>MICROSERVICES=cmd/device-simple/device-simple
GOFLAGS=-ldflags "-X github.com/edgexfoundry/device-sdk-go/v2.Version=$(VERSION)" ==>GOFLAGS=-ldflags "-X github.com/edgexfoundry/device simple.Version=$(VERSION)"
example/cmd/device-simple/device-simple:
$(GOCGO) build $(GOFLAGS) -o $@ ./example/cmd/device-simple
==>
cmd/device-simple/device-simple:
$(GOCGO) build $(GOFLAGS) -o $@ ./cmd/device-simple
8:执行如下命令初始化golang mod模式
cd ~/edgexfoundry/device-simple
GO111MODULE=on go mod init github.com/edgexfoundry/device-simple
github.com/edgexfoundry/device-sdk-go/v2/example/driver==>github.com/edgexfoundry/device-simple/driver
github.com/edgexfoundry/device-sdk-go/v2==>github.com/edgexfoundry/device-simple
9:编辑上一步产生的go.mod文件,添加如下语句:
require(
github.com/edgexfoundry/device-sdk-go/v2 v2.2.0
github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0
)
10:执行如下命令整理依赖库
cd ~/edgexfoundry/device-simple
go mod tidy
11:执行make build 编译验证是否成功
cd ~/edgexfoundry/device-simple
make build
12:编辑driver/simpledriver.go文件自定义实现逻辑
(1)在文件的导入语句之后添加变量var messageValue string = "Hello EdgeXFoundry!"
(2)找到ValidateDevice()方法,清空或注释掉方法内的代码
(3)在HandleReadCommands()函数中删掉if else语句,添加如下代码:
res=make([]*sdkModels.CommandValue,len(reqs))
for i,req:=range reqs{
if reqs[i].DeviceResourceName=="getMessage"{
cmdResp,_:=sdkCommandValue(req.DeviceResourceName,common.ValueTypeString,messageValue)
res[i]=cmdResp
}
}
13:修改res/configuration.toml文件(可选,EdgeX实例和开发环境在不同宿主机下时需要更改)
更改当前simple-service主机地址
更改所有EdgeX服务客户端地址
14:编译运行
export EDGEX_SECURITY_SECRET_STORE=false
cd ~/edgexfoundry/device-simple
make build
cd ~/edgexfoundry/device-simple/cmd/device-simple
./device-simple
15:打开EdgeX GUI查看设备服务状态
浏览器中输入http://localhost:4000
导航至Metadata >Device Service页面,查看是否注册成功
16:添加helloworld profile文件
EdgeX GUI导航至Metadata >Device Profile页面
点击添加按钮进入添加页面,拖拽helloworld-profile.yaml文件到编辑器区域
(或者使用编辑器打开helloworld-profile.yaml文件,粘贴复制)
17:添加设备
EdgeX GUI导航至Metadata >Device页面
点击添加按钮进入添加设备页面,跟随添加向导完成设备添加
18:测试设备指令
EdgeX GUI导航至Metadata >Device页面
找到新添加的device,点击Command列按钮,选中左侧命令
在右侧点击Get方法面板的 try按钮,输出Hello EdgeXFoundry!
在右侧Set方法面板输入参数,点击try按钮
在右侧Get方法面板再次点击try按钮验证输出改变
19:使用mock device测试实际场景(以下步骤可选)
打开一个新的命令行终端,执行如下命令启动mock device:
windows平台:.\mock-device.windows --port=9090
Linux系统:./mock-device.linux --port=9090
MacOS系统:./mock-device.macos --port=9090
20:修改device-simple/driver/simpledriver.go文件
(1)文件开头导入语句之后添加如下代码
const(
Protocol ="http"
Host ="host"
Port ="port"
Path ="path"
)
(2)删除HandleReadCommands()函数内前一步的旧代码,添加如下新代码:
httpInfo, ok := protocols[Protocol]
res = make([]*sdkModels.CommandValue, len(reqs))
if !ok {
return res, errors.New(fmt.Sprintf("'%s' protocol properties is not defined", Protocol))
}
url := fmt.Sprintf("%s://%s:%s%s", Protocol, httpInfo[Host], httpInfo[Port], httpInfo[Path])
resp, err := http.Get(url)
if err != nil {
return res, errors.New(fmt.Sprintf("can't connect mock device on %s:%s%s", httpInfo[Host], httpInfo[Port], httpInfo[Path]))
}
respByte, _ := ioutil.ReadAll(resp.Body)
cmdResp, _ := sdkModels.NewCommandValue(reqs[0].DeviceResourceName, common.ValueTypeString, string(respByte))
res[0] = cmdResp
21:重新编译运行
cd ~/edgexfoundry/device-simple
make build
cd ~/edgexfoundry/device-simple/cmd/device-simples
./device-simple
22:GUI上更新device,添加连接协议
Protocol Name输入框填http
创建三个属性值,分别如下:
host = localhost
port = 9090
path = /api/v1/message
23:测试设备指令
EdgeX GUI导航至Metadata >Device页面
找到更新后的device,点击Command列按钮,选中左侧命令
在右侧点击Get方法面板的 try按钮,输出Hello EdgeXFoundry from mock device!
在培训的最后,张华乔讲师提出了几点特别说明:
·实际开发中,应该以协议名替换掉所有的simple关键字
·这里只演示单个设备指令,生产开发,应支持多指令并发,错误处理等事项
·简化官方教程的冗余步骤,减轻开发者踩坑负担
·补充了官方文档和SDK不清晰的步骤
讲座结束后,讲师还为大家提供了几道简单的自测题目。快来参与回答,看看你对EdgeX和其应用有多少了解吧!(答案于文章最后公布)
01
EdgeX微服务之间的通信方式
A、RPC
B、HTTP
C、RPC+HTTP
D、其他
02
EdgeX目前采用的API gateway是哪一个
A、vault
B、zookeeper
C、kong
D、consul
03
EdgeX核心服务中目前哪一个是可选服务
A、command服务
B、metadata服务
C、system agent服务
D、date服务
04
device service有几种方式向上推送数据
A、1
B、2
C、3
D、4
05
如果采用docker+源码混合方式编写设备服务,配置文件中必须要修改的地方
A、所有其他服务客户端地址
B、当前设备服务地址
C、consul地址
D、vault地址
06
设备服务和设备之间通信的本质是什么
A、基于网络
B、基于SDK自身机制
C、基于具体的协议实现
D、基于消息总线
答案:1.B 2.C 3.D 4.B 5.B 6.C
2022 EdgeX中国挑战赛已于8月3日盛大开幕,EdgeX中文社区将在接下来的日子里为大家带来更多边缘计算讲座分享和赛事进度更新。在这个盛夏,让我们一起展现风采,从自身所学的领域出发,为物联网、边缘计算市场提供更多更好的解决方案,展望一个更好的科技未来。
第三届EdgeX中国挑战赛,邀您来赛
多场景落地前景可期
全链条助阵生态共建
阶梯式培训同期推进
大奖与荣誉虚位以待
2022EdgeX中国挑战赛正在火热报名中,报名时间:2022年8月3日00:00 - 9月5日24:00。参与大赛,共同推动万物互联,请即刻联系我们。
大赛官网:https://www.edgex-challenge.com/
✦