对于物联网架构,一般分为云、管、端三部分,“端”可以简单的指设备、传感器,“云”一般指应用平台,而“管”就是指物联网平台,物联网平台的作用就是承上启下,向下接入各种不同类型的设备,向上提供API接口能力,所以物联网平台的功能一般分为设备管理、应用管理等。物联网平台需要接不同厂家的、不同型号的、不同通讯类型的、不同协议的设备,而对于应用端来说想要得到的是最简单的、易识别的、统一的数据格式,如何解决这中间的矛盾呢?传统的解决办法是一种通讯协议或类型占用一个端口号,通过端口号去区分不同的协议,再将不同的协议转换成同一种数据格式供应用端调用。这种方法一般用在离线部署的项目上,对于云化的物联网平台就不是很适用,尤其是大型物联网平台。那么各大厂家如何解决多种格式输入、同一格式输出的问题呢?

什么是物模型

image.png

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

简单的说物模型就是产品的抽象模型,以便平台能正确理解该产品的能力。再简单的说,产品的物模型是用已经被定义的标准数据格式封装成的json格式文件。注意这里的“标准数据格式”,不同的平台采用的方法不一样。一种是物联网平台定义了全平台统一的标准数据格式,比如小米IOT是MIoT Specification,简称为:MIoT-Spec。阿里云物联网平台是Alink JSON。不管是哪个设备厂家,最终的物模型的字段必须遵守平台定义,如果不够用,可以向平台申请开通;另外一种是物联网平台只定义了大的概念,设备厂家可以自定义标识段,只要符合要求的格式即可。第一种方法的好处是对于应用来说解析端可能只需要一套就能解析出物联网平台的所有数据,但没有第二种灵活;第二种的好处是每个厂家可以自由定义自己的标识段,但相对于第一种方法,解析端可能要针对每种产品做一次解析。
上图列出了两种情况,当设备是使用josn格式协议时可以直接按照物模型去开发,另外一种就是设备是16进制数据,在平台端就需要编解码插件去转换来实现物模型。当然使用情况也不限于上面的两种,有的时候json格式的数据也需要使用编解码插件来转换成物模型。
对于传感器设备来说,一般资源有限,大多采用编解码插件的形式去实现物模型。有的物联网平台为了解决设备资源有限的情况,提供了自己定制的物联网通信模组,设备和物联网平台通讯的实现方式有哪些,这是后话。

物模型组成

每个物联网平台关于产品能力的定义和组成都有一些细微的差异,我们通过分析腾讯IotHub(以下简称腾讯)、华为设备接入IotDA(以下简称华为)、阿里云物联网平台(以下简称阿里)、小米Iot(以下简称小米)这四个平台来解析物模型的组成。
对于产品能力的定义,腾讯、阿里定义为“功能”,华为、小米定义为“服务”。一个产品由多个功能/服务组成,每个功能/服务又包含多个属性、方法、时间,而每个平台对于属性、方法、事件的定义又要细微的差别,但都殊途同归。
image.png

物模型服务/功能 一般用于描述设备运行时的状态,如环境监测设备所读取的当前环境温度等。。 设备运行时的事件。事件一般包含需要被外部感知和处理的通知信息,可包含多个输出参数。如,某项任务完成的信息,或者设备发生故障或告警时的温度等。 设备可被外部调用的能力或方法,可设置输入参数和输出参数。相比于属性,服务可通过一条指令实现更复杂的业务逻辑,如执行某项特定的任务。
腾讯IotHub 属性 事件 行为
华为设备接入IotDA 属性 命令
阿里云物联网平台 属性 事件 服务
小米Iot 属性 事件 方法

“属性”定义的是产品的基本信息上报和获取,可以通过GET、SET方法请求,“事件”定义的是产品特殊信息的上报,可以订阅和推送,“行为/命令/服务/方法”定义的产品的下发执行。需要注意的是华为将“事件”也归到了“属性”里面。
用户通过定义产品的服务/功能,即可自动生成产品的物模型,也就是字段结构。每个物联网平台的字段结构都不一样,但所要表达的意思都差不多。

  1. //腾讯IotHub
  2. {
  3. "version": "1.0",
  4. "profile": {
  5. "ProductId": "2300UMK31M",
  6. "CategoryId": "3"
  7. },
  8. "properties": [
  9. ],
  10. "events": [
  11. ],
  12. "actions": [
  13. ]
  14. }
  15. //华为设备接入IotDA
  16. {
  17. "services": [
  18. {
  19. "serviceType": "WaterMeterBasic",
  20. "description": "WaterMeterBasic",
  21. "commands": [
  22. ],
  23. "properties": [
  24. ]
  25. }
  26. ]
  27. }
  28. //阿里云物联网平台
  29. {
  30. "schema": "物模型结构定义的访问URL",
  31. "profile": {
  32. "productKey": "产品ProductKey"
  33. },
  34. "properties": [
  35. ],
  36. "events": [
  37. ],
  38. "services": [
  39. ]
  40. }

最终应用端可通过物模型的json字段来实现和设备上下行通讯。