跳至主要內容

设备属性

约 3314 字大约 11 分钟

设备属性

在使用 ThingsCloud 平台的过程中,理解设备属性的相关概念和逻辑,对于接入和管理物联网设备,以及在具体场景中充分应用,都至关重要。

本节将深入介绍设备属性的概念,以及属性当前值和属性历史数据的使用逻辑。

什么是设备属性?

在物联网设备中,属性是指设备自身的某种状态,例如各种测量值、开关状态、传感器数值等。

举几个常见的例子:

  • 智能电表的 “当前电量读数” 属性显示了电表的实时状态,即已记录的电量使用量,该值会随着用户的用电情况而动态变化。
  • 空气质量监测设备中的 “PM2.5 浓度”、“二氧化碳浓度” 等属性都是测量值,记录了关于空气质量状况的重要信息。
  • 带有多路继电器的 RTU,每一路的 “继电器状态” 属性可以是 “闭合” 或 “断开”,可通过平台来改变这些属性,从而远程控制继电器的断开或闭合。
  • 带有开关功能的智能插座,其 “电源开关状态” 属性可以是 “开” 或 “关”,反映设备的实际工作状态。
  • 智能手环的 “运动步数”、“心率” 等属性,能够反映用户的运动状态和健康状况,是设备实现健康监测功能的重要数据来源。

由此可见,一个设备可能包含多个属性,我们通过这些设备属性,来记录和管理设备的各种状态。

由于设备的状态会不断发生变化,因此属性的值也会随之变化,这就产生了 属性当前值属性历史数据 两种概念,它们有着不同的使用逻辑,后边我们会详细介绍。

如何改变设备属性值?

那么,我们如何改变设备的属性值呢?ThingsCloud 支持以下几种方式:

属性上报

通过设备端的 属性上报 来实现平台设备属性的更新。

例如:设备端将温度、湿度、压力、光照、开关状态、继电器状态等信息上报到平台,平台会自动更新设备属性当前值,同时也记录到属性历史数据中。

属性上报的方法请参考 MQTT 接入指南

在属性上报过程中,设备端需要按照平台规定的格式,将属性数据发送到平台。平台接收到属性数据后,会根据属性标识符来更新相应的设备属性。属性上报是实现设备状态实时更新的关键步骤,它确保了平台上的设备属性与设备端实际状态保持一致。

以 MQTT 属性上报为例,设备端通过 JSON 格式来上报设备属性,例如上报温度数值,如下:

{
  "temperature": 25,
}

也可以一次上报多个属性值,例如:

{
  "humidity": 50,
  "pressure": 1013,
  "light": 500,
}

或者,一次上报多个不同数据类型的属性值,例如:

{
  "temperature": 25,
  "humidity": 50,
  "pressure": 1013,
  "light": 500,
  "version": "1.0.0",
  "iccid": "8986010123456789012",
  "location": {
    "lat": 39.9042,
    "lng": 116.4074
  }
}

对于不支持直接上报 JSON 格式数据的设备,ThingsCloud 支持多种自定义数据格式,例如 HEX 格式、Plaintext 格式,详情请浏览 自定义数据流

属性下发

在平台更新属性值,并同时向设备端下发指令,以更新设备的状态。我们将这种方式称为属性下发。

这种方式通常用于远程控制设备,例如改变设备的继电器开关、工作模式,以及设置阈值、更新配置参数等。

属性下发可通过控制台、看板、App 面板或 API 实现。

例如:在控制台中,将开关状态属性的开关值设置为 true,平台会将该指令下发到设备端,设备端接收到指令后,会执行相应的动作。

若通过 API 来下发属性,例如下发继电器闭合,如下:

{
  "relay": true,
}

或者一次下发控制多个继电器,如下:

{
  "relay1": false,
  "relay2": true,
  "relay3": false,
  "relay4": false
}

云端属性更新

在平台更新属性值,但不下发到设备。也就是说设备端并不知道也无需关心平台的这类属性。

例如:用户在平台设置设备的智能模式,用于平台的消息规则中判断是否执行设备联动。

云端属性更新同样可通过控制台、看板、App 面板或 API 实现。

属性标识符

在 ThingsCloud 中,属性标识符是设备属性的唯一标识。同一个设备中,属性标识符不能重复。

属性标识符中只能包含:英文大小写字母、数字、下划线、横线,长度不超过 64 个字节。

例如:

属性名称属性标识符
温度temperature
土壤湿度humidity
大气压力pressure
光照强度light
开关状态switch
继电器状态relay
固件版本version
ICCIDiccid
位置经纬度location
位置经纬度location

以上的属性标识符只是举例,实际使用中,您可以自行约定属性标识符,只需在设备端和平台保持一致即可。例如:

  • 温度的属性标识符可以是 temperaturetemp
  • 湿度的属性标识符可以是 humidityhumi
  • 压力的属性标识符可以是 pressurepress
  • 光照的属性标识符可以是 lightlightness
  • 当设备存在多个温度属性,标识符可以分别定义为:temperature1temperature2temperature3

属性的数据类型

属性值支持多种数据类型,包括:数值、开关量、文本、键值对、列表等。

属性的数据类型决定了属性值的取值范围和操作方式。例如:

  • 温度属性的数据类型是数值,其值可以是任意实数。
  • 开关属性的数据类型是开关量,其值只能是 true 或 false。

再举几个例子如下:

设备名称属性标识符数据类型属性值
温度temperature数值25.5℃
土壤湿度humidity数字50%
大气压力pressure数字1013hPa
光照强度light数字500lx
开关状态switch开关量true
继电器状态relay开关量false
固件版本version文本"1.0.0"
ICCIDiccid文本"8986010123456789012"
位置经纬度location键值对{"lat": 39.9042, "lng": 116.4074}

属性定义

通过设备类型的属性定义,您可以为设备属性预先定义属性名称、数据类型以及其它约束条件,并且为不同类型的设备创建标准化的属性模板,确保设备属性的一致性和可管理性。请参考 属性定义

属性当前值

设备属性当前值,代表着设备属性最后一次更新的值。

例如,对于一个温度传感器设备,其当前温度值会随着传感器的测量和数据上传而不断更新,而平台所记录的属性当前值就是最新的那个测量结果。

如何查看属性当前值

在控制台进入任意设备详情页的概览中,即可查看设备属性的当前值。

如何删除设备属性

在控制台进入任意设备详情页的属性列表中,可勾选多个属性,点击移除选中属性,如下图:

值得注意的是,删除设备属性只是删除属性的当前值,并不会自动删除属性历史数据。如果希望删除属性历史数据,需要通过 删除属性历史数据 来实现。

在 ThingsCloud 物联网平台中,删除属性当前值的操作是不可逆的。一旦删除,平台将不再保留该属性的当前值,并且无法通过历史数据来还原该属性的当前值,只能等待下一次改变属性时生成新的属性当前值。因此,在执行删除操作之前,请务必确认是否真的需要删除该属性的当前值。

对于已经删除的设备属性,如果再次使用同样的属性标识符,仍然可以浏览属性历史数据,除非您已经删除了属性历史数据。

属性历史数据

与属性当前值不同,属性历史数据是一个时间序列。它记录了设备属性在不同时间点的值,形成了一条随时间变化的数据序列,也称为“时序数据”。

属性历史数据能够反映设备属性在过去一段时间内的变化趋势。比如,对于温度传感器设备,历史数据可以显示出一天内温度的波动情况,有助于分析设备的工作环境变化和性能稳定性。

再举个例子,智能电表用于记录家庭或企业的用电情况,它的一个关键属性是 “总有供电能”,也就是耗电量(度)。每过一段时间(比如每隔 15 分钟),电表会上报最新值到 ThingsCloud 平台。

假设在一天内,电表上传了以下耗电量数据:

时间耗电量(度)
上午 8 点 00 分0.25
上午 8 点 15 分0.3
上午 8 点 30 分0.33
上午 8 点 45 分0.38
......
晚上 10 点 00 分3.5

这些按照时间顺序记录的耗电量数据就是属性历史数据。通过这些数据,可以分析出一天内用电的高峰和低谷时段。例如,我们可以发现下午 6 点 - 7 点之间耗电量增长较快,可能是因为这个时间段是园区使用电器较多的时候。并且,ThingsCloud 还可以将这些数据用于统计每日、每月的用电量,用于电费计算或者节能分析。

再比如,在一个工厂车间里,有多个温度传感器来监测生产设备的运行温度。每个传感器都有 “温度” 这个属性。以其中一个传感器为例,它每隔 1 分钟记录一次温度并上传到 ThingsCloud 平台,其历史数据可能如下:

时间温度(℃)
上午 9 点 00 分25
上午 9 点 01 分25.2
上午 9 点 02 分25.3
上午 9 点 03 分25.1
......
下午 5 点 00 分28

这组温度历史数据可以帮助工程师了解设备在不同时间的温度变化情况。如果在某一时刻温度突然升高,比如从 25℃快速上升到 35℃,通过查看历史数据就能追溯这个变化发生的时间点。同时,长期的温度历史数据还可以用于预测设备是否可能因为温度过高而出现故障,从而提前进行维护。

如何查看属性历史数据

在控制台的设备详情页中,点击任意属性的 “查看历史数据” 图标,即可查看属性历史数据,如下图:

对于数值类型的属性,还可以点击 “查看时序图表” 图标,查看属性历史数据的时序图表,如下图:

如何删除属性历史数据

在控制台进入任意设备详情页的属性列表中,点击删除属性历史数据,如下图:

可以选择删除历史数据的时间范围,如下图:

删除历史数据的时间范围支持以下几种:

  • 全部历史数据:这一操作会将设备的所有属性历史数据全部清除。这种情况适用于希望重新开始记录数据,或者不再需要历史数据的场景。
  • 指定时间以后:可以选择删除指定时间以后的历史数据。例如,某个时间点之后的数据出现了异常,可以选择删除该时间点之后的数据。
  • 指定时间以前:可以选择删除指定时间以前的历史数据。例如,只关心最近一个月内的数据,可以删除一个月以前的所有历史数据。
  • 指定时间范围:可以指定一个具体的时间范围来删除属性历史数据,需要设置起始时间和结束时间。

需要注意的是,删除历史数据操作时,平台不支持仅对特定的属性删除历史数据。也就是说,在选定的时间范围内,设备下所有属性的历史数据都会被删除。这是因为在属性历史数据的存储机制下,每个时间点的数据是一个整体的概念,如果单独删除某个属性,这将破坏数据的完整性和一致性,也使得使用逻辑变得更加复杂。