Mapper-Framework

Mapper-Framework

Mapper-Framework 提供全新Mapper开发框架,集成DMI管理面与数据面能力,允许设备在边缘或云端处理数据,提高设备数据管理的灵活性。 Mapper-Framework可以自动生成用户的Mapper项目,简化Mapper用户设计和实现的复杂度,提高Mapper开发效率。

架构

mapper framework

  1. Mapper-Framework提供数据推送接口用于把设备数据推送到用户应用程序,目的地规则通过CRD定义。
  2. Mapper-Framework提供数据库接口,可以将数据保存到数据库中,通过CRD定义推送规则。
  3. Mapper-Framework提供了REST API,这些API可以访问设备来获取数据。API不支持更改设备属性,因为这会导致云端和边缘之间的消息不一致。
  4. Mapper-Framework提供设备驱动接口来初始化设备、获取设备数据。
  5. Mapper-Framework提供Makefile,可以通过一个命令生成一个Mapper。

DMI设备管理面和设备数据面可以通过Mapper-Framework实现,开发者只需要关注设备驱动即可。Mapper-Framework中灰色部分(Driver)表示需要开发者实现。 我们定义了接口DevPanel来管理设备,当添加功能时会添加新的接口。

实现细节

数据流

dmi datapanel

数据标准化

为了在接口模块之间传输数据,需要数据标准化。这些数据应包含数据生成的必要信息。

标准化数据定义是DataModel

数据推送

数据推送模块可以根据CRD中定义的目的地规则把设备数据至可达的用户消费应用,为了满足新的要求,当前v1beta1 CRD在Device Instance的定义中添加新字段 PushMethod

定义Mapper将数据推送到用户应用程序的配置文件示例如下:

  1. apiVersion: devices.kubeedge.io/v1beta1
  2. kind: Device
  3. metadata:
  4. name: beta1-device
  5. spec:
  6. deviceModelRef:
  7. name: beta1-model
  8. nodeName: worker-node1
  9. properties:
  10. - name: temp
  11. pushMethod:
  12. mqtt:
  13. address: tcp://127.0.0.1:1883
  14. topic: temp
  15. qos: 0
  16. retained: false
  17. ...

目前的CRD定义中支持MQTT和HTTP协议,上报周期由DeviceProperty.ReportCycle定义(默认1秒上报一次)。 当Mapper执行时,会自动解析pushMethod字段的值并执行DataPanel接口来推送数据。未来DataPanel将会增加更多接口,保证数据安全。

数据库

数据库模块可以根据DBMethod定义的目标规则将设备数据存储到数据库。定义Mapper将数据推送到用户数据库的配置文件示例如下:

  1. apiVersion: devices.kubeedge.io/v1beta1
  2. kind: Device
  3. metadata:
  4. name: beta1-device
  5. spec:
  6. deviceModelRef:
  7. name: beta1-model
  8. nodeName: worker-node1
  9. properties:
  10. - name: temp
  11. pushMethod:
  12. dbMethod:
  13. influxdb2:
  14. influxdb2ClientConfig:
  15. url: http://127.0.0.1:8086
  16. org: test-org
  17. bucket: test-bucket
  18. influxdb2DataConfig:
  19. measurement: stat
  20. tag:
  21. unit: temperature
  22. fieldKey: beta1test
  23. ...

现在我们提供了Influx2、Redis、TDengine数据库接口,后续我们会添加更多的数据库。

拉取数据

我们创建HTTP服务用以提供API拉取功能,支持直接从设备拉取设备数据。下面列出的 URL 以本地 IP 的形式给出。你可以从Mapper可访问的任何网络使用这些服务。

默认情况下启用端口“7777”。

deviceInstance-ID 根据你自己的 CRD 定义。

propertyName 根据你自己的 CRD 定义。

Ping

  1. 检测RESTful服务是否正常启动
    Method: GET
    Url: https://127.0.0.1:7777/api/v1/ping
    Response:

    1. {
    2. "apiVersion": "v1",
    3. "statusCode": 200,
    4. "timeStamp": "2023-08-18T09:57:29+08:00",
    5. "Message": "This is v1 API, the server is running normally."
    6. }

设备数据处理

  1. 获取设备数据
    Method=GET
    Url: https://127.0.0.1:7777/api/v1/device/deviceInstance-ID/propertyName Response:

    1. {
    2. "apiVersion": "v1",
    3. "statusCode": 200,
    4. "timeStamp": "2023-08-18T09:57:35+08:00",
    5. "Data": {
    6. "DeviceName": "deviceInstance-ID",
    7. "PropertyName": "propertyName",
    8. "Value": "data",
    9. "Type": "dataType",
    10. "CollectTimeStamp": 1692323855044
    11. }
    12. }

设备元数据

  1. 获取设备模型
    Method=GET
    Url: https://127.0.0.1:7777/api/v1/meta/model/deviceInstance-ID
    Response:

    1. {
    2. "apiVersion": "v1",
    3. "statusCode": 200,
    4. "timeStamp": "2023-08-18T09:57:37+08:00",
    5. "name": "model-name",
    6. "properties": [
    7. {
    8. "name": "propertyName-1",
    9. "dataType": "property data type",
    10. "description": "property description",
    11. "accessMode": "ReadWrite",
    12. "defaultValue": 100
    13. },
    14. ...
    15. ]
    16. }