Skip to main content

定义设备模板

1、概念

设备模板:定义一类设备的特征和行为 包含如下方面:

  • 属性 :与一类设备本身相关联的静态/半静态信息。可表示基本的一些静态属性例如软件版本、硬件版本、序列号等; 也可以表示设备得持久状态,例如设备的开/关状态、温度设定,分为可读可写
  • 遥测 : 带有时间序列的数据测点值。例如电压、电流、功率、温度、湿度等,可用于存储、查询、可视化视图。
  • 命令:可调用的反控命令、决定设备的行为,例如重启设备、ota 升级

2、生成设备模板的方式

从使用方式来说有多种方式生成模板

  • 页面操作点击全新定义生成

    操作指南

  • 标准格式excel 文件导入批量生成(后续支持)

    操作指南

  • 设备数据自学习保存生成

    操作指南

  • 其他设备模板另存为生成

    操作指南

3、生成设备模板API

无论是那一种生成设备模板的方式,不同的是生成设备模板入口和形式,但最终都会承载于如下基础动作相关API

1、创建设备模板对象

设备模板对象承载设备模板的三个定义维度(属性、遥测、命令),支持对象的增删改查。

API字段说明

字段Located in类型描述
namebodystring模板名称
descriptionbodystring模板说明

Example

request
curl --location --request POST '127.0.0.1:31234/v1/templates' \
--header 'Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJ0a2VlbCIsImV4cCI6MTY0NDMwNzczNywic3ViIjoidXNyLTMzNzM3OTQ1YzJiNzE4ZGI0YzMwOWQ2MzNkMmYifQ.agb2dvlXB5nr7uo8lTrI2I_CvwLs4yYP9ye4pQ4_pRww8H_Z0N6HCjIUamlq4TnraBtLnGrvAgHr1LJhFkpYjA' \
--header 'Content-Type: application/json' \
--data-raw '{
"name":"三相UPS",
"description":"低压配电"

}'
response
{
"code": 200,
"msg": "ok",
"data": {
"@type": "type.googleapis.com/api.template.v1.CreateTemplateResponse",
"templateObject": {
"id": "4aa904c9-dfd8-454f-a721-2a8e82f7f43e",
"plugin": "",
"source": "device",
"owner": "usr-33737945c2b718db4c309d633d2f",
"type": "template",
"mappers": [],
"configs": {},
"properties": {
"basicInfo": {
"descriptionc": "低压配电",
"name": "三相UPS"
},
"sysField": {
"_createdAt": 1644302554298715000,
"_id": "4aa904c9-dfd8-454f-a721-2a8e82f7f43e",
"_owner": "usr-33737945c2b718db4c309d633d2f",
"_source": "device",
"_updatedAt": 1644302554298715000
}
}
}
}
}

相关其他操作API

API描述
UpdateTemplate更新模板对象基础信息
GetTemplate获取模板对象
DeleteTemplate删除模板对象
ListTemplate模板对象列表
CreateTemplate创建模板对象

2、创建设备模板属性

设备模板属性承载设备本身相关联的静态/半静态信息的定义,支持设备模板对象中单个属性的增删改查。

API 字段说明

字段Located in类型描述
uidpathstring模板对象id ,表示创建那一个设备模板对象的属性内容
namebodystring属性名称
idbodystring属性ID, 表示属性的唯一标识,放在前面作为key , 可批量添加多条
descriptionbodystring属性说明
typebodystring数据类型["int32","float","double","array","bool","enum","date","struct","string"]
definebodyobject模型的本质是对数据的约束和定义,前面的字段描述的是此数据的基本信息,那么define 对象是对此数据的详细定义和约束,定义和约束内容并不限制且可适应未来不同情况无限扩展。形式为KV。
对于此处约定是定义和约束属性目前按照设计页面先简单约定如下:
define{
“default_value”: xxx, //xxx表示默认值
"rw" : r // r 表示可读,w表示可写, rw 表示可读写
}

根据实际情况如以上define 定义不满足要求时或需要丰富时 ,以kv 的形式扩展define

Example

request
curl --location --request POST '127.0.0.1:31234/v1/templates/iotd-17569b89-4593-4e8d-b091-192ca560ee2f/attribute' \
--header 'Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJ0a2VlbCIsImV4cCI6MTY0Nzg0ODI2Miwic3ViIjoidXNyLWJlYzNmZWQ5YTI2NTBiYzAwNGJmMzQyODFiYjEifQ.lgoU9jQ2NY2ni2FARcyuR67jqiJpKJfx-uHfXdBLQZnvhqL1jGfBA66KhJjR28sP2g66QOtwBqfvfBFkUelA2w' \
--header 'Content-Type: application/json' \
--data-raw '{
"serial-3":{
"name":"序列号3",
"description":"设备批次",
"type":"string",
"define":{
"default_value":"xxxxxxx3",
"rw":"r"
}
},
"serial-N":{
"name":"序列号N",
"description":"设备批次",
"type":"string",
"define":{
"default_value":"xxxxxxxn",
"rw":"w"
}
}
}'
response
{
"code": 200,
"msg": "ok",
"data": {
"@type": "type.googleapis.com/google.protobuf.Empty",
"value": {}
}
}

相关其他操作API

API描述
UpdateTemplateAttribute更新模板对象属性基础信息
GetTemplateAttribute获取模板对象属性
DeleteTemplateAttribute删除模板对象属性
ListTemplateAttribute模板对象属性列表
AddTemplateAttribute创建模板对象属性

3、创建设备模板遥测

设备模板遥测承载设备带有时间序列的数据测点值的定义,支持设备模板对象中单个遥测的增删改查,并支持遥测的扩展配置增删改查。

API 字段说明

字段Located in类型描述
uidpathstring模板对象id ,表示创建那一个设备模板对象的遥测内容
namebodystring遥测名称
idbodystring遥测ID, 表示遥测的唯一标识 ,放在前面作为key , 可批量添加多条
descriptionbodystring遥测说明
typebodystring数据类型["int","float","double","array","bool","enum","date","struct","string"]
definebodyobject模型的本质是对数据的约束和定义,前面的字段描述的是此数据的基本信息,那么define 对象是对此数据的详细定义和约束,定义和约束内容并不限制且可适应未来不同情况无限扩展。形式为KV。
遥测主要有类似电压、电流、功率、温度、湿度等带时间戳的时序值:
定义和约束按照数据类型划分
参考前面平台:
数据类型
int32,float,double的define约束:
{
"max": "100",
"min": "1",
"step": "1",
"unit": "v",
"unitName": "伏"
"ext":{
"xxx":"xxx",
"yyy":"yyy"
}
}
string约束:
{
"length": "100"
"ext":{

}
}
enum约束:

{
"0": "开",
"1": "关"
"2": "无"
}
bool约束

{
"0": "开",
"1": "关"
}
array约束:
{
"length":10,
"elem_type":{
"type":"int"}
}
{
"length: 10,
"elem_type": {
"param1": {
"name":"param1",
"identifier":"param1",
"type":"int32"
"define":{
"max": "100",
"min": "1",
"step": "1",
"unit": "s",
"unitName": "s"
},
"param2":{
"name":"param1",
"identifier":"param2",
"type":"string"
"define":{
"length": "100"
}
}


struct约束:

{
"fields": {
"param1": {
"name":"param1",
"identifier":"param1",
"type":"int32"
"define":{
"max": "100",
"min": "1",
"step": "1",
"unit": "s",
"unitName": "s"
}
},
"param2":{
"name":"param1",
"identifier":"param2",
"type":"string"
"define":{
"length": "100"
}
}
}

}


根据实际情况如以上define 定义不满足要求时或需要丰富时 ,以kv 的形式扩展define

关于扩展配置ext ,数据的约束和定义是随着业务的不同而不同或者有更丰富的需求。故增加此字段满足数据约束和定义的扩展

Example

request
curl --location --request POST '127.0.0.1:31234/v1/templates/iotd-17569b89-4593-4e8d-b091-192ca560ee2f/telemetry' \
--header 'Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJ0a2VlbCIsImV4cCI6MTY0Nzg0ODI2Miwic3ViIjoidXNyLWJlYzNmZWQ5YTI2NTBiYzAwNGJmMzQyODFiYjEifQ.lgoU9jQ2NY2ni2FARcyuR67jqiJpKJfx-uHfXdBLQZnvhqL1jGfBA66KhJjR28sP2g66QOtwBqfvfBFkUelA2w' \
--header 'Content-Type: application/json' \
--data-raw '{
"electricity": {
"name": "电流",
"description": "A相电流",
"type": "int",
"define": {
"min": "0",
"max": "1000",
"unit": "A",
"unitName": "安",
"step": "0.1",
"ext": {
"alias": "EM_BI",
"ratio_of_transformation": "0.001"
}
}
},
"voltage": {
"name": "电压",
"description": "A相电压",
"type": "int",
"define": {
"min": "0",
"max": "1000",
"unit": "v",
"unitName": "伏",
"step": "0.1",
"ext": {
"alias": "EM_BI",
"ratio_of_transformation": "0.001"
}
}
}
}'
response
{
"code": 200,
"msg": "ok",
"data": {
"@type": "type.googleapis.com/google.protobuf.Empty",
"value": {}
}
}

相关其他操作API

API描述
UpdateTemplateTelemetry更新模板对象遥测基础信息
GetTemplateTelemetry获取模板对象遥测
DeleteTemplateTelemetry删除模板对象遥测
ListTemplateTelemetry模板对象遥测列表
AddTemplateTelemetry创建模板对象遥测
AddTemplateTelemetryExt添加遥测扩展配置
UpdateTemplateTelemetryExt更新遥测扩展配置
DeleteTemplateTelemetryExt删除遥测扩展配置

4、创建设备模板命令

设备模板命令承载可调用的反控命令、决定设备的行为,支持设备模板对象中单个命令的增删改查。

API 字段说明

字段Located in类型描述
uidpathstring模板对象id ,表示创建那一个设备模板对象的命令内容
namebodystring命令名称
idbodystring命令ID, 表示属性的唯一标识 ,放在前面作为key, 可批量添加
descriptionbodystring命令说明
typebodystring["struct"] //默认填写 struct 内的子字段用fields 标识 ,input \output 默认也为struct
definebodyobject模型的本质是对数据的约束和定义,前面的字段描述的是此数据的基本信息,那么define 对象是对此数据的详细定义和约束,定义和约束内容并不限制且可适应未来不同情况无限扩展。形式为KV。
对于命令的define 来说 只有存在两个部分,发送的内容input 和 返回的内容output
命令相对于平台来说 本质是提供一个下发数据到设备的通道,对于input 的内容 可简单暂时约定为自由定义的 json对象,相当于自己定义下发的协议(IDC项目中ota 升级也是采用的此方式)


"define": {
"fields": {
"input": {
"name": "输入",
"type": "struct",
"define": {
"fields": {
"gwId": {
"name": "网关id",
"type": "string",
"define": {}
},
"devName": {
"name": "设备名",
"type": "string",
"define": {}
},
"pointName": {
"name": "测点名",
"type": "string",
"define": {}
},
"op": {
"name": "操作",
"type": "string",
"define": {}
},
"value": {
"name": "int值",
"type": "int",
"define": {}
},
"restart":{
"name":"重启指令json",
"type":"struct",
"define":{}
},
"downCmd":{
"name":"下载指令json",
"type":"struct",
"define":{}
}
}
}
},
"output": {
"name": "输出",
"type": "struct",
"define": {
}
}
}
}
根据实际情况如以上define 定义不满足要求时或需要丰富时 ,以kv 的形式扩展define

Example

创建一个输入命令request
curl --location --request POST '127.0.0.1:31234/v1/templates/iotd-29c1fca9-79eb-437b-ba9d-0dc225eb4ce0/command' \
--header 'Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJ0a2VlbCIsImV4cCI6MTY0OTMyNDc4OCwic3ViIjoidXNyLTY5MTE0YjMxNGFhZGJkMTgwMjFkMzY5NmJjNjQifQ.YjaEcF5w1rKW-ecgTzbIy7z8-xSMALH2zL6X6wJaFTIzx_r3LEgAf3BIk-WUJZb_WVlit61q_yuXh06LPifOmA' \
--header 'Content-Type: application/json' \
--data-raw '{
"ota_complex": {
"name": "在线升级",
"description": "在线升级",
"type": "struct",
"define": {
"fields": {
"input": {
"name": "输入",
"type": "struct",
"define": {
"fields": {
"gwId": {
"name": "网关id",
"type": "string",
"define": {}
},
"devName": {
"name": "设备名",
"type": "string",
"define": {}
},
"pointName": {
"name": "测点名",
"type": "string",
"define": {}
},
"op": {
"name": "操作",
"type": "string",
"define": {}
},
"value": {
"name": "int值",
"type": "int",
"define": {}
},
"restart":{
"name":"重启指令json",
"type":"struct",
"define":{}
},
"downCmd":{
"name":"下载指令json",
"type":"struct",
"define":{}
}
}
}
},
"output": {
"name": "输出",
"type": "struct",
"define": {
}
}
}
}
}
}'
response
{
"code": "io.tkeel.SUCCESS",
"msg": "",
"data": {
"@type": "type.googleapis.com/google.protobuf.Empty",
"value": {}
}
}

相关其他操作API

API描述
UpdateTemplateCommand更新模板对象命令基础信息
GetTemplateCommand获取模板对象命令
DeleteTemplateCommand删除模板对象命令
ListTemplateCommand模板对象命令列表
AddTemplateCommand创建模板对象命令

5、设备新增模板内容同步到引用模板

当设备通过自学习、或者手动添加相关属性、遥测、命令后,需要同步到引用的模板时调用此接口

API 字段说明

字段Located in类型描述
uidpathstring设备对象id ,表示那一个设备对象的操作

Example

request
curl --location --request POST '127.0.0.1:31234/v1/devices/iotd-52269038-c0e6-471d-b926-5a3abcaa1b21/configs/saveAsSelfTemplate' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJ0a2VlbCIsImV4cCI6MTY0Nzg2MTkyOSwic3ViIjoidXNyLWJlYzNmZWQ5YTI2NTBiYzAwNGJmMzQyODFiYjEifQ.Ltf4rzTlalN11R_hlicKCYnufgs9ZBhMiE5EV9Im5fpJ-gAyzBalSUsHMitZqKIDMyObLWlsEOsnDXShZAUF3A' \
--data-raw ''
response
{
"code": "io.tkeel.SUCCESS",
"msg": "",
"data": {
"@type": "type.googleapis.com/google.protobuf.Empty",
"value": {}
}
}

6、设备新增模板内容另存为模板

当设备通过自学习、或者手动添加相关属性、遥测、命令后,需要另存为其他模板时调用此接口

API 字段说明

字段Located in类型描述
uidpathstring设备对象id ,表示那一个设备对象的操作
namebodystring新模板的名称
descriptionbodystring新模板的说明

Example

request
curl --location --request POST '127.0.0.1:31234/v1/devices/iotd-52269038-c0e6-471d-b926-5a3abcaa1b21/configs/saveAsOtherTemplate' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJ0a2VlbCIsImV4cCI6MTY0Nzg2MTkyOSwic3ViIjoidXNyLWJlYzNmZWQ5YTI2NTBiYzAwNGJmMzQyODFiYjEifQ.Ltf4rzTlalN11R_hlicKCYnufgs9ZBhMiE5EV9Im5fpJ-gAyzBalSUsHMitZqKIDMyObLWlsEOsnDXShZAUF3A' \
--data-raw '{
"name":"tempale_saveASother",
"description":"xxxxx"
}'
response
{
"code": "io.tkeel.SUCCESS",
"msg": "",
"data": {
"@type": "type.googleapis.com/google.protobuf.Empty",
"value": {}
}
}