本文介绍设备使用物模型通信常见相关问题及解决方法。
如何添加物模型功能?
设备的物模型属性、事件和服务需要在该设备所属产品下进行添加和配置。您可通过以下方式定义物模型:
调用接口CreateThingModel,为指定产品添加物模型功能。
批量导入物模型,TSL检验失败怎么办?
问题现象
如下图所示,在物联网平台为产品导入物模型过程,可能出现如下两种校验失败现象。
解决方法
对应上图①、②两种校验失败现象,解决方案如下:
①:对物模型文件进行JSON格式化校验,完成修正。
②:单击下载查看,获取errors.txt文件,定位问题及原因,完成修正。
errors.txt文件的详细说明,请参见如下示例。
物模型文件示例:
{ "schema":"https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json", "profile":{ "productKey":"a1Jk***" }, "services":[], "properties": 1, "events": [], "functionBlockId": "模块mtest", "functionBlockName": "自定义模块1" }
下载的errors.txt文件:
[ { "path": [ "properties" ], "property": "instance.properties", "message": "is not of a type(s) array", "schema": { "type": "array", "items": { "$ref": "#/definitions/propertyDefinition" } }, "instance": 1, "name": "type", "argument": [ "array" ], "stack": "instance.properties is not of a type(s) array" }, { "path": [ "functionBlockId" ], "property": "instance.functionBlockId", "message": "does not match pattern \"^[_a-zA-Z0-9]{1,30}$\"", "schema": { "type": "string", "pattern": "^[_a-zA-Z0-9]{1,30}$" }, "instance": "模块mtest", "name": "pattern", "argument": "^[_a-zA-Z0-9]{1,30}$", "stack": "instance.functionBlockId does not match pattern \"^[_a-zA-Z0-9]{1,30}$\"" } ]
参数
说明
path
校验后,出错的路径。本文示例校验出2处错误:
// properties配置错误,不是数组 "path": [ "properties" ] // functionBlockId含有中文 "path": [ "functionBlockId" ]
property
path下不合规则的具体对象。
例如
"path": ["functionBlockId" ]
中的instance.functionBlockId
。message
具体的错误提示信息。
例如
"path": ["functionBlockId" ]
中,提示property的错误为does not match pattern \"^[_a-zA-Z0-9]{1,30}$\"
。schema
校验的规则名称及对应内容。
例如
"path": ["functionBlockId" ]
中的规则type
和pattern
。有关规则定义的详细内容,请参见schama。
instance
校验的具体对象。
例如
"path": ["functionBlockId" ]
中,校验物模型文件中"functionBlockId": "模块mtest"
的内容。name
校验未通过规则的名称。
例如
"path": ["functionBlockId" ]
中,校验对象模块mtest
不符合规则pattern
。argument
校验未通过规则的内容。
例如
"path": ["functionBlockId" ]
中,不符合规则pattern
的定义为^[_a-zA-Z0-9]{1,30}$
。stack
堆栈信息。由property和message内容组合的完整错误提示信息。
更多信息,请参见校验工具jsonschema的说明。
物模型的属性上报、历史数据上报、批量属性上报有什么区别?
功能区别
功能 | 区别 |
物模型属性上报 | 上报设备属性快照数据。时间戳可选:
|
物模型历史数据上报 | 以时间为维度,上报同一时间点下不同属性的值。需携带时间戳。 单次数据上报中,支持上报多个时间点下不同属性的数据。 |
物模型批量属性上报 | 以属性为维度,上报同一属性下不同时间点的值。需携带时间戳。 单次数据上报中,支持上报多个属性下不同时间点的数据。 |
物模型的属性上报、历史数据上报、批量属性上报到物联网平台后,均会根据时间戳形成历史数据。
通信Topic和数据格式的区别
示例
以设备的温度数据为例:
物模型属性上报:
设备按照下表所示,从左至右,携带时间戳依次上报快照数据。
13:00
14:00
15:00
15:10
60
70
80
90
设备再上报一个快照值100,不同上报方式更新数据如下:
不携带时间戳时,默认为当前时间(假设15:30)。此时,物联网平台控制台显示的快照值是15:30的100;历史数据列表中最新数据是15:30的100。
携带时间戳时,例如15:00,更新15:00的数据为100。此时,物联网平台控制台显示的快照值是15:00的100;历史数据列表中最新数据还是15:10的90。
物模型历史数据上报:
设备同时上报以下历史数据。
13:00
14:00
15:00
15:10
60
70
80
90
设备再同时上报以下历史数据。
13:10
14:10
100
200
此时,物联网平台控制台显示的快照值为13:10的100或14:10的200(以最后写入数据库的值为准);历史数据列表中最新数据还是15:10的90。
通过自定义Topic上报数据后,物模型数据为什么没有更新?
设备物模型数据需通过物模型通信Topic上报,详细说明,请参见Topic分类和通信说明。
如何获取设备上报的物模型数据?
您可通过以下方式获取设备物模型数据:
服务端订阅:使用物联网平台的服务端订阅功能,订阅设备上报消息类型。物联网平台根据您设置的订阅,将产品下所有设备的该类型消息流转至您的服务器。支持以下两种方式的服务端订阅:
AMQP服务端订阅:使用AMQP SDK接收物联网平台转发的设备消息。
轻量消息队列(原 MNS)服务端订阅:使用轻量消息队列(原 MNS) SDK接收物联网平台转发到轻量消息队列(原 MNS)的设备消息。
云产品流转:使用规则引擎的云产品流转功能,通过数据流转规则将指定设备数据流转到轻量消息队列(原 MNS)、云数据库RDS、表格存储、函数计算、时间序列数据库TSDB、云原生多模数据库Lindorm、DataHub、消息队列RocketMQ等云产品中。详细内容,请参见云产品流转(旧版)和云产品流转(新版)。
云端API:
API
说明
查询指定设备的所有属性快照。
查询指定设备本身上报的原始属性(通过和未通过物模型校验的所有属性)快照。
查询指定设备本身上报的原始属性(通过和未通过物模型校验的所有属性)记录。
查询指定设备本身上报的原始事件(通过和未通过物模型校验的所有事件)记录。
查询指定设备本身调用的原始服务(通过和未通过物模型校验的所有服务)记录。
查询指定设备的期望属性值。
查询指定设备在指定时间段内,单个属性的数据。
查询指定设备在指定时间段内,多个属性的数据。
查询指定设备的事件记录。
查询指定设备的服务调用记录。
物联网平台控制台为什么不展示设备上报的物模型数据?
设备上报物模型数据时,物联网平台按设置的数据校验方式,根据物模型定义进行数据校验。校验不通过或免校验物模型数据,不会在物联网平台控制台对应设备的设备详情页面中物模型数据页签下展示。详细说明,请参见校验物模型数据。
您需在创建产品时,设置数据校验方式。具体操作,请参见创建产品。
物联网平台下发物模型属性设置、期望值设置指令成功后,物模型数据运行状态没有更新,怎么办?
您可以从以下几个方面进行排查解决:
控制台无法显示物模型温度数据,如何让数据在物模型中显示?
物模型属性没有定义或上报的数据格式不符合要求,物模型数据都会无法正常显示。
实现物模型显示的流程如下:
在设备所属产品下定义物模型属性:温度。具体操作,请参见添加物模型。
设备端通过物模型通信Topic,按照对应数据格式上报属性数据。设备端功能开发,请参见设备接入。
如果创建产品时,数据格式选择ICA标准数据格式(Alink JSON),设备端需要通过Topic:
/sys/${productKey}/${deviceName}/thing/event/property/post
,按照如下格式上报:{ "id": "123", "version": "1.0", "sys":{ "ack":0 }, "params": { "temperature": { "value": 35, "time": 1524448722000 } }, "method": "thing.event.property.post" }
字段说明,请参见设备上报属性。
如果创建产品时,数据格式选择透传/自定义,需要配置物模型消息解析。
设备端需要通过Topic:
/sys/${productKey}/${deviceName}/thing/model/up_raw
,透传16进制格式的数据。详细说明,请参见设备上报属性和物模型消息解析。
产品自定义物模型功能,有快速导入方法吗?
有。物联网平台提供批量添加物模型功能的方法:
批量添加物模型:在物联网平台控制台,批量拷贝其他产品的物模型功能,或导入物模型TSL文件。
CreateThingModel:使用云端SDK调用物联网平台云端API,通过ThingModelJson新增物模型功能。ThingModelJson数据格式说明,请参见ThingModelJson数据说明。