在物联网中,用什么方式提供底层硬件的控制接口信息? 平台应用如何与不同品牌的设备进行匹配(开发)?

要解决上面这个问题,可以通过增加一个中间协议层,比如在浏览器浏览不同的文件(文本、音视频等)时通过 HTML(超文本标记语言)来表示,而物联网也有类似的协议层——Thing Specification Language,简称 TSL

使用 TSL 描述的物联网中的实体模型,就是 ”物模型,或者叫做“产品模型”,也有叫“数据面板”的。

物联模型和设备的关系是什么?

物模型是物理世界的实体东西的一个抽象,是进行数字化描述后,用于数字世界的数字模型。直接点,物模型是使用计算机可以理解的语言,说清楚这个产品是什么、能做什么事情,以及可以提供哪些信息。

反过来,物模型也规约了设备的功能。新增加的设备,如果是同一类型的,在设计、研发中,会遵循相同的功能定义,有相同的特征,实现相同的服务。

如何定义物模型

我们一般通过属性、事件和动作这三种功能元素来定义。

属性(Property):描述产品运行时的某种状态,属性可以进行读写,比如环境检测设备的温度和湿度两个属性。

事件(Event):设备在运行过程汇总产生的信息、警告和故障等,就是事件。事件是设备上报的,不能由应用设置。

动作(Action): 也被称为服务,动作由应用发给设备,设备可以返回结果给应用。动作可以进一步分为同步和异步。

物模型的数据类型

物模型的类型包括六种:

  1. 布尔型(Bool):非真既假的二值型变量。
  2. 整数型(Int):可线性调节的整数变量。
  3. 字符串型(String):以字符串形式形式表示的变量。
  4. 浮点型(Float):精度为浮点的变量。
  5. 枚举型(Enum):自定义的有限集合值。
  6. 时间型(Timestamp):String 类型的 UTC 时间戳。

物理型一般用 JSON 格式来表述模型元素。JSON 是 Web 开发中,经常使用的数据格式。

定义智能电灯的物联模型

智能电开关的属性对应的 JSON 表述如下:

{
	"id": "power_switch",  // 属性的标识
	"name": "电灯开关",      // 名称
	"desc": "电灯开关控制",   // 属性的描述
	"required": true,       // 表示此属性是否必须包含
	"mode": "rw",           // 属性的模式,设置为可读可写
	"define": {             // 属性的数值定义
		"type": "bool",     // 数值的类型,布尔型
		"mapping": {        // 具体的数值的含义
			"0": "关",        
			"1": "开"
		}
	}
}

智能电灯的事件,电灯的电压需要监控,当电压过低时,可以上报这个事件(电压过低),数据类型为浮点型,对应 JSON 格式的描述如下:

{
	"id": "voltage_too_low",  // 事件的标识
	"name": "电灯过低",         // 名称
	"desc": "电压过低",         // 事件的描述
	"required": false,        // 表示此属性是否必须包含
	"params": [               // 事件的参数
		{             
			"id": "voltage",       // 事件参数的标识
			"name": "电压",         // 名称
			"desc": "当前电压",      // 参数的描述
			"define": {             // 参数的数值定义
				"type": "float",    // 数值的类型,浮点型
				"unit": "V",        // 数值的单位,伏特
				"step": "1",        // 数值的变化步长 
				"min": "0.0",       // 数值的最小值
				"max": "24.0",      // 数值的最大值
				"start": "1",       // 事件的起始值
			}
		}
	]
}

动作的定义和属性、事件的定义过程类似。

每个模型都要从头定义吗?

创建模型的时候,有拷贝继承两种模式,它们不同点体现在模型关系上。

拷贝模式类似于编程中的值拷贝,新建模型与被拷贝模型有完全相同的元素,两个模型相互独立,模型变更互不影响。

继承模式就是编程中继承概念,新建模型被定义为“子模型”,被继承的模型定义为“父模型”。

物模型的拓展应用

设备影子

设备影子用于缓存设备状态。应用程序可以通过设备影子直接获取设备最后一次更新的属性值,而无需每次都访问设备。设备在线时,可以直接获取应用指令;设备离线后,再次上线可以主动拉取应用指令。

比如,智能电灯的开关状态这个属性,你可以在本地通过物理开关改变,如果网络不稳定,那么平台上的状态和真实状态可能不同步。设备影子可以通过双向同步,实现服务端和设备端的一致,从而解决这个问题。

数字孪生(Digital Twin)

物模型是物理实体的数字化模型,但主要针对的是物联网中应用的开发和设备的互操作。这个模型集成了物理实体的各类数据,这些数据会在物理实体的生命周期中随着物理实体一起进化,积累各种信息和知识,并且促进物理实体的优化。这样的模型就是物理实体的数字孪生。