阿里云物联网平台 - 物模型

阿里云物联网平台 - 物模型

物模型介绍

物模型是云平台为物联网产品定义的数据模型,用于描述产品的功能。将产品抽象成数据的集合,方便云端进行控制。

物模型从属性服务事件三个维度,分别描述了该实体是什么、能做什么、可以对外提供哪些信息。定义了物模型的这三个维度,即完成了产品功能的定义。

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

物模型TSL格式

TSL 格式是一个 JSON 格式的文件,完整的 TSL 格式可以参考:阿里云物模型

嵌入式端开发固件往往只需要关注少数几个参数,可以在产品的功能定义页面,单击物模型TSL精简物模型里面查看。

需要关注的有 "properties","events","services",在 JSON 格式里,这三者都是数组,分别存储了该物模型的数据,事件和服务,在 C-SDK 里也就分别是 IOT_Linkkit_Report() 上报属性,IOT_Linkkit_TriggerEvent() 触发事件和注册为 ITE_SERVICE_REQUEST 的回调函数。

属性上报

在上报属性时,只需要关注 "identifier" 名称对应的值(字符串),此时表示该属性在产品下的唯一标识。例如一个精简物模型属性为:

{
  "properties": [
    {
      "identifier": "count",
      "dataType": {
        "type": "int"
      }
    }
  ]
}

则上报的数据只需要为 {"count":10} 即可,需满足 JSON 字符串的格式,字符串内有一个名称/值对,名称为 "count"(物模型里 "identifier" 的值),值对为 10(满足物模型里数据类型为 int 的要求)。

事件触发

触发事件需要关注 "identifier" 名称对应的值(字符串),表示该事件在产品下的唯一标识;还需要关注 "outputData",表示上报事件的输出值。一个精简物模型例子如下:

{
  "events": [
    {
      "outputData": [
        {
          "identifier": "power",
          "dataType": {
            "type": "int"
          }
        },
        {
          "identifier": "power_style",
          "dataType": {
            "type": "enum"
          }
        }
      ],
      "identifier": "power_state",
      "type": "info"
    }
  ]
}

"outputData" 数组的使用与属性上报一致,这里就不介绍了。

服务调用

服务调用需要同时关注 "identifier","inputData" 和 "outputData" 这三个名称,分别表示该服务在产品下的唯一标识,服务的输入参数,服务的输出参数。与函数调用有输入值和输出值类似,服务调用也有这些特征。

物模型数据校验

物模型数据校验方式目前有两种,弱校验免校验

类型 说明
弱校验 只校验设备数据的 idetifier 和 dataType 字段,不校验其他字段,流转全量数据。
免校验 对上报的数据不进行校验,流转全量数据。

也就是说,弱校验针对产品设备的上报数据,只要 idetifier 是一致的,且 dataType 字段满足要求,就接收该数据,并且在其他云端产品流转。

设备与云端交互过程

为什么云端可以设置和获取接入设备的属性呢?为什么接入设备可以上报事件给云端呢?又为什么云端可以调用接入设备提供的服务呢?这就是这一小节解释的内容。

物模型基于 MQTT 协议,MQTT 协议的介绍不在此处展开。

云端定义了一系列的 Topic,在设备接入云端时,C-SDK 向 MQTT broker 订阅了一些的 Topic,而云端需要与设备交互时,就向 MQTT broker 发布相应的 Topic,这样就完成了交互过程。同理,云端也会订阅一些 Topic,设备可以向这些 Topic 发布消息。

接入设备端订阅发布的 Topic 列表如下:

功能 Topic类 操作权限 描述
属性上报 /sys/${productKey}/${deviceName}/thing/event/property/post 发布 设备属性上报
/sys/${productKey}/${deviceName}/thing/event/property/post_reply 订阅 云端响应属性上报
属性设置 /sys/${productKey}/${deviceName}/thing/service/property/set 订阅 设备属性设置
事件上报 /sys/${productKey}/${deviceName}/thing/event/${tsl.event.identifier}/post 发布 设备事件上报
/sys/${productKey}/${deviceName}/thing/event/${tsl.event.identifier}/post_reply 订阅 云端响应事件上报
服务调用 /sys/${productKey}/${deviceName}/thing/service/${tsl.service.identifier} 订阅 设备服务调用
/sys/${productKey}/${deviceName}/thing/service/${tsl.service.identifier}_reply 发布 设备端响应服务调用

其中 ${productKey} 会替换为实际的产品名,${deviceName} 会替换为实际的设备名,${tsl.event.identifier} 是事件的标识符,${tsl.service.identifier} 是服务的标识符,最大限度地保证了 Topic 的唯一性。

这些 Topic 的作用在后面用时序来描述。

属性上报与设置

事件上报

服务调用

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容