edgexfoundry之Device Service GO SDK

首先,此文Device Service SDK的翻译来自官方文档,edgex的版本是Geneva,是我按照官方文档一步一步运行的,希望更多研究edgex的小伙伴一起学习!
官方文档地址:edgex官方文档

Device Service SDK

EdgeX设备服务软件开发套件(SDK)可帮助开发人员为EdgeX创建新的设备连接器。 SDK提供了每种设备服务所需的通用支架。这使开发人员可以更快地创建新的设备/传感器连接器。

EdgeX社区已经提供了许多设备服务。但是,社区无法提供每种协议和每种传感器的方式。即使EdgeX社区为每种协议提供了设备服务,您的用例,传感器或安全性基础结构也可能需要自定义。因此,设备服务SDK提供了扩展或自定义EdgeX设备连接性的方法。

EdgeX提供了两个SDK,以帮助开发人员创建新的设备服务。 EdgeX的大多数是用Go和C编写的。因此,有一个用Go和C编写的设备服务SDK,以支持EdgeX中当今使用的更流行的语言。将来,社区可能会提供备用语言SDK。

SDK是被合并到新的微服务中的库。它们使编写新设备服务变得更加容易。通过将SDK库导入到新的设备服务项目中,开发人员就可以专注于特定于通过设备协议与设备通信的代码。

SDK中的代码处理其他细节,例如:-设备服务的初始化-配置服务-将传感器数据发送到核心数据-管理与核心元数据的通信-等等。

SDK中的代码还有助于确保您的设备服务符合EdgeX的规则和标准。例如,它确保服务在启动时已在EdgeX注册表服务中注册。

  • go sdk

在本指南中,您将创建一个简单的设备服务,该服务会生成一个随机数,以模拟从实际设备中获取数据。通过这种方式,您将探索一些SDK框架,并完成设备服务而无需实际与之交谈来进行必要的工作。

1.安装依赖

2.获取Go的EdgeX设备SDK

3.请按照以下步骤在文件系统上创建文件夹,下载Device SDK,并在系统上获取GoLang设备服务SDK。

  1. 在文件系统上创建一个嵌套文件夹的集合〜/ go / src / github.com / edgexfoundry。此文件夹将保存您的新设备服务。在Linux中,使用单个mkdir命令创建目录
mkdir -p ~/go/src/github.com/edgexfoundry
  1. 在终端窗口中,将目录更改为刚创建的文件夹,并使用所示命令在Go中拉下SDK。
cd ~/go/src/github.com/edgexfoundry
git clone --depth 1 --branch v1.2.2 https://github.com/edgexfoundry/device-sdk-go.git
  1. 创建一个文件夹,其中将包含新的设备服务。文件夹的名称也是您要提供新设备服务的名称。 EdgeX的标准做法是在设备服务的名称前加上device-。在此示例中,使用名称“ device-simple”。
mkdir ~/go/src/github.com/edgexfoundry/device-simple
  1. 将示例代码从device-sdk-go复制到device-simple:
cd ~/go/src/github.com/edgexfoundry
cp -rf ./device-sdk-go/example/* ./device-simple/

  1. 将Makefile复制到简单设备上:
cp ./device-sdk-go/Makefile ./device-simple
  1. 将version.go复制到简单设备上:
cp ./device-sdk-go/version.go ./device-simple/

  1. 完成这些步骤后,您的设备简单文件夹应类似于以下列表。

image-20201125155617477

  • 启动新的设备服务

有了设备服务应用程序结构之后,现在就可以对该服务进行编程,使其像传感器数据获取服务一样工作。

1.将文件夹更改为设备简单目录。

2.使用您喜欢的文本编辑器打开cmd / device-simple文件夹中的main.go文件。修改导入语句。在导入语句中,将github.com/edgexfoundry/device-sdk-go/example/driver替换为github.com/edgexfoundry/device-simple/driver。还要用github.com/edgexfoundry/device-simple替换github.com/edgexfoundry/device-sdk-go。完成编辑后,保存文件。

3.在您喜欢的文本编辑器中打开在基本文件夹(〜/ go / src / github.com / edgexfoundry / device-simple)中找到的Makefile,并进行以下更改

image-20201125161148428

4.保存

5.输入:

GO111MODULE=on go mod init

6.使用编辑器打开和编辑在〜/ go / src / github.com / edgexfoundry / device-simple中创建的go.mod文件。将下面突出显示的代码添加到文件底部。此代码指示要使用哪个版本的设备服务SDK和关联的EdgeX Contracts模块

require (
    github.com/edgexfoundry/device-sdk-go v1.2.2
    github.com/edgexfoundry/go-mod-core-contracts v0.1.58
)
  • Build your Device Service

为确保您移动和更新的代码仍然有效,请构建设备服务。在终端窗口中,确保您仍在设备简单文件夹(包含Makefile的文件夹)中。通过发出以下命令来构建服务:

make build

如果没有错误,则您的服务已准备就绪,可以添加自定义代码以生成数据值,就像已连接传感器一样。

  • 自定义您的设备服务

您正在创建的设备服务不会与真实设备对话。取而代之的是,它将生成一个随机数,服务通常会在该随机数处进行调用以从实际设备获取传感器数据。

1.在/ driver文件夹中找到simpledriver.go文件,然后使用您喜欢的编辑器将其打开。

2.In the import() area at the top of the file, add "math/rand" under "time".

image-20201125205250361

3.在同一文件(simpledriver.go)中找到HandleReadCommands()函数。在此文件中找到以下代码行(第87行左右):

if reqs[0].DeviceResourceName == "SwitchButton" {
        cv, _ := dsModels.NewBoolValue(reqs[0].DeviceResourceName, now, s.switchButton)
        res[0] = cv
}

在上述条件前面添加条件(if-else)代码:

if reqs[0].DeviceResourceName == "randomnumber" {
       cv, _ := dsModels.NewInt32Value(reqs[0].DeviceResourceName, now, int32(rand.Intn(100)))
       res[0] = cv
} else

代码的第一行检查当前请求是否针对名为“ randomnumber”的资源。第二行代码生成一个整数(0到100之间),并将其用作设备服务发送到EdgeX的值-模仿从真实设备收集数据的过程。在这里,设备服务通常会捕获来自设备的一些传感器读数,并将数据发送到EdgeX。您需要在HandleReadCommands中进行一些自定义工作,以与设备进行对话,获取最新的传感器值并将其发送到EdgeX。

4.Save the simpledriver.go file

  • 创建设备配置文件Creating your Device Profile

设备配置文件是YAML文件,它描述EdgeX的设备类别。有关设备类型,这些设备提供的数据以及如何命令该设备的一般特征都在设备配置文件中。设备配置文件告诉设备服务从设备收集了哪些数据以及如何获取数据。

请按照以下步骤为简单的随机数生成设备服务创建设备配置文件。

1.浏览cmd / device-simple / res文件夹中的文件。请注意此文件夹中已经存在的示例Simple-Driver.yaml设备配置文件。用您喜欢的编辑器打开文件并浏览其内容。请注意文件中的deviceResources如何表示设备的属性(如SwitchButton,X,Y和Z旋转的属性)。类似地,coreCommands指定发布给设备的命令。

2.本文档中提供了针对随机数设备的预先创建的设备配置文件。下载random-generator-device.yaml并将文件保存到〜/ go / src / github.com / edgexfoundry / device-simple / cmd / device-simple / res文件夹。

3.在文本编辑器中打开random-generator-device.yaml文件。在此设备配置文件中,所描述的设备具有deviceResource:randomnumber。请注意类型与deviceResource的关联方式。在这种情况下,设备配置文件会通知EdgeX随机数将是INT32。在现实世界的物联网情况下,此deviceResource列表可能会很广泛。您可能会发现此部分中充满了许多deviceResources和与不同类型相关联的每个deviceResource,而不是单个deviceResource。还请注意设备配置文件如何描述REST命令(“获取随机数”)以调用以从设备服务获取随机数。

  • Configuring your Device Service(配置设备服务)

现在更新新设备服务的配置。本文档提供了一个新的configuration.toml文件。此配置文件:

  • 更改服务运行的端口,以免与其他设备服务冲突
  • 更改自动事件频率,该频率确定设备服务何时从模拟设备收集数据(每10秒)
  • 在服务启动时设置随机数生成设备的初始配置

下载configuration.toml并将文件保存到〜/ go / src / github.com / edgexfoundry / device-simple / cmd / device-simple / res文件夹(覆盖现有配置文件)。将设备服务的主机地址更改为系统的IP地址。

警告:在configuration.toml中,将主机地址(第7行附近)更改为系统主机的IP地址。这样,当创建新设备时,核心元数据可以回调到新设备服务。由于EdgeX的其余部分(包括核心元数据)将在Docker中运行,因此必须提供Docker网络上主机系统的IP地址,以允许Docker中的元数据从Docker调出到主机上运行的新设备服务系统。

  • Rebuild your Device Service(重建设备服务)

就像您在上面的“构建设备服务”步骤中所做的一样,构建设备简单服务,该服务将创建作为设备服务的可执行程序。在终端窗口中,确保您位于设备简单文件夹(包含Makefile的文件夹)中。通过发出以下命令来构建服务:
cd ~/go/src/github.com/edgexfoundry/device-simple
make build

如果没有错误,那么将创建您的服务并将其放在〜/ go / src / github.com / edgexfoundry / device-simple / cmd / device-simple文件夹中。在文件夹中查找设备简单的可执行文件。

Run your Device Service运行设备服务

允许由Device Service Go SDK构成的新创建的设备服务创建模仿传感器的数据,然后将其发送到EdgeX:

1.按照Docker入门指南来启动所有EdgeX。从包含docker-compose文件的文件夹中,通过以下调用启动EdgeX:

docker-compose up -d

2.在终端窗口中,将目录更改为device-simple的cmd / device-simple文件夹,然后运行新的device-simple服务。

cd ~/go/src/github.com/edgexfoundry/device-simple/cmd/device-simple
./device-simple

这将启动服务,并立即在终端中显示日志条目。

3.使用浏览器,输入以下URL以查看服务正在生成并发送到EdgeX的事件/读取数据:
http://localhost:48080/api/v1/event/device/RandNum-Device01/100
该请求要求核心数据提供与RandNum-Device-01相关的最近100个事件/读数。

posted @ 2020-11-26 13:47  卡卡刘  阅读(1086)  评论(1编辑  收藏  举报