物模型

物模型指将物理空间中的实体数字化,并在云端构建该实体的数据模型。在物联网平台中,定义物模型即定义产品功能。完成功能定义后,系统将自动生成该产品的物模型。物模型描述产品是什么、能做什么、可以对外提供哪些服务。

物模型TSL(Thing Specification Language)。是一个JSON格式的文件。它是物理空间中的实体,如传感器、车载装置、楼宇、工厂等在云端的数字化表示,从属性、服务和事件三个维度,分别描述了该实体是什么、能做什么、可以对外提供哪些信息。定义了这三个维度,即完成了产品功能的定义。

物模型将产品功能类型分为三类:属性、服务和事件。定义了这三类功能,即完成了物模型的定义。

功能类型 说明
属性(Property) 一般用于描述设备运行时的状态,如环境监测设备所读取的当前环境温度等。属性支持GET和SET请求方式。应用系统可发起对属性的读取和设置请求。
服务(Service) 设备可被外部调用的能力或方法,可设置输入参数和输出参数。相比于属性,服务可通过一条指令实现更复杂的业务逻辑,如执行某项特定的任务。
事件(Event) 设备运行时的事件。事件一般包含需要被外部感知和处理的通知信息,可包含多个输出参数。如,某项任务完成的信息,或者设备发生故障或告警时的温度等,事件可以被订阅和推送。

物模型格式

您可以在产品的功能定义页面,单击物模型TSL,查看JSON格式的TSL。

物模型的JSON字段结构如下:

{
    "schema": "物模型结构定义的访问URL",
    "profile": {
        "productKey": "产品ProductKey"
    },
    "properties": [
        {
            "identifier": "属性唯一标识符(产品下唯一)",
            "name": "属性名称",
            "accessMode": "属性读写类型:只读(r)或读写(rw)。",
            "required": "是否是标准功能的必选属性",
            "dataType": {
                "type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型)、struct(结构体类型,可包含前面7种类型)、array(数组类型,支持int/double/float/text/struct)",
                "specs": {
                    "min": "参数最小值(int、float、double类型特有)",
                    "max": "参数最大值(int、float、double类型特有)",
                    "unit": "属性单位",
                    "unitName": "单位名称",
                    "size": "数组大小,默认最大128(数组特有)。",
                    "step": "步长,字符串类型。",
                    "item": {
                        "type": "数组元素的类型"
                    }
                }
            }
        }
    ],
    "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类型)、struct(结构体类型,可包含前面7种类型)、array(数组类型,支持int/double/float/text/struct)",
                        "specs": {
                            "min": "参数最小值(int、float、double类型特有)",
                            "max": "参数最大值(int、float、double类型特有)",
                            "unit": "属性单位",
                            "unitName": "单位名称",
                            "size": "数组大小,默认最大128(数组特有)。",
                            "step": "步长,字符串类型。",
                            "item": {
                                "type": "数组元素的类型"
                            }
                        }
                    }
                }
            ],
            "method": "事件对应的方法名称(根据identifier生成)"
        }
    ],
    "services": [
        {
            "identifier": "服务唯一标识符(产品下唯一,其中set/get是根据属性的accessMode默认生成的服务。)",
            "name": "服务名称",
            "desc": "服务描述",
            "required": "是否是标准功能的必选服务",
            "callType": "async(异步调用)或sync(同步调用)",
            "inputData": [
                {
                    "identifier": "入参唯一标识符",
                    "name": "入参名称",
                    "dataType": {
                        "type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型)、struct(结构体类型,可包含前面7种类型)、array(数组类型,支持int/double/float/text/struct)",
                        "specs": {
                            "min": "参数最小值(int、float、double类型特有)",
                            "max": "参数最大值(int、float、double类型特有)",
                            "unit": "属性单位",
                            "unitName": "单位名称",
                            "size": "数组大小,默认最大128(数组特有)。",
                            "step": "步长,字符串类型。",
                            "item": {
                                "type": "数组元素的类型"
                            }
                        }
                    }
                }
            ],
            "outputData": [
                {
                    "identifier": "出参唯一标识符",
                    "name": "出参名称",
                    "dataType": {
                        "type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型)、struct(结构体类型,可包含前面7种类型)、array(数组类型,支持int/double/float/text/struct)",
                        "specs": {
                            "min": "参数最小值(int、float、double类型特有)",
                            "max": "参数最大值(int、float、 double类型特有)",
                            "unit": "属性单位",
                            "unitName": "单位名称",
                            "size": "数组大小,默认最大128(数组特有)。",
                            "step": "步长,字符串类型。",
                            "item": {
                                "type": "数组元素的类型(数组特有)"
                            }
                        }
                    }
                }
            ],
            "method": "服务对应的方法名称(根据identifier生成)"
        }
    ]
}

添加物模型

操作步骤
  1. 登录渊联物联平台。

  2. 在左侧导航栏,选择设备管理 > 产品

  3. 产品页面产品列表中,单击产品对应的查看操作按钮。

  4. 在产品详情页,单击功能定义页签,再单击添加自定义功能

    选择添加自定义功能。您可以为产品自定义属性、服务和事件。

    • 自定义属性:在添加自定义功能对话框,选择功能类型为属性。设置参数完成后,单击确认

image-20231107121410644

属性参数设置说明如下表。

参数 描述
功能名称 属性的名称,例如用电量。同一产品下功能名称不能重复。支持中文、大小写字母、数字、短划线和下划线,且必须以中文、英文或数字开头,不超过30个字符。输入功能名称时,将从标准功能库中筛选匹配的标准功能供您选择,您可以参考标准功能进行配置。
标识符 属性唯一标识符,在产品中具有唯一性。即Yelink JSON格式中的identifier的值,作为设备上报该属性数据的Key,云端根据该标识符校验是否接收数据。可包含英文、数字、下划线,长度不超过50个字符,例如PowerComsuption。
说明 不能用以下系统保留参数作为标识符:set、get、post、time、value。
数据类型 int32:32位整型。需定义取值范围、步长和单位符号。
float:单精度浮点型。需定义取值范围、步长和单位符号。
double:双精度浮点型。需定义取值范围、步长和单位符号。enum:枚举型。定义枚举项的参数值和参数描述,例如1-加热模式、2-制冷模式等。
bool:布尔型。采用0或1来定义布尔值,例如0-关;1-开。
text:字符串。需定义字符串的数据长度,最长支持2048字节。
date:时间戳。格式为String类型的UTC时间戳,单位:毫秒。
struct:JSON对象。定义一个JSON结构体,新增JSON参数项,例如定义灯的颜色是由Red、Green、Blue三个参数组成的结构体。不支持结构体嵌套。
array:数组。需声明数组内的元素类型、数组元素个数。元素类型可选择int32、float、double、text或struct,需确保同一个数组元素类型相同。元素个数,限制1~512个。
读写类型 不可读写:不支持GET(获取)和SET(设置)
读写:请求读写的方法支持GET(获取)和SET(设置)。
只读:请求只读的方法仅支持GET(获取)。
消息优先级 优先级决定该属性的数据发送到kafka的哪个主题,应用可以根据主题做不一样的优先级处理。下面列举不同优先级对应的kafka主题:
高优先级: high_priority_post
中优先级: middle_priority_post
低优先级: low_priority_post
上报方式 按时上报: 设备定期主动上报或者平台定期采集数据
变更上报: 设备主动上报的数据或者是平台采集的数据只有发生了变化才上报到kafka消息管理平台里。
归属设备编码 绑定该功能所属设备ID,一般用于对接绑定多个子设备的采集器场景,需要把不同功能分配给对应的子设备。
修正系数 普通计算: 乘以K值, K值为分数时表示除法; 加上B值, B值为负数时表示减法
公式计算: 当前属性变量用x代替,涉及浮点数的乘除要额外添加一个.0 例如:x/10.0+20
组合计算: 支持当前指标的值由其他值计算而来。将其他值的标识符放入#{}括号中,然后写计算表达式。例如:#{lenght} * #{weight}
过滤规则 配置了过滤规则,数据将根据规则进行单个属性过滤,或是整条消息丢弃.
  • 自定义服务:在添加自定义功能对话框,选择功能类型为服务。设置参数完成后,单击确认

serviceFunction

服务参数设置说明如下表。

参数 描述
功能名称 服务名称。支持中文、大小写字母、数字、短划线和下划线,且必须以中文、英文或数字开头,不超过30个字符。输入功能名称时,将从标准功能库中筛选匹配的标准功能供您选择,您可以参考标准功能进行配置。
标识符 服务唯一标识符,在产品下具有唯一性。即Yelink JSON格式中该服务的identifier的值。可包含英文、数字、和下划线,长度不超过30个字符。
说明 不能用以下系统保留参数作为标识符:set、get、post、time、value。
调用方式 异步:服务为异步调用时,云端执行调用后直接返回结果,不会等待设备的回复消息。同步:服务为同步调用时,云端会等待设备回复;若设备没有回复,则调用超时。
输入参数 设置该服务的入参,可选。单击新增参数,在弹窗对话框中添加服务入参。
说明 不能用以下系统保留参数作为输入参数的标识符:set、get、post、time、value。
输出参数 设置该服务的出参,可选。单击新增参数
说明 不能用以下系统保留参数作为输出参数的标识符:set、get、post、time、value。
  • 自定义事件:在添加自定义功能对话框,选择功能类型为事件。设置参数完成后,单击确认

eventFunction

事件参数设置说明如下表。

参数 描述
功能名称 事件的名称。支持中文、大小写字母、数字、短划线和下划线,且必须以中文、英文或数字开头,不超过30个字符。输入功能名称时,将从标准功能库中筛选匹配的标准功能供您选择,您可以参考标准功能进行配置。
标识符 事件唯一标识符,在产品下具有唯一性。即YelinkJSON格式中该事件的identifier的值,作为设备上报该事件数据的Key,例如 ErrorCode。说明 不能用以下系统保留参数作为标识符:set、get、post、time、value。
事件类型 您可以针对不同的事件类型进行业务逻辑处理和统计分析。信息:指设备上报的一般性通知,例如完成某项任务等。告警:设备运行过程中主动上报的突发或异常情况,告警类信息,优先级高。故障:设备运行过程中主动上报的突发或异常情况,故障类信息,优先级高。
输出参数 该事件的出参。单击增加参数
说明不能用以下系统保留参数作为输出参数的标识符:set、get、post、time、value。
执行结果

添加自定义功能成功后,您可以:

  1. 可以查看列表形式的物模型功能

    functionList

  2. 单击物模型TSL, 查看JSON格式的物模型TSL

  3. 单击物模型TSL后,单击导出物模型, 进行物模型TSL文件导出至本地。
  4. 单击导入物模型TSL,进行物模型导入。

results matching ""

    No results matching ""