产品
对具有相同功能同一类设备的定义,通过物模型对产品功能进行描述。
物模型
物模型是物理空间中的实体(如传感器、电表、门锁)在云端的数字化表示,从属性、服务和事件三个维度,分别描述了该实体是什么、能做什么、可以对外提供哪些信息。定义了物模型的这三个维度,即完成了产品功能的定义。
功能类型 | 说明 |
---|---|
属性(Property) | 设备可读取和设置的能力。一般用于描述设备运行时的状态,如环境监测设备所读取的当前环境温度等。属性支持 GET 和 SET 请求方式。应用系统可发起对属性的读取和设置请求。 |
服务(Service) | 设备可被外部调用的能力或方法,可设置输入参数和输出参数。产品提供了什么功能供云端调用。相比于属性,服务可通过一条指令实现更复杂的业务逻辑,如执行某项特定的任务。 |
事件(Event) | 设备运行时,主动上报给云端的事件。事件一般包含需要被外部感知和处理的通知信息,可包含多个输出参数。例如,设备发生故障或告警时的温度等。 |
TLS
对物模型的描述
物模型格式定义
{
"productKey": "当前产品的ProductKey"
"properties": [
{
"identifier": "属性唯一标识符(产品下唯一)",
"name": "属性名称",
"accessMode": "属性读写类型:只读(r)或读写(rw)。",
"required": "是否是标准功能的必选属性",
"dataType": {
"type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的值方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)",
"specs": {
"min": "参数最小值(int、float、double类型特有)",
"max": "参数最大值(int、float、double类型特有)",
"unit": "属性单位(int、float、double类型特有,非必填)",
"unitName": "单位名称(int、float、double类型特有,非必填)",
"size": "数组元素的个数,最大512(array类型特有)。",
"step": "步长(text、enum类型无此参数)",
"length": "数据长度,最大10240(text类型特有)。",
"0": "0的值(bool类型特有)",
"1": "1的值(bool类型特有)",
"item": {
"type": "数组元素的类型(array类型特有)"
}
}
}
}
],
"events": [
{
"identifier": "事件唯一标识符(产品下唯一,其中post是默认生成的属性上报事件。)",
"name": "事件名称",
"desc": "事件描述",
"type": "事件类型(info、alert、error)",
"required": "是否是标准功能的必选事件",
"outputData": [
{
"identifier": "参数唯一标识符",
"name": "参数名称",
"dataType": {
"type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的值方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)",
"specs": {
"min": "参数最小值(int、float、double类型特有)",
"max": "参数最大值(int、float、double类型特有)",
"unit": "属性单位(int、float、double类型特有,非必填)",
"unitName": "单位名称(int、float、double类型特有,非必填)",
"size": "数组元素的个数,最大512(array类型特有)。",
"step": "步长(text、enum类型无此参数)",
"length": "数据长度,最大10240(text类型特有)。",
"0": "0的值(bool类型特有)",
"1": "1的值(bool类型特有)",
"item": {
"type": "数组元素的类型(array类型特有)"
}
}
}
}
]
}
],
"services": [
{
"identifier": "服务唯一标识符(产品下唯一,其中set/get是根据属性的accessMode默认生成的服务。)",
"name": "服务名称",
"desc": "服务描述",
"required": "是否是标准功能的必选服务",
"inputData": [
{
"identifier": "入参唯一标识符",
"name": "入参名称",
"dataType": {
"type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的值方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)",
"specs": {
"min": "参数最小值(int、float、double类型特有)",
"max": "参数最大值(int、float、double类型特有)",
"unit": "属性单位(int、float、double类型特有,非必填)",
"unitName": "单位名称(int、float、double类型特有,非必填)",
"size": "数组元素的个数,最大512(array类型特有)。",
"step": "步长(text、enum类型无此参数)",
"length": "数据长度,最大10240(text类型特有)。",
"0": "0的值(bool类型特有)",
"1": "1的值(bool类型特有)",
"item": {
"type": "数组元素的类型(array类型特有)"
}
}
}
}
}
],
"outputData": [
{
"identifier": "出参唯一标识符",
"name": "出参名称",
"dataType": {
"type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)",
"specs": {
"min": "参数最小值(int、float、double类型特有)",
"max": "参数最大值(int、float、double类型特有)",
"unit": "属性单位(int、float、double类型特有,非必填)",
"unitName": "单位名称(int、float、double类型特有,非必填)",
"size": "数组元素的个数,最大512(array类型特有)。",
"step": "步长(text、enum类型无此参数)",
"length": "数据长度,最大10240(text类型特有)。",
"0": "0的值(bool类型特有)",
"1": "1的值(bool类型特有)",
"item": {
"type": "数组元素的类型(array类型特有)"
}
}
}
}
]
}
]
]
}
格式示例
{
"productKey": "RUCRpTBMMgAg8dso"
"properties": [
{
"identifier": "voltage",
"name": "电压",
"dataType": {
"type": "int",
"specs": {
"unit": "",
"min": "0",
"max": "9999999",
"step": "1"
}
},
"accessMode": "r",
"required": "true"
},
{
"identifier": "power",
"name": "瞬时功率",
"dataType": {
"type": "int",
"specs": {
"unit": "",
"min": "0",
"max": "9999999",
"step": "1"
}
},
"accessMode": "r",
"required": "true"
},
{
"identifier": "current",
"name": "电流",
"dataType": {
"type": "int",
"specs": {
"unit": "",
"min": "0",
"max": "9999999",
"step": "1"
}
},
"accessMode": "r",
"required": "true"
}
],
"events": [
{
"identifier": "switchedNotification",
"name": "拉合闸事件",
"desc": "",
"type": "info",
"outputData": [
{
"identifier": "state",
"name": "状态",
"code": null,
"dataType": {
"type": "enum",
"specs": {
"0": "拉闸状态",
"1": "合闸状态"
}
}
}
]
}
],
"services": [
{
"identifier": "getDailyConsumption",
"name": "获取日冻结用量",
"desc": "",
"inputData": [
{
"identifier": "time",
"name": "获取的日冻结日期",
"dataType": {
"type": "date",
"specs": {}
}
}
],
"outputData": [
{
"identifier": "powerConsumption",
"name": "用电量",
"dataType": {
"type": "int",
"specs": {
"unit": "",
"min": "0",
"max": "999999",
"step": "1"
}
}
}
]
},
{
"identifier": "switchOff",
"name": "拉闸",
"desc": "",
"inputData": [
{
}
],
"outputData": []
}
]
}