物模型介绍
大约 8 分钟introthing
物模型介绍
物模型(Thing Model)
是物联网系统中用于描述设备特性和行为的一种标准化数据模型。它为设备提供了一种抽象描述,涵盖设备的属性、命令和事件等信息。物模型在物联网平台中起着至关重要的作用,确保设备与平台之间能够进行有效的通信和数据交互。以下是物模型的详细介绍。
1. 物模型的定义
- 物模型是设备数字化描述的一种标准化方法。它定义了设备的属性(property)、命令(指令/服务)(command)和事件(event),使得不同设备能够以统一的方式与物联网平台进行交互。
- 物模型数据存储在时序库中,默认的时序字段为:
time
。
2. 物模型的组成部分
物模型通常由以下几部分组成:
- 属性(property):描述设备的静态和动态特性,例如温度、湿度、设备状态等。属性可以是可读的、可写的或可读写的。
- 命令(command):描述设备可以执行的操作,例如开关操作、模式切换等。命令通常包括输入参数和输出结果。
- 事件(event):描述设备在特定条件下触发的通知或报警信息,例如温度超限报警、电量低报警等。事件通常包含触发条件和事件数据。
3. 物模型的优势
- 标准化:物模型提供了统一的设备描述标准,使得不同厂商的设备能够在同一平台上无缝集成和互操作。
- 可扩展性:物模型支持自定义扩展,用户可以根据具体需求定义新的属性、命令和事件。
- 易于管理:通过物模型,平台能够自动识别和管理设备的各种功能,简化了设备接入和管理的复杂性。
4. 物模型的应用场景
物模型广泛应用于各种物联网场景,包括但不限于:
- 智能家居:通过物模型描述家庭设备(如灯光、温控器、安防设备等)的属性和行为,实现设备的智能化控制和联动。
- 智慧城市:用于描述城市基础设施(如交通灯、路灯、垃圾桶等)的特性,支持城市管理和命令的智能化。
- 工业物联网:描述工业设备(如传感器、执行器、机器设备等)的属性和操作,实现设备的远程监控和控制。
- 智能农业:用于描述农业设备(如土壤传感器、灌溉系统、天气监测设备等)的属性和行为,支持精准农业管理。
5. 物模型的实现方式
物模型的实现通常采用以下几种方式:
- JSON Schema:通过JSON格式定义设备的属性、命令和事件,便于机器解析和处理。
- XML Schema:使用XML格式描述物模型,具有良好的扩展性和可读性。
- 自定义协议:一些物联网平台可能采用自定义的协议和格式来实现物模型,以满足特定的业务需求。
6. 物模型的JSON格式
以下示例为所有参数集合,不代表所有参数都是必须的,具体参数根据实际情况进行定义。
{
"schema": "物模型结构定义的访问URL。",
"profile": {
"productKey": "当前产品的ProductKey。"
},
"properties": [
{
"identifier": "属性唯一标识符(物模型模块下唯一)。",
"name": "属性名称",
"accessMode": "属性读写类型:只读(r)或读写(rw)。",
"required": "是否是标准功能的必选属性:是(true),否(false)。",
"dataType": {
"type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的值方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)。",
"specs": {
"min": "参数最小值(int、float、double类型特有)。",
"max": "参数最大值(int、float、double类型特有)。",
"unit": "属性单位(int、float、double类型特有,非必填)。",
"unitName": "单位名称(int、float、double类型特有,非必填)。",
"size": "数组元素的个数,最大512(array类型特有)。",
"step": "步长(text、enum类型无此参数)。",
"length": "数据长度,最大10240(text类型特有)。",
"0": "0的值(bool类型特有)。",
"1": "1的值(bool类型特有)。",
"item": {
"type": "数组元素的类型(array类型特有)。"
}
}
}
}
],
"events": [
{
"identifier": "事件唯一标识符(物模型模块下唯一,其中post是默认生成的属性上报事件)。",
"name": "事件名称。",
"desc": "事件描述。",
"type": "事件类型(info、alert、error)。",
"required": "是否是标准功能的必选事件:是(true),否(false)。",
"outputData": [
{
"identifier": "参数唯一标识符。",
"name": "参数名称。",
"dataType": {
"type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的值方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)。",
"specs": {
"min": "参数最小值(int、float、double类型特有)。",
"max": "参数最大值(int、float、double类型特有)。",
"unit": "属性单位(int、float、double类型特有,非必填)。",
"unitName": "单位名称(int、float、double类型特有,非必填)。",
"size": "数组元素的个数,最大512(array类型特有)。",
"step": "步长(text、enum类型无此参数)。",
"length": "数据长度,最大10240(text类型特有)。",
"0": "0的值(bool类型特有)。",
"1": "1的值(bool类型特有)。",
"item": {
"type": "数组元素的类型(array类型特有)。"
}
}
}
}
],
"method": "事件对应的方法名称(根据identifier生成)。"
}
],
"commands": [
{
"identifier": "命令唯一标识符(物模型模块下唯一,其中set/get是根据属性的accessMode默认生成的命令)。",
"name": "命令名称。",
"desc": "命令描述。",
"required": "是否是标准功能的必选命令:是(true),否(false)。",
"callType": "async(异步调用)或sync(同步调用)。",
"inputData": [
{
"identifier": "入参唯一标识符。",
"name": "入参名称。",
"dataType": {
"type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的值方法相同)、struct(结构体类型,可包含前面7种类型,下面使用"specs":[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)。",
"specs": {
"min": "参数最小值(int、float、double类型特有)。",
"max": "参数最大值(int、float、double类型特有)。",
"unit": "属性单位(int、float、double类型特有,非必填)。",
"unitName": "单位名称(int、float、double类型特有,非必填)。",
"size": "数组元素的个数,最大512(array类型特有)。",
"step": "步长(text、enum类型无此参数)。",
"length": "数据长度,最大10240(text类型特有)。",
"0": "0的值(bool类型特有)。",
"1": "1的值(bool类型特有)。",
"item": {
"type": "数组元素的类型(array类型特有)。"
}
}
}
}
],
"outputData": [
{
"identifier": "出参唯一标识符。",
"name": "出参名称。",
"dataType": {
"type": "属性类型: int(原生)、float(原生)、double(原生)、text(原生)、date(String类型UTC毫秒)、bool(0或1的int类型)、enum(int类型,枚举项定义方法与bool类型定义0和1的方法相同)、struct(结构体类型,可包含前面7种类型,下面使用specs:[{}]描述包含的对象)、array(数组类型,支持int、double、float、text、struct)。",
"specs": {
"min": "参数最小值(int、float、double类型特有)。",
"max": "参数最大值(int、float、double类型特有)。",
"unit": "属性单位(int、float、double类型特有,非必填)。",
"unitName": "单位名称(int、float、double类型特有,非必填)。",
"size": "数组元素的个数,最大512(array类型特有)。",
"step": "步长(text、enum类型无此参数)。",
"length": "数据长度,最大10240(text类型特有)。",
"0": "0的值(bool类型特有)。",
"1": "1的值(bool类型特有)。",
"item": {
"type": "数组元素的类型(array类型特有)。"
}
}
}
}
],
"method": "命令对应的方法名称(根据identifier生成)。"
}
],
"blockId": "自定义模块的唯一标识符,模块ID。",
"blockName": "自定义模块名称。",
"blocks": [
{
"blockId": "自定义模块的唯一标识符,模块ID。",
"blockName": "自定义模块名称。",
"productKey": "产品ProductKey。"
}
]
}
7. 物模型的未来发展
随着物联网技术的不断发展,物模型也在不断演进和完善。未来的物模型将更加智能化和自动化,支持更多的设备类型和应用场景,并且在数据隐私和安全性方面将有更高的要求。
8. 总结
物模型作为物联网系统中设备描述和管理的核心技术,为实现设备的智能化和互联互通提供了坚实的基础。通过物模型,物联网平台能够更高效地管理设备、处理数据并提供智能命令,从而推动物联网应用的发展和普及。