直播回顾丨一堂课快速上手EdgeX

在这里插入图片描述

直播回顾丨一堂课快速上手EdgeX_第1张图片
关于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_第2张图片图注: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的快速安装启动步骤:

  1. 获取EdgeX运行文件:云盘资料中的文件docker-compose-no-secty.yml
  2. 运行EdgeX:docker-compose -f docker-compose-no-secty.yml up -d
  3. 查看运行状态:docker ps

关于访问EdgeX GUI(EdgeX官方GUI由VMware提供和维护):
·打开浏览器,地址栏输入http://:4000,请替换EdgeX GUI实例运行ip地址
直播回顾丨一堂课快速上手EdgeX_第3张图片

此次培训也对如何使用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/

你可能感兴趣的:(赛事,EdgeX,中国挑战赛,运维,英特尔,物联网,docker)