物模型
物联网终极目标一定是基于设备采集数据赋能业务,实现数字业务化。因此物联网平台在通道能力和物模型能力之上,进一步提供了设备智能运维、数据分析、可视化、数字孪生等高价值服务,帮助用户将物(Things)数字化后产生真正的业务价值。
定义
物模型是物理实体在数字世界的投影。使用物模型接入物联网平台,简化了接入流程和软硬件开发,同时可以更好地支持设备的扩展。
物模型定义了一套设备功能建模的方法, 使用属性/事件/服务三个维度来管理设备.从属性、服务和事件三个维度,分别描述了该实体是什么、能做什么、可以对外提供哪些信息。定义了物模型的这三个维度,即完成了产品功能的定义。
- 属性:用于描述设备运行时具体信息和状态。例如,环境监测设备所读取的当前环境温度、智能灯开关状态、电风扇风力等级等。属性可分为读写和只读两种类型,即支持读取和设置属性。
- 事件:设备运行时,主动上报给云端的信息,一般包含需要被外部感知和处理的信息、告警和故障。事件中可包含多个输出参数。例如,某项任务完成后的通知信息;设备发生故障时的温度、时间信息;设备告警时的运行状态等。事件可以被订阅和推送。
- 服务:指设备可供外部调用的指令或方法。服务调用中可设置输入和输出参数。输入参数是服务执行时的参数,输出参数是服务执行后的结果。相比于属性,服务可通过一条指令实现更复杂的业务逻辑,例如执行某项特定的任务。服务分为异步和同步两种调用方式。
类型 | 数据 | 说明 | 功能标识符 |
---|---|---|---|
属性 | 布尔型、整数型、字符型、浮点型、枚举型和时间型等6种基本数据类型 | 用于描述设备的实时状态,支持读取和设置,如模式、亮度、开关等。 | PropertiesId |
事件 | 告警、故障和信息三种类型,可添加多个输出参数 | EventId | |
行为或服务 | 输入参数和输出参数 | 用于描述复杂的业务逻辑 | ActionId |
布尔型:非真即假的二值型变量。例如,开关功能。
整数型:可用于线性调节的整数变量。例如,空调的温度。
字符型:以字符串形式表达的功能点,例如,灯的位置。
浮点型:精度为浮点型的功能点。例如,压力值的范围:0.0 - 24.0。
枚举型:自定义的有限集合值。例如,灯的颜色:白色、红色、黄色等。
时间型:string 类型的 UTC 时间戳(毫秒)。
需要物联网的场合,必然是需要知道或者改变物体的某些信息或者状态。比如,你需要知道现在瓶子里的水是多少度,能不能直接喝,水的温度是物体的属性值;再比如,你想知道孩子的体温是不是超过37度,是不是有发烧迹象,属性超过某项阈值是要触发事件;还有,你想要控制家里的灯,那么灯要提供开关供你控制,灯提供了这项控制服务。物模型,会将现实世界的物体简单抽象成:属性,事件,服务,以便于在数字世界来使用。
Edgex框架的Meta Data中有这样的物模型,可以让南侧设备提供属性,事件和服务。物模型的定义,遵循一定的语法逻辑,通过YAML 文档形式输入到元数据当中。系统自动能让物模型和设备,及设备服务关联,让南侧的设备能够变成一个个的数字化映射,从而提供属性、事件和服务。
TSL
物联网平台通过定义一种物的描述语言来描述物模型模块和功能,称为TSL(Thing Specification Language)。
物模型TSL文件格式为JSON。
{
"version": "1.0",
"profile": {
"ProductId": "2300UMK31M",
"CategoryId": "3"
},
"properties": [
{
"id": "power_switch",
"name": "电灯开关",
"desc": "控制电灯开灭",
"required": true,
"mode": "rw",
"define": {
"type": "bool",
"mapping": {
"0": "关",
"1": "开"
}
}
},
{
"id": "color",
"name": "颜色",
"desc": "灯光颜色",
"mode": "rw",
"define": {
"type": "enum",
"mapping": {
"0": "Red",
"1": "Green",
"2": "Blue"
}
}
},
{
"id": "brightness",
"name": "亮度",
"desc": "灯光亮度",
"mode": "rw",
"define": {
"type": "int",
"unit": "%",
"step": "1",
"min": "0",
"max": "100",
"start": "1"
}
},
{
"id": "name",
"name": "灯位置名称",
"desc": "灯位置名称:书房、客厅等",
"mode": "rw",
"required": false,
"define": {
"type": "string",
"min": "0",
"max": "64"
}
}
],
"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": [
{
"id": "unlock",
"name": "开灯行为检测",
"desc": "用于描述开灯的动作",
"input": [
{
"id": "open",
"name": "开关",
"define": {
"type": "bool",
"mapping": {
"0": "关",
"1": "开"
}
}
},
{
"id": "user",
"name": "用户",
"define": {
"type": "string",
"min": "0",
"max": "2048"
}
}
],
"output": [
{
"id": "user",
"name": "用户",
"define": {
"type": "string",
"min": "0",
"max": "2048"
}
},
{
"id": "time",
"name": "开灯时间",
"define": {
"type": "timestamp"
}
},
{
"id": "state",
"name": "灯的状态",
"define": {
"type": "bool",
"mapping": {
"0": "关",
"1": "开"
}
}
}
],
"required": false
}
]
}
物模型协议
产品定义物模型后,设备可以根据物模型中的定义上报属性、事件,并可对设备下发控制指令。物模型协议包括了以下几部分。
设备属性上报:设备端将定义的属性根据设备端的业务逻辑向云端上报。
设备远程控制:从云端向设备端下发控制指令,即从云端设置设备的可写属性。
获取设备最新上报信息:获取设备最新的上报数据。
设备事件上报:设备可根据定义的物模型中的事件,当事件被触发,则根据设备事件上报的协议上报告警、故障等事件信息。
设备行为调用:云端可以通过 RPC 的方式通知设备执行某个动作行为,适用于应用需要实时获取设备的执行结果的场景。
设备初始信息上报:设备连接平台时上报的初始信息,便于小程序或 App 展示设备详细信息,如设备 MAC 地址、IMEI 号。
用户删除设备:用户在腾讯连连小程序或用户自主品牌小程序删除设备时由云端发送给设备的通知消息,便于设备重置或网关类设备清除子设备数据。
设备属性上报:设备端将定义的属性根据设备端的业务逻辑向云端上报。
设备属性上行请求 Topic: $thing/up/property/{ProductID}/{DeviceName}
设备属性上行响应 Topic: $thing/down/property/{ProductID}/{DeviceName}
设备远程控制:从云端向设备端下发控制指令,即从云端设置设备的可写属性。
下发 Topic: $thing/down/property/{ProductID}/{DeviceName}
响应 Topic: $thing/up/property/{ProductID}/{DeviceName}
获取设备最新上报信息:获取设备最新的上报数据。
请求 Topic: $thing/up/property/{ProductID}/{DeviceName}
响应 Topic: $thing/down/property/{ProductID}/{DeviceName}
设备事件上报:设备可根据定义的物模型中的事件,当事件被触发,则根据设备事件上报的协议上报告警、故障等事件信息。
设备事件上行请求 Topic: $thing/up/event/{ProductID}/{DeviceName}
设备事件上行响应 Topic: $thing/down/event/{ProductID}/{DeviceName}
设备行为调用:云端可以通过 RPC 的方式通知设备执行某个动作行为,适用于应用需要实时获取设备的执行结果的场景。
应用调用设备行为 Topic: $thing/down/action/{ProductID}/{DeviceName}
设备响应行为执行结果 Topic: $thing/up/action/{ProductID}/{DeviceName}
设备初始信息上报:设备连接平台时上报的初始信息,便于小程序或 App 展示设备详细信息,如设备 MAC 地址、IMEI 号。
上行请求 Topic: $thing/up/property/{ProductID}/{DeviceName}
下行响应 Topic: $thing/down/property/{ProductID}/{DeviceName}
用户删除设备:用户在腾讯连连小程序或用户自主品牌小程序删除设备时由云端发送给设备的通知消息,便于设备重置或网关类设备清除子设备数据。
下发用户删除设备 Topic: $thing/down/service/{ProductID}/{DeviceName}
用户绑定设备通知消息
下发用户绑定设备通知消息 Topic: $thing/down/service/{ProductID}/{DeviceName}
位置服务-围栏告警消息下发
下发围栏告警消息Topic: $thing/down/service/{ProductID}/{DeviceName}
设备响应回复 Topic: $thing/up/service/{ProductID}/{DeviceName}
MQTT数据上报格式(原来我的)
{"sensor":"BMP280", "timestamp": "%s", "readings":[{"name":"pressure", "value":"%3.3f"}]}