物模型介绍

现实世界是由真实存在的物理设备所组成的,我们可以将这些设备称之为“物”。物联网的目的则是能够将现实世界中的万“物”通过网络连接在一起,并将其数字化成云端的服务或者资源,通过整合各类服务资源实现智能化。因此,在物联网所构建的数字世界里,我们首先需要对“物”有一个清晰、统一的定义,用于描述“物”具体能做什么,能够提供什么样的服务和资源。ICA联盟从产品层面对“物”进行了功能建模,定义出统一的“物的抽象模型”以及“物的描述语言(TSL,Things Specification Language)”

物的抽象模型:

物的抽象模型是对“设备是什么”、“设备能做什么”的一种描述,包括有:物的状态、物的档案信息、物的功能定义

物的描述语言TSL:

ICA数据标准的平台会采用JSON Schema定义,自动生成物模型的描述代码(JSON格式),我们称之为“物的描述语言”(TSL, Things Specification Language)。

1.什么是物模型(产品模型、数据模板)

物模型指将物理空间中的实体数字化,并在云端构建该实体的数据模型。在物联网平台中,定义物模型即定义产品功能。完成功能定义后,系统将自动生成该产品的物模型。物模型描述产品是什么,能做什么,可以对外提供哪些服务。

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

物模型将产品功能类型分为三类:属性、服务、和事件。定义了这三类功能,即完成了物模型的定义。

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

2.物模型和设备的关系?

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

3.为什么采用物模型?

主要原因在于它能够帮助描述和管理物理世界中的各种设备、传感器和数据,从而实现对物联网设备的统一管理、互操作性和数据标准化:

  1. 设备描述和管理:通过定义物模型,可以清晰地描述物联网中的各种设备和传感器,包括其功能、属性、状态和行为等信息。这有助于统一管理和监控不同类型的设备,并为其提供标准化的接口。

  2. 互操作性:物模型可以帮助不同厂商的设备之间实现互操作性,因为它们可以基于相同的模型进行交互。这样,不同厂商的设备可以更容易地集成到一个统一的物联网平台中。

  3. 数据标准化:通过定义物模型,可以规范物联网设备产生的数据格式和结构,使得不同设备生成的数据具有一致的语义和格式,从而方便数据的处理和分析。

  4. 应用开发和集成:基于物模型,开发人员可以更容易地开发应用程序来与物联网设备进行交互,因为他们可以依据标准的模型进行开发,而无需过多关注底层的设备细节。

举例来说,一家智能家居公司可以通过使用物模型来描述各种智能设备(如智能灯泡、智能插座、温度传感器等),并为这些设备定义标准的接口和行为。这样用户可以更轻松地管理和控制这些设备,同时可以让不同厂商的设备无缝集成到他们的智能家居平台中。

因此,物模型在物联网中的应用有助于提高设备管理的效率、促进设备之间的互操作性,并为应用开发提供了标准化的基础。

4.智能电灯物模型定义举例

和编程语言一样,作为一种模型语言,物模型的数据也有不同的数据类型。它们主要包括六种: 布尔型(Bool):非真即假的二值型变量。例如,开关功能只有开、关两种状态。 整数型(Int):可用于线性调节的整数变量。例如,电灯的亮度是一个整数范围。 字符串型(String):以字符串形式表达的功能点。例如,灯的位置。 浮点型(Float):精度为浮点型的功能点。例如,电压值的范围是 0.0 - 24.0。 枚举型(Enum):自定义的有限集合值。例如,灯的颜色有白色、红色、黄色等。 时间型(Timestamp):String 类型的 UTC 时间戳。 对于整数型、浮点型的数值,它们的单位可以是百分比、电压、米等。 物模型一般是用 JSON 格式来表述模型元素。JSON 是 Web 开发中,经常使用的数据格式,相比于 XML,它更加简洁、清晰,也更轻量级。

电灯开关属性:布尔型,必须有的属性。

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

电灯事件:电压监测,电压是需要监控的数值,当电压低时,可以上报这个事件。这个事件有一个参数,即电压值,数据类型是浮点类型。

 {
   "id": "low_voltage",      //事件唯一标识
   "name": "LowVoltage",      //事件名称
   "desc": "Alert for device voltage is low",  //事件的描述
   "type": "alert",          //事件的类型,告警
   "required": false,        //表示此属性是否必需包含,否
   "params": [                //事件的参数
     {
       "id": "voltage",        //事件参数的唯一标识
       "name": "Voltage",      //事件参数的名称
       "desc": "Current voltage",  //参数的描述
       "define": {                 //参数的数值定义
         "type": "float",          //数值类型,浮点数
         "unit": "V",              //数值的单位,伏
         "step": "1",              //数值变化的步长,1
         "min": "0.0",              //数值的最小值
         "max": "24.0",             //数值的最大值
         "start": "1"                //事件的起始值
       }
     }
   ]
 }
 

电灯操作:比如控制电灯开关。定义略过。

电灯物模型完整定义:

{
  "version": "1.0",            //模型版本
  "properties": [              //属性列表
    {
      "id": "power_switch",    //电灯开关属性
      "name": "电灯开关",
      "desc": "控制电灯开灭",
      "required": true,
      "mode": "rw",
      "define": {
        "type": "bool",
        "mapping": {
          "0": "关",
          "1": "开"
        }
      }
    },
    {
      "id": "brightness",        //亮度属性
      "name": "亮度",
      "desc": "灯光亮度",
      "mode": "rw",
      "define": {
        "type": "int",
        "unit": "%",
        "step": "1",
        "min": "0",
        "max": "100",
        "start": "1"
      }
    },
    {
      "id": "color",            //电灯颜色属性
      "name": "颜色",
      "desc": "灯光颜色",
      "mode": "rw",
      "define": {
        "type": "enum",
        "mapping": {
          "0": "Red",
          "1": "Green",
          "2": "Blue"
        }
      }
    },
    {
      "id": "color_temp",        //色温属性
      "name": "色温",
      "desc": "灯光冷暖",
      "mode": "rw",
      "define": {
        "type": "int",
        "min": "0",
        "max": "100",
        "start": "0",
        "step": "10",
        "unit": "%"
      }
    }
  ],
  "events": [                        //事件列表
    {
      "id": "status_report",          //运行状态报告
      "name": "DeviceStatus",
      "desc": "Report the device status",
      "type": "info",
      "required": false,
      "params": [                      //事件参数列表
        {
          "id": "status",
          "name": "running_state",
          "desc": "Report current device running state",
          "define": {
            "type": "bool",
            "mapping": {
              "0": "normal",
              "1": "fault"
            }
          }
        },
        {
          "id": "message",
          "name": "Message",
          "desc": "Some extra message",
          "define": {
            "type": "string",
            "min": "0",
            "max": "64"
          }
        }
      ]
    },
    {
      "id": "low_voltage",            //低电压告警事件
      "name": "LowVoltage",
      "desc": "Alert for device voltage is low",
      "type": "alert",
      "required": false,
      "params": [
        {
          "id": "voltage",
          "name": "Voltage",
          "desc": "Current voltage",
          "define": {
            "type": "float",
            "unit": "V",
            "step": "1",
            "min": "0.0",
            "max": "24.0",
            "start": "1"
          }
        }
      ]
    },
    {
      "id": "hardware_fault",            //硬件错误事件
      "name": "Hardware_fault",
      "desc": "Report hardware fault",
      "type": "fault",
      "required": false,
      "params": [
        {
          "id": "name",
          "name": "Name",
          "desc": "Name like: memory,tf card, censors ...",
          "define": {
            "type": "string",
            "min": "0",
            "max": "64"
          }
        },
        {
          "id": "error_code",
          "name": "Error_Code",
          "desc": "Error code for fault",
          "define": {
            "type": "int",
            "unit": "",
            "step": "1",
            "min": "0",
            "max": "2000",
            "start": "1"
          }
        }
      ]
    }
  ],
  "actions": [],                  //动作列表
  "profile": {                    //产品参数
    "ProductId": "8D1GQLE4VA",    //产品ID
    "CategoryId": "141"            //产品分类编号
  }
}
 

创建模型–拷贝和继承 创建模型的时候,有拷贝和继承两种模式,这两种创建模式的不同主要体现在模型关系上。

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

**“继承”**模式就是面向对象编程中的继承概念,新建模型被定义为“子模型”,被继承的模型定义为“父模型”。 继承的具体特征是:
1.子模型继承父模型的所有要素,且继承的元素无法被修改。
2.子模型可以再被继承,支持多层的继承关系。
3.子模型可以创建独立的要素,但子模型中新增的要素不可以和所有上级父模型中的元素重名。
4.当父模型中的元素发生变更时,子模型中继承自父模型的元素同步变更,保持与父模型一致。

举例,如果电灯要增加安装位置的属性,可以继承已有的模型,然后再增加安装位置的属性:

{
...
{
      "id": "name",                  //灯位置属性
      "name": "灯位置名称",
      "desc": "灯位置名称:书房、客厅等",
      "mode": "rw",
      "required": false,
      "define": {
        "type": "string",
        "min": "0",
        "max": "64"
      }
    }
...
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值