在物联网中,用什么方式提供底层硬件的控制接口信息? 平台应用如何与不同品牌的设备进行匹配(开发)?
要解决上面这个问题,可以通过增加一个中间协议层,比如在浏览器浏览不同的文件(文本、音视频等)时通过 HTML(超文本标记语言)来表示,而物联网也有类似的协议层——Thing Specification Language,简称 TSL。
使用 TSL 描述的物联网中的实体模型,就是 ”物模型,或者叫做“产品模型”,也有叫“数据面板”的。
物联模型和设备的关系是什么?
物模型是物理世界的实体东西的一个抽象,是进行数字化描述后,用于数字世界的数字模型。直接点,物模型是使用计算机可以理解的语言,说清楚这个产品是什么、能做什么事情,以及可以提供哪些信息。
反过来,物模型也规约了设备的功能。新增加的设备,如果是同一类型的,在设计、研发中,会遵循相同的功能定义,有相同的特征,实现相同的服务。
如何定义物模型
我们一般通过属性、事件和动作这三种功能元素来定义。
属性(Property):描述产品运行时的某种状态,属性可以进行读写,比如环境检测设备的温度和湿度两个属性。
事件(Event):设备在运行过程汇总产生的信息、警告和故障等,就是事件。事件是设备上报的,不能由应用设置。
动作(Action): 也被称为服务,动作由应用发给设备,设备可以返回结果给应用。动作可以进一步分为同步和异步。
物模型的数据类型
物模型的类型包括六种:
- 布尔型(Bool):非真既假的二值型变量。
- 整数型(Int):可线性调节的整数变量。
- 字符串型(String):以字符串形式形式表示的变量。
- 浮点型(Float):精度为浮点的变量。
- 枚举型(Enum):自定义的有限集合值。
- 时间型(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)
物模型是物理实体的数字化模型,但主要针对的是物联网中应用的开发和设备的互操作。这个模型集成了物理实体的各类数据,这些数据会在物理实体的生命周期中随着物理实体一起进化,积累各种信息和知识,并且促进物理实体的优化。这样的模型就是物理实体的数字孪生。