阅读 301

edgex 创建device-service

2.jpg

edgexfoundry 介绍

EdgeX Foundry用一句话来介绍,就是Linux基金会下的硬件和操作系统无关的开源中立的边缘计算微服务框架,用于统一工业物联网边缘计算解决方案的生态系统。

通过sdk创建设备服务

我们自己创建得device-service可再edgex官方提供得device-sdk-go的基础上改造得到。

创建一个设备服务主要是要实现ProtocolDriver中给出的接口,在这个实例中进入到driver目录,主要是实现Initialize、HandleReadCommands、HandleWriteCommands三个函数。

  • Initialize
Initialize(lc logger.LoggingClient, asyncCh chan<- *dsModels.AsyncValues, deviceCh chan<- []dsModels.DiscoveredDevice) error 
复制代码

lc应该是日志系统,asynCh是一个通道,我们通过将我们想上传的值赋予给asynCh就可以上传至coredata,deviceCh应该是用来自动发现设备的。

  • HandleReadCommands
func (s *SimpleDriver) HandleReadCommands(deviceName string, protocols map[string]contract.ProtocolProperties, reqs []dsModels.CommandRequest) (res []*dsModels.CommandValue, err error)
复制代码

该函数的作用是在用户通过core-command发送get命令时调用,行为是像物理设备发送一次读命令请求。

  • HandleWriteCommands
func (s *SimpleDriver) HandleWriteCommands(deviceName string, protocols map[string]contract.ProtocolProperties, reqs []dsModels.CommandRequest,
	params []*dsModels.CommandValue) error {
复制代码

用法基本与HandleRandomCommends一致,通过post上传的参数放到了params里面。

目录结构及配置文件介绍

目录结构如下图所示:

1617245162(1).png

  • configuration.toml介绍

主要是用来配置device service的地址和端口号,注册到EdgeX服务中以及设备的预定义。部署在服务器上,则需要将[Service]中的Host修改成服务器的ip地址,[Registry], [Clients], [Device], [Logging]等可以不需要修改。

找到[[DeviceList]]该部分是用来预定义设备的

Name是你创建的Device的名字

Profile是用来创建Device的配置文件,即profile.yml中name的值

[[DeviceList.AutoEvents]]是用来自动发送Command请求的,对应profile.yml是调用get命令,对应SDK接口是调用HandleReadCommand函数

Frequency 是发送请求的频率

Resource 是发送请求对应的数据类型,与proflie.yml中的deviceResources对应。

  • Profile.yml介绍

Profile.yml是用来定义Device的数据类型以及通过core-Command来对device发送命令.

deviceResources,deviceCommands与coreCommands三者的关系:

deviceResources中的值是定义Device上传到deviceService中数据的类型。

coreComands定义了核心服务core-command能对设备进行的操作,包括读(get)和写(put)。

deviceCommands是联系coreCommands与deviceResources的桥梁,他定义了coreCommands操作设备时对哪些数值类型进行操作。

1617246170(1).png

第一行name对应configuration.toml中DeviceList中的Name,是这个Profile的“名字”

deviceResources中name: “SwitchButton”代表这个设备的一个数据类型的名称

下面的 properties定义了SwitchButton的基本数值类型

1617247129(1).png

corecommands 定义了core-command对设备操作的两种方法,一个是读(get),一个是写(put)

get中 expectedValues表示希望读取到的值的类型,与deviceResources中name目录下的名称一致

put中parameterNames表示传入的参数的值的类型,也与deviceResources中name目录下名称一致

1617247150(1).png

deviceCommands连接deviceResources与coreCommands

name与 coreCommands中name一致

在coreCommands中定义了get则需要get, 定义了put则需要定义set。

deviceResource与deviceResources中name一致

通过Configuration.toml的预定义Device和Simple.yaml文件就可以生成一个Device并且注册到core-metadata中去,当然也可以自己通过Simple.yaml手动注册一个Device

文章分类
人工智能
文章标签