物模型指将物理空间中的实体数字化,并在云端构建的该实体的数据模型,用于描述实体的功能。下面介绍物模型相关概念和使用方法。
物模型TSL(Thing Specification Language)是一个JSON格式的文件。它是物理空间中的实体,如传感器、车载装置、楼宇、工厂等在云端的数字化表示,从属性、服务和事件三个维度,分别描述了该实体是什么、能做什么、可以对外提供哪些信息。定义了物模型的这三个维度,即完成了产品功能的定义。
物模型将产品功能类型分为三类:属性(properties),功能(function),事件(event)。

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

设备模型使用场景:

  1. 前端通过模型定义动态展示设备运行状态或者设备操作界面
  2. 服务端可通过统一的API获取设备模型并进行相关操作,如: 在发送设备消息时进行参数校验, 在收到设备消息进行类型转换处理.

    物模型TSL格式

    您可以在产品的功能定义页面,单击物模型TSL,查看JSON格式的TSL。
    物模型TSL的JSON字段结构如下:
    1. {
    2. "id":"设备ID",
    3. "name":"设备名称",
    4. "properties":[...属性],
    5. "functions":[...功能],
    6. "events":[...事件]
    7. }

    属性

    用于定义设备属性,运行状态等如: 设备SN,当前CPU使用率等. 平台可主动下发消息获取设备属性,设备也通过事件上报属性.
    数据结构:
    1. {
    2. "id": "cpu_usage", //属性标识
    3. "name": "CPU使用率",
    4. "valueType": { //值类型
    5. "type": "double", //类型标识,见类型表
    6. "maxValue":100,
    7. "minValue":0,
    8. "unit":"percent", //单位
    9. "expands":{"key1":"value1"} //其他自定义拓展定义
    10. },
    11. "expands":{"key1":"value1"} //其他自定义拓展定义
    12. }

    功能

    用于定义设备功能,平台可主动调用,例如: 播放语音,开关操作等.
    数据结构:
    1. {
    2. "id": "playVoice", //功能标识
    3. "name": "播放声音", //名称
    4. "inputs": [ //输入参数
    5. {
    6. "id": "text",
    7. "name": "文字内容",
    8. "valueType": { //参数类型
    9. "type": "string"
    10. },
    11. "expands":{"key1":"value1"} //其他自定义拓展定义
    12. }
    13. ],
    14. "output": { //输出
    15. "type": "boolean" //输出类型
    16. },
    17. "expands":{"key1":"value1"} //其他自定义拓展定义
    18. }

    事件

    用于定义设备事件, 如: 定时上报设备属性, 设备报警等.
    数据结构:
    1. {
    2. "id": "fire_alarm", //事件标识
    3. "name": "火警",
    4. "valueType": {
    5. "type": "object", //对象(结构体)类型
    6. "properties": [ //对象属性(结构与属性定义相同)
    7. {
    8. "id": "location",
    9. "name": "地点",
    10. "valueType": {
    11. "type": "string"
    12. }
    13. },
    14. {
    15. "id": "lng",
    16. "name": "经度",
    17. "valueType": {
    18. "type": "double"
    19. },
    20. "expands":{"gis":"lng"} //其他自定义拓展定义
    21. },
    22. {
    23. "id": "lat",
    24. "name": "纬度",
    25. "valueType": {
    26. "type": "double"
    27. },
    28. "expands":{"gis":"lat"} //其他自定义拓展定义
    29. }
    30. ]
    31. },
    32. "expands":{"key1":"value1"} //其他自定义拓展定义
    33. }

阿里物联网平台物模型

  1. {
  2. "schema": "物模型结构定义的访问URL",
  3. "profile": {
  4. "productKey": "产品ProductKey"
  5. },
  6. "properties": [
  7. {
  8. "identifier": "属性唯一标识符(产品下唯一)",
  9. "name": "属性名称",
  10. "accessMode": "属性读写类型:只读(r)或读写(rw)。",
  11. "required": "是否是标准功能的必选属性",
  12. "dataType": {
  13. "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)",
  14. "specs": {
  15. "min": "参数最小值(int、float、double类型特有)",
  16. "max": "参数最大值(int、float、double类型特有)",
  17. "unit": "属性单位(int、float、double类型特有,非必填)",
  18. "unitName": "单位名称(int、float、double类型特有,非必填)",
  19. "size": "数组元素的个数,最大512(array类型特有)。",
  20. "step": "步长(text、enum类型无此参数)",
  21. "length": "数据长度,最大10240(text类型特有)。",
  22. "0": "0的值(bool类型特有)",
  23. "1": "1的值(bool类型特有)",
  24. "item": {
  25. "type": "数组元素的类型(array类型特有)"
  26. }
  27. }
  28. }
  29. }
  30. ],
  31. "events": [
  32. {
  33. "identifier": "事件唯一标识符(产品下唯一,其中post是默认生成的属性上报事件。)",
  34. "name": "事件名称",
  35. "desc": "事件描述",
  36. "type": "事件类型(info、alert、error)",
  37. "required": "是否是标准功能的必选事件",
  38. "outputData": [
  39. {
  40. "identifier": "参数唯一标识符",
  41. "name": "参数名称",
  42. "dataType": {
  43. "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)",
  44. "specs": {
  45. "min": "参数最小值(int、float、double类型特有)",
  46. "max": "参数最大值(int、float、double类型特有)",
  47. "unit": "属性单位(int、float、double类型特有,非必填)",
  48. "unitName": "单位名称(int、float、double类型特有,非必填)",
  49. "size": "数组元素的个数,最大512(array类型特有)。",
  50. "step": "步长(text、enum类型无此参数)",
  51. "length": "数据长度,最大10240(text类型特有)。",
  52. "0": "0的值(bool类型特有)",
  53. "1": "1的值(bool类型特有)",
  54. "item": {
  55. "type": "数组元素的类型(array类型特有)"
  56. }
  57. }
  58. }
  59. }
  60. ],
  61. "method": "事件对应的方法名称(根据identifier生成)"
  62. }
  63. ],
  64. "services": [
  65. {
  66. "identifier": "服务唯一标识符(产品下唯一,其中set/get是根据属性的accessMode默认生成的服务。)",
  67. "name": "服务名称",
  68. "desc": "服务描述",
  69. "required": "是否是标准功能的必选服务",
  70. "callType": "async(异步调用)或sync(同步调用)",
  71. "inputData": [
  72. {
  73. "identifier": "入参唯一标识符",
  74. "name": "入参名称",
  75. "dataType": {
  76. "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)",
  77. "specs": {
  78. "min": "参数最小值(int、float、double类型特有)",
  79. "max": "参数最大值(int、float、double类型特有)",
  80. "unit": "属性单位(int、float、double类型特有,非必填)",
  81. "unitName": "单位名称(int、float、double类型特有,非必填)",
  82. "size": "数组元素的个数,最大512(array类型特有)。",
  83. "step": "步长(text、enum类型无此参数)",
  84. "length": "数据长度,最大10240(text类型特有)。",
  85. "0": "0的值(bool类型特有)",
  86. "1": "1的值(bool类型特有)",
  87. "item": {
  88. "type": "数组元素的类型(array类型特有)"
  89. }
  90. }
  91. }
  92. }
  93. }
  94. ],
  95. "outputData": [
  96. {
  97. "identifier": "出参唯一标识符",
  98. "name": "出参名称",
  99. "dataType": {
  100. "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)",
  101. "specs": {
  102. "min": "参数最小值(int、float、double类型特有)",
  103. "max": "参数最大值(int、float、double类型特有)",
  104. "unit": "属性单位(int、float、double类型特有,非必填)",
  105. "unitName": "单位名称(int、float、double类型特有,非必填)",
  106. "size": "数组元素的个数,最大512(array类型特有)。",
  107. "step": "步长(text、enum类型无此参数)",
  108. "length": "数据长度,最大10240(text类型特有)。",
  109. "0": "0的值(bool类型特有)",
  110. "1": "1的值(bool类型特有)",
  111. "item": {
  112. "type": "数组元素的类型(array类型特有)"
  113. }
  114. }
  115. }
  116. }
  117. ],
  118. "method": "服务对应的方法名称(根据identifier生成)"
  119. }
  120. ]
  121. }