文档

物模型相关问题

更新时间:

本文介绍设备使用物模型通信常见相关问题及解决方法。

如何添加物模型功能?

设备的物模型属性、事件和服务需要在该设备所属产品下进行添加和配置。您可通过以下方式定义物模型:

批量导入物模型,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" ]中的规则typepattern

    有关规则定义的详细内容,请参见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和数据格式的区别

Topic和数据格式不同,详细说明,请参见设备上报属性物模型历史数据上报设备批量上报属性

示例

以设备的温度数据为例:

  • 物模型属性上报:

    1. 设备按照下表所示,从左至右,携带时间戳依次上报快照数据。

      13:00

      14:00

      15:00

      15:10

      60

      70

      80

      90

    2. 设备再上报一个快照值100,不同上报方式更新数据如下:

      • 不携带时间戳时,默认为当前时间(假设15:30)。此时,物联网平台控制台显示的快照值是15:30的100;历史数据列表中最新数据是15:30的100。

      • 携带时间戳时,例如15:00,更新15:00的数据为100。此时,物联网平台控制台显示的快照值是15:00的100;历史数据列表中最新数据还是15:10的90。

  • 物模型历史数据上报:

    1. 设备同时上报以下历史数据。

      13:00

      14:00

      15:00

      15:10

      60

      70

      80

      90

    2. 设备再同时上报以下历史数据。

      13:10

      14:10

      100

      200

      此时,物联网平台控制台显示的快照值为13:10的100或14:10的200(以最后写入数据库的值为准);历史数据列表中最新数据还是15:10的90。

通过自定义Topic上报数据后,物模型数据为什么没有更新?

设备物模型数据需通过物模型通信Topic上报,详细说明,请参见Topic分类和通信说明

如何获取设备上报的物模型数据?

您可通过以下方式获取设备物模型数据:

  • 服务端订阅:使用物联网平台的服务端订阅功能,订阅设备上报消息类型。物联网平台根据您设置的订阅,将产品下所有设备的该类型消息流转至您的服务器。支持以下两种方式的服务端订阅:

  • 云产品流转:使用规则引擎的云产品流转功能,通过数据流转规则将指定设备数据流转到消息服务(MNS)、云数据库RDS、表格存储、函数计算、时间序列数据库TSDB、云原生多模数据库Lindorm、DataHub、消息队列RocketMQ等云产品中。详细内容,请参见云产品流转(旧版)云产品流转(新版)

  • 云端API:

    API

    说明

    QueryDevicePropertyStatus

    查询指定设备的所有属性快照。

    QueryDeviceOriginalPropertyStatus

    查询指定设备本身上报的原始属性(通过和未通过物模型校验的所有属性)快照。

    QueryDeviceOriginalPropertyData

    查询指定设备本身上报的原始属性(通过和未通过物模型校验的所有属性)记录。

    QueryDeviceOriginalEventData

    查询指定设备本身上报的原始事件(通过和未通过物模型校验的所有事件)记录。

    QueryDeviceOriginalServiceData

    查询指定设备本身调用的原始服务(通过和未通过物模型校验的所有服务)记录。

    QueryDeviceDesiredProperty

    查询指定设备的期望属性值。

    QueryDevicePropertyData

    查询指定设备在指定时间段内,单个属性的数据。

    QueryDevicePropertiesData

    查询指定设备在指定时间段内,多个属性的数据。

    QueryDeviceEventData

    查询指定设备的事件记录。

    QueryDeviceServiceData

    查询指定设备的服务调用记录。

物联网平台控制台为什么不展示设备上报的物模型数据?

设备上报物模型数据时,物联网平台按设置的数据校验方式,根据物模型定义进行数据校验。校验不通过或免校验物模型数据,不会在物联网平台控制台对应设备的设备详情页面中物模型数据页签下展示。详细说明,请参见校验物模型数据

您需在创建产品时,设置数据校验方式。具体操作,请参见创建产品

物联网平台下发物模型属性设置、期望值设置指令成功后,物模型数据运行状态没有更新,怎么办?

您可以从以下几个方面进行排查解决:

  • 设备端:确保设备端已经正常连接到阿里云物联网平台。设备接入,请参见下载设备端SDK

    重要

    如果下发设置设备属性指令成功,只表示物联网平台云端下发属性设置请求成功,不保证设备端执行了该请求。所以设备端SDK成功响应云端设置设备属性值的请求后,需上报对应属性值,设备属性值才能真正设置成功。

    您可通过物联网平台的设备模拟器或MQTT.fx工具模拟设备在线后,使用在线调试功能调试在线设备的通信功能。具体内容,请参见:

  • 物联网平台云端

    • 确保设置设置期望值的属性必须具有读写权限。

    • 确保物模型消息的消息解析正常。

      物模型消息必须正常解析,数据才能在物模型的运行状态中显示。具体内容,请参见物模型物模型消息解析

    您可以登录物联网平台控制台,在对应实例下的监控运维 > 日志服务 > 云端运行日志页面,查看对应的日志,检查设备是否接收消息成功。具体操作,请参见云端运行日志

控制台无法显示物模型温度数据,如何让数据在物模型中显示?

物模型属性没有定义或上报的数据格式不符合要求,物模型数据都会无法正常显示。

实现物模型显示的流程如下:

  1. 在设备所属产品下定义物模型属性:温度。具体操作,请参见添加物模型

  2. 设备端通过物模型通信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进制格式的数据。详细说明,请参见设备上报属性物模型消息解析

产品自定义物模型功能,有快速导入方法吗?

有。物联网平台提供批量添加物模型功能的方法:

  • 本页导读 (1)