luoxin 2a73a858c1 提交说明 vor 1 Jahr
..
src 2a73a858c1 提交说明 vor 1 Jahr
README.md 2a73a858c1 提交说明 vor 1 Jahr
pom.xml 2a73a858c1 提交说明 vor 1 Jahr

README.md

物模块

统一定义物管理相关接口以及相应的默认实现。

名称解释:

  1. 物类型(ThingType): 对一系列业务上可能需要的功能的定义,例如: 设备,建筑,楼层,车间.都可以定义为物。
  2. 物模版(ThingsTemplate): 对一类物的统一定义,用于统一配置物模型等通用配置。
  3. 物模型(ThingMetadata): 对物的描述,主要由属性,功能,事件组成。
  4. 物实例(Thing): 具体的某一个物,通常与现实中的一个物体对应。
  5. 物注册中心(ThingsRegistry): 统一管理物模版和物实例配置等信息。
  6. 物消息(ThingMessage): 物消息的统一定义,如: 属性上报,读写属性,调用功能等。
  7. 连接器(ThingsConnector),用于提供对物消息的支持, 通过不同的连接器来实现自定义的消息来源,例如: 从另外的物中订阅实时属性,并经过计算后作为新消息,消息最终会以 事件驱动的方式传递到内部的事件总线,通过事件总线可以灵活的处理这些消息。
  8. 消息转换器(ThingMessageConverter),用于对连接器返回的数据或者对将要下发对指令进行转换,例如: 定义消息模版,在消息中可以使用表达式来获取上游的变量来实现动态指令参数.
  9. RPC支持(ThingRpcSupport),用于提供物RPC的支持,例如: 读写属性,调用功能.

最佳实践

物是一个虚拟的概念,在实际应用时,应该明确定义物类型,在使用时,建议基于对应的物类型进行相应的业务功能实现. 例如: 平台根据实际场景,定义好固定的物类型,如: 设备(平台默认已内置了此类型),建筑物,楼层,房间. 并声明这些物类型所需要的配置信息,标签定义,这些定义可以由前端写死,也可以由后端动态维护,前端根据配置动态 渲染对应的页面. 最终调用平台统一的物管理接口来实现管理.

内置连接器

此模版内置常用的连接器,自定义连接器请实现接口ThingsConnectorProvider

物属性

用于连接物的属性,通常用于将其他物的属性作为当前物的属性值. 实现类ThingPropertiesMessageConnector

支持的物模型类型: 属性 将指定的物的属性转为新的物属性消息(ThingReportPropertyMessage)

配置格式:

{
  "provider": "thing-property",
  "configuration": {
    "thingType": "物类型ID",
    "templateId": "模版ID",
    "thingId": "物实例ID",
    "properties": [
      "属性ID"
    ],
     "converter": {
        "provider": "",
        "configuration": {
           //见消息转换器说明
        }
     },
    "filter": [
      {
        //列字段,与ThingEventMessage一致,data表示事件数据.
        "column": "properties.temp",
        //条件类型
        "termType": "gt",
         //条件值
        "value": "10"
      }
    ]
  }
}

物事件

用于连接物的属性,通常用于将其他物的事件作为当前物的事件值. 实现类ThingEventMessageConnector

支持的物模型类型: 事件 将指定的物的事件转为新的物事件消息(ThingEventMessage)

支持条件过滤: 条件类型见 ReactorUtils.TermTypeSupport

配置格式:

{
  "provider": "thing-event",
  "configuration": {
    "thingType": "物类型ID",
    "templateId": "模版ID",
    "thingId": "物实例ID",
    "event": "事件物模型ID",
    "converter": {
       //见消息转换器说明
    },
    "filter": [
      {
        //列字段,与ThingEventMessage一致,data表示事件数据.
        "column": "data.temp",
        //条件类型
        "termType": "gt",
        //条件值
        "value": "10"
      }
    ]
  }
}

规则计算

指定源连接器,使用规则计算后的值作为新的物消息. 实现类ComputeThingsConnector.

支持的物模型类型:

  1. 属性 将规则计算后的值转为属性消息(ThingReportPropertyMessage)
  2. 事件 将规则计算后的值转为事件消息(ThingEventMessage)

配置格式:

{
  "provider": "compute",
  "configuration": {
    "source": {
      "provider": "连接器ID,可以使用任意其他连接器作为源",
      "configuration": {
      }
    },
    "rule": {
      "windowType": "值为time或num ;当使用窗口时设置",
      "window": {
        "span": "数字值,窗口大小",
        "every": "数字值,窗口间隔"
      },
      "script": "groovy脚本",
      "aggType": "聚合类型,当使用窗口时不能为空,值为:count, sum, avg, max, min, first, last, range, median, geometricMean, mean, variance, dev, slope"
    }
  }
}

组合连接器

指定多个连接器,将这些连接器连接在一起. 实现类CompositeThingsConnector.

配置格式:

{
  "provider": "composite",
  "configuration": {
    "connectors": [
      {
        "provider": "连接器ID,可以使用任意其他连接器作为源",
        "configuration": {
        }
      }
    ]
  }
}

RPC

使用RPC作为连接器,通常用于功能调用时.

配置格式:

{
  "provider": "rpc",
  "configuration": {
    "provider": "RPC Provider ID,见内置RPC支持说明",
    "configuration": {
    }
  }
}

内置RPC支持

用于自定义对物功能调用时的操作. 自定义RPC支持请实现接口ThingsRpcSupportProvider

物RPC

调用其他物的RPC操作,如果: 读取其他物的属性

配置格式:

{
  "provider": "thing",
  "configuration": {
    "thingType": "物类型",
    "thingId": "物实例ID",
    "message": {
      "messageType": "INVOKE_FUNCTION 不同的类型消息格式不同",
      "inputs": [
        {
          "name": "arg0",
          "value": "test可以使用表达式,比如: ${value},表达式的变量来自调用功能时传入的参数."
        }
      ]
    }
  }
}

组合RPC

组合执行多个RPC操作

配置格式:

{
  "provider": "composite",
  "configuration": {
    //是否并行执行
    "parallel": true,
    //某个rpc执行失败时是否中断执行
    "interruptOnError": false,
    "actions": [
      {
        "provider": "thing",
        "configuration": {
          "thingType": "device",
          "thingId": "xxxx",
          "message": {
            "messageType": "READ_PROPERTY",
            "properties": [
              "xxx,串行执行时,这里可以使用上一个rpc执行结果的返回值作为变量"
            ]
          }
        }
      }
    ],
    "converter": {
      "provider": "结果转换方式,见消息转换器说明",
      "configuration": {
      }
    }
  }
}

内置消息转换器

用于对物消息进行转换,自定义转换器请实现接口: ThingMessageConverterProvider

映射转换器

使用映射表对消息进行字段转换,支持消息类型: 属性相关消息,事件消息,功能调用相关消息.

配置格式:


{
  "provider": "mapping",
  "configuration": {
    "mappings": [
      {
        "source": "来源字段,支持表达式"
      },
      {
        "target": "转换为新的字段,支持表达式"
      }
    ]
  }
}

模版转换器

使用消息模版转换为固定的消息,支持消息类型: 属性相关消息,事件消息,功能调用相关消息.

配置格式:


{
  "provider": "template",
  "configuration": {
    "messageType": "INVOKE_FUNCTION",
    "inputs": [
      {
        "name": "arg0",
        "value": "1"
      }
    ]
  }
}