二、物模型
什么是物模型
物模型是物联网平台为产品定义的数据模型,用于描述产品的功能。本文介绍物模型相关概念和使用限制。
功能说明
物模型是物理空间中的实体(如传感器、车载装置、楼宇、工厂等)在云端的数字化表示,从属性、服务和事件三个维度,分别描述了该实体是什么、能做什么、可以对外提供哪些信息。定义了物模型的这三个维度,即完成了产品功能的定义。
功能类型 | 说明 |
属性(Property) | 用于描述设备运行时具体信息和状态。
例如,环境监测设备所读取的当前环境温度、智能灯开关状态、电风扇风力等级等。 属性可分为读写和只读两种类型。读写类型支持读取和设置属性值,只读类型仅支持读取属性值。 |
服务(Service) | 指设备可供外部调用的指令或方法。服务调用中可设置输入和输出参数。输入参数是服务执行时的参数,输出参数是服务执行后的结果。
相比于属性,服务可通过一条指令实现更复杂的业务逻辑,例如执行某项特定的任务。 服务分为异步和同步两种调用方式。 |
事件(Event) | 设备运行时,主动上报给云端的信息,一般包含需要被外部感知和处理的信息、告警和故障。事件中可包含多个输出参数。
例如,某项任务完成后的通知信息;设备发生故障时的温度、时间信息;设备告警时的运行状态等。 事件可以被订阅和推送。 |
物联网平台支持为产品定义多组功能(属性、服务和事件)。一组功能定义的集合,就是一个物模型模块。多个物模型模块,彼此互不影响。
物模型模块功能,解决了工业场景中复杂的设备建模,便于在同一产品下,开发不同功能的设备。
例如,电暖扇产品的功能属性有电源开关、档位(高、中、低)和室内温度,您可以在一个模块添加前2个属性,在另一个模块添加三个属性,然后分别在不同设备端,针对不同物模型模块功能进行开发。此时,该产品下不同设备就可以实现不同功能。
物联网平台已提供默认模块,您可根据需要新增自定义模块。每个产品中默认模块和自定义模块总个数不能超过200个。
使用说明
物联网平台通过定义一种物的描述语言来描述物模型模块和功能,称为TSL(Thing Specification Language)。
物模型模块下定义的功能不需要同时包含属性、服务和事件,按需配置即可。
物模型TSL文件格式为JSON。您可在物联网平台控制台产品详情页面,单击功能定义页签,单击物模型TSL,查看或导出JSON格式的TSL。相关字段说明,请参见物模型TSL字段说明。
物联网平台支持单个和批量添加物模型。批量导入时,您可自定义物模型TSL文件,编写要求,请参见下文。
物模型文件后缀名为.json
;文件内容必须符合JSON格式;文件大小不能超过512 KB;文件中有效字符数量不能超过256 KB(256*1024个字符)。
有效字符,指JSON格式内容中,除换行和对齐字符之外的字符。
物模型TSL字段说明
为了完整展示TSL的结构,以下示例中包含所有参数,不代表实际使用中可能出现的组合。参数后的文字为参数说明,非参数值。各参数的使用场景,请参见参数说明。
{
"schema": "物模型结构定义的访问URL。",
"profile": {
"productKey": "当前产品的ProductKey。"
},
"properties": [
{
"identifier": "属性唯一标识符(物模型模块下唯一)。",
"name": "属性名称",
"accessMode": "属性读写类型:只读(r)或读写(rw)。",
"required": "是否是标准功能的必选属性:是(true),否(false)。",
"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": "是否是标准功能的必选事件:是(true),否(false)。",
"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类型特有)。"
}
}
}
}
],
"method": "事件对应的方法名称(根据identifier生成)。"
}
],
"services": [
{
"identifier": "服务唯一标识符(物模型模块下唯一,其中set/get是根据属性的accessMode默认生成的服务)。",
"name": "服务名称。",
"desc": "服务描述。",
"required": "是否是标准功能的必选服务:是(true),否(false)。",
"callType": "async(异步调用)或sync(同步调用)。",
"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类型特有)。"
}
}
}
}
],
"method": "服务对应的方法名称(根据identifier生成)。"
}
],
//仅自定义模块的TSL中有以下参数。
"functionBlockId": "自定义模块的唯一标识符,模块ID。",
"functionBlockName": "自定义模块名称。",
//当产品下添加了自定义模块,默认模块TSL中会包含以下参数,表示已添加的自定义模块列表。
"functionBlocks": [
{
"functionBlockId": "自定义模块的唯一标识符,模块ID。",
"functionBlockName": "自定义模块名称。",
"productKey": "产品ProductKey。"
}
]
}
无评论