1

Device Services - Virtual Device

 2 years ago
source link: https://ahaedgar.github.io/2018/09/13/DeviceServices-VirtualDevice/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Device Services - Virtual Device

发表于 2018-09-13

| 分类于 Edge Computing

| 0

| 阅读次数:

字数统计: 2,079

Device Services - Virtual Device:

  • Introduction to Virtual Device
  • High Level Interaction Diagram
  • Data Dictionary
  • The Pipe and Filter

1. Introduction to Virtual Device

虚拟设备服务模拟不同类型的设备以生成到Core Data微服务的事件和读数,用户通过Command微服务发送命令并获得响应。在没有任何实际设备的情况下执行功能或性能测试时,虚拟设备服务的这些功能非常有用。

虚拟设备服务依赖于Core Data和Metadata微服务,因为初始化过程需要检查或注册配置文件,设备和值描述符。因此,Core Data和Metadata微服务必须在虚拟设备服务初始化之前完全启动。在虚拟设备服务初始化过程开始时,该进程向Core Data和Metadata Microservices发送ping请求,以验证它们的状态,直到它们完全启动。固定超时限制为600秒。600秒后,如果Core Data和Metadata Microservices尚未完全启动,则初始化过程将失败。

当虚拟设备服务启动时,初始化过程从YAML文件加载ValueDescriptor,DeviceService和DeviceProfile的定义,并在Metadata微服务中创建它们。存在一些默认的YAML文件,用户也可以创建自己的文件。有关更多详细信息,请参阅设备配置文件定义部分(在此页面上)。此外,虚拟设备服务还为Metadata微服务提供回调API,以管理设备实例。根据DeviceProfile定义中的GET命令,有一个H2数据库(内存中)存储虚拟设备中的资源,称为“虚拟资源”。

2. Virtual Resources Example

启动后,虚拟设备服务读取H2数据库并定期将当前值作为事件发送到核心数据微服务。默认频率为15秒,可以从配置文件中修改。在每个收集周期之前,以随机值重新生成虚拟资源的当前值,因此每个事件中的读取应该是不同的。

虚拟设备服务为命令和控制微服务提供API,读取H2数据库,并返回GET命令的当前值。此时,虚拟设备服务支持两个特殊的PUT命令:“enableRandomization”和“collectionFrequency。”这些命令修改H2数据库中特定虚拟资源的“ENABLE_RANDOMIZATION”和“COLLECTION_FREQUENCY”列。

For example, sending an HTTP PUT method to http://localhost:48082/device/56b1acf1d66f9c9762581ea4/command/56b1acedd66f9c9762581e9d/put/0 with the sample payload:

{

"enableRandomization": false,
"collectionFrequency": 6

}

修改其命令ID为“56b1acedd66f9c9762581e9d”且设备ID为“56b1acf1d66f9c9762581ea4”的虚拟资源记录。通过将“ENABLE_RANDOMIZATION”列修改为FALSE,虚拟资源的值将不再重新生成随机值。通过修改“COLLECTION_FREQUENCY”列,收集频率将在下一个收集周期后更改。

They both can be modified manually through H2 Console: http://localhost:49990/console Modify the “JDBC URL” to jdbc:h2:mem:testdb, and click on “Connect.”

3. Special Configuration

虚拟设备微服务确实包含一些独特的配置属性,这些属性通常在开发(例如从Eclipse运行时)和同一服务的容器化版本(即Docker容器)之间发生变化。以下是在运行虚拟设备服务之前应该调查的唯一属性列表,以便更好地了解它在您的环境中的工作方式:

用于定位设备配置文件YAML文件的路径,用于定义由设备服务管理的虚拟设备(请参阅下面的设备配置文件定义部分)。

application.device-profile-paths=./bacnet_sample_profiles,./modbus_sample_profiles

从上述目录中的YAML配置文件到虚拟设备服务的指示器,当设置为true时自动为每个配置文件创建一个设备。

application.auto-create-device = true在开发时,每次服务启动时重新启动虚拟设备服务并使用干净的元数据数据库通常是有利的。下面的属性指示设备服务在关闭时,是否应清除数据库中的现有虚拟设备,以便在服务启动备份时提供干净的环境。通常设置为true表示开发,false表示运行时/演示环境。

application.auto-cleanup=true

虚拟设备服务的调度程序应该以秒为单位从虚拟设备收集数据的频率。

application.collection-frequency=15
Service Name and Host Name

在EdgeX设备服务中,服务名称(由application.properties文件或Consul配置中的service.name键表示)是设备服务对象的标识。EdgeX使用该名称将有关服务的所有信息(特别是计划,设备所有权等)归因于此名称。但是,service.host参数用于描述如何与服务进行交互。根据您的操作模式,适用以下配置服务主机的准则。

  • 部署模式(运行Docker中的所有容器):

服务主机(由application.properties文件或Consul配置中的service.host key表示)是服务绑定到的实体的DNS或IP地址网络条目(容器,机器等)并可从其他微服务中获得。这允许确定服务的完整位置URL。在Docker环境中,主机名是运行微服务的Docker容器的名称(例如edgex-device-virtual)。

对所有服务使用service.host = $ {service.name}和docker-compose文件(默认)。

重要说明

请务必使用Docker Compose和docker-compose文件(在developer-scripts repos中找到)来显示所有服务的容器。Docker Compose为您建立网络和容器命名,否则如果手动启动容器则可能很难做到并且容易出错。

  • 开发人员模式(本机运行所有内容):

在本机运行服务时,服务名称将不会像在Docker环境中那样解析为DNS条目。

对所有服务使用service.host = localhost(默认)。

  • 混合模式(使用Docker部署的其余服务本机运行某些服务):

使用service.host = <主机IP地址>进行本机服务(手动配置)和docker-compose文件以显示容器化服务(默认)。确保通过使用docker-compose文件创建本地服务的可寻址对象不会意外地创建,否则可能会发生冲突。此问题将在未来版本中得到解决。

4. System Architecture

虚拟设备服务采用普通的MVC设计模式,将逻辑分成不同的层。

System Architecture Graphic

接口层 -与其他微服务交互。控制器提供RESTful API。该实现位于org.edgexfoundry.device.virtual.controller包中。计划收集任务是一组定期执行的异步任务,它们是为每个虚拟资源(GET命令)创建的。有关详细实现,请参阅org.edgexfoundry.device.virtual.scheduling包。此外,org.edgexfoundry.device.virtual.scheduling.Scheduler从Meta Data Micro Service读取Schedule和ScheduleEvent并安排收集任务。

任务执行逻辑位于org.edgexfoundry.device.virtual.service.impl.CollectionTaskExecutorImpl中,任务创建行为位于org.edgexfoundry.device.virtual.service.impl.VirtualResourceManagerImpl.createDefaultRecords()中。

服务层 -处理业务逻辑,例如,执行收集任务和命令,管理配置文件和设备等。有关更多详细信息,请参阅org.edgexfoundry.device.virtual.service.impl包。

DAO层 -处理协议访问。对于虚拟设备服务,org.edgexfoundry.device.virtual.dao包中的Spring Data JPA接口。Spring框架将处理访问H2 DB的通信工作。

数据层 -an H2 DB用于模拟设备资源。

5. Device Profile Definition

如果结构符合“设备和设备配置文件模型”,则用户可以以YAML格式定义任何虚拟设备配置文件。通过将文件路径分配给应用程序属性“application.device-profile-paths”,虚拟设备服务会加载此文件夹下的所有YAML文件,并且此属性接受以逗号(,)分隔的多个值。例如,以下设置会使虚拟设备服务加载./bacnet_sample_profiles和./modbus_sample_profiles文件夹下的所有YAML文件。

除了Profile Definition之外,ValueDescriptors定义在配置文件的“deviceResources.properties”部分。该结构需要符合“设备配置文件”中的ProfileProperty,并且将在设备创建回调过程中创建ValueDescriptors并将其发送到Core Data Micro Service。

通过分配应用程序属性“application.auto-create-device”= true(默认值为true),虚拟设备服务在启动期间自动为每个配置文件创建设备实例,并且设备实例开始向Core发送事件和读数数据微服务。

6. Data Model

Virtual Device Service Data Model–Device and Device Profile Model

Virtual Device Service Data Model–Command Model

VirtualResource

VirtualResource is the data object generated from Device instances and persisted in H2 database.

7. Data Dictionary

------ 本文结束感谢您的阅读 ------

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK