欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何轻松连接设备:物品模型的基本解释与网络配置指南

最编程 2024-07-29 11:41:54
...

什么是物模型

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

而抽象就是要提取出产品的共同特征,形成模型。以智能灯为例,不同的灯,尽管规格不同,但它们的属性是相似,比如都有开关状态的属性,功能逻辑也相仿。我们可以将这些特征标准化,形成智能灯的物模型。反过来,物模型也规约了设备的功能。新增加的设备,如果是同一类型的,在设计、研发中,会遵循相同的功能定义,有相同的特征,实现相同的服务。比如,灯都应该有“开”和“关”两种状态。

为什么要使用物模型

基于共同的抽象特征,物模型可以让应用程序不再针对一个个的产品设备,而是同一类设备采用相同的处理逻辑。这实际上是应用开发的基础。当烟感传感器的数值触发报警时,即使是不同品牌的烟感产品,应用程序也可以对数值做相同的处理和判断,否则只能分别进行数值分析。另外,物模型中,设备的功能是明确定义的,可以方便地实现场景联动。比如,光线传感器可以基于光照强度,向智能电灯发送亮度的控制命令,或者开和关的命令。

如何定义物模型

定义物模型的方法:通过属性、事件和动作这三种功能元素来定义

属性(Property):描述了产品设备运行时的某种状态,属性的特点是可读可写。也就是说,应用程序可以读取属性,也可以设置设备的属性。我们还可以看到类似的例子,比如环境监测设备的温度、湿度这两个属性等。

事件(Event):由产品设备在运行过程中产生的信息、告警和故障等,一个事件可以包含多个输出参数。事件不同于属性,事件是设备上报的,不能由应用来设置。类似的例子,还有某任务完成时的消息,环境传感器检测到污染物的告警等。

如果智能电灯在运行过程中,出现了低电压的情况,或者发生了硬件故障,那么联网的设备可以将这些信息发送出去,通知你来及时作出处理。

动作(Action)或者服务(service):设备可以被调用的能力或者方法。动作由应用下发给设备,设备可以返回结果给应用。从执行的流程看,动作还可以进一步分为同步和异步。这取决于动作是否是个耗时的操作,以及其他应用逻辑对于动作执行结果的依赖关系。

生活中关于灯的一个使用场景:第一次约会的时候,你希望灯能够烘托出浪漫的气氛,就要调节灯的颜色、亮度和色温。如果分别设置属性,将会非常繁琐,这时你会想到要为灯增加一个场景模式的功能,一个命令就可以设置到浪漫模式。

作为一种模型语言,物模型的数据也有不同的数据类型。它们主要包括六种:

1、布尔型(Bool):非真即假的二值型变量。例如,开关功能只有开、关两种状态。

2、整数型(Int):可用于线性调节的整数变量。例如,电灯的亮度是一个整数范围。

3、字符串型(String):以字符串形式表达的功能点。例如,灯的位置。

4、浮点型(Float):精度为浮点型的功能点。例如,电压值的范围是 0.0 - 24.0。

5、枚举型(Enum):自定义的有限集合值。例如,灯的颜色有白色、红色、黄色等。

6、时间型(Timestamp):String 类型的 UTC 时间戳。

对于整数型、浮点型的数值,它们的单位可以是百分比、电压、米等。物模型一般是用 JSON 格式来表述模型元素。JSON 是 Web 开发中,经常使用的数据格式,相比于 XML,它更加简洁、清晰,也更轻量级。

例子:用JSON个事来定义智能电灯的物模型,智能电灯的开关属性是布尔类型,是必须有的属性。它可以通过 JSON 表述如下:

智能电灯的开关属性是布尔类型,是必须有的属性。它可以通过 JSON 表述如下:


{
      "id": "power_switch",   //属性的唯一标识
      "name": "电灯开关",      //名称
      "desc": "控制电灯开灭",   //属性的详细描述
      "required": true,       //表示此属性是否必需包含,是
      "mode": "rw",           //属性的模式,r代表读,w代表写
      "define": {             //属性的数值定义
        "type": "bool",       //数值的类型,布尔
        "mapping": {          //具体数值的含义
          "0": "关",           //0表示灯关闭
          "1": "开"            //1表示灯打开
        }
      }
    }

智能电灯的电压是需要监控的数值,