目录
引言
ThingsBoard 是一个开源的物联网平台,提供了设备管理、数据收集、处理和可视化等功能。规则链是 ThingsBoard 中的一个强大功能,允许用户定义复杂的业务逻辑来处理设备上报的数据。在规则链中,
Save Timeseries
节点用于将数据保存为时间序列数据,这对于数据持久化和后续分析非常有用。
1. Save Timeseries 节点简介
Save Timeseries
节点的主要作用是在规则链执行过程中将数据保存为时间序列数据。通过 Save Timeseries
节点,可以将设备上报的数据或其他处理结果持久化存储,以便后续查询和分析。这在设备状态监测、数据统计和业务逻辑处理中非常有用。
2. 节点配置
- 实体类型:选择要保存时间序列数据的实体类型,通常为设备(DEVICE)。
- 实体 ID:指定要保存时间序列数据的实体 ID,通常是设备 ID。
- 数据键值对:设置要保存的时间序列数据键值对,可以是静态值、动态表达式或消息中的属性。
- 时间戳:可以选择使用当前时间或自定义时间戳。
2.1 基本配置示例
{
"entityType": "DEVICE",
"entityId": "${msg.deviceId}",
"ts": "${msg.ts}",
"values": {
"temperature": "${msg.temperature}",
"humidity": "${msg.humidity}"
}
}
3. 使用场景
Save Timeseries
节点在多种场景下都非常有用,特别是在需要数据持久化和后续分析时。以下是一些具体的应用场景:
3.1 设备状态监测
在设备状态监测系统中,需要将设备上报的状态数据保存为时间序列数据,以便后续查询和监控。
{
"entityType": "DEVICE",
"entityId": "${msg.deviceId}",
"ts": "${msg.ts}",
"values": {
"temperature": "${msg.temperature}",
"humidity": "${msg.humidity}",
"pressure": "${msg.pressure}"
}
}
3.2 数据统计
在数据统计系统中,需要将设备上报的数据保存为时间序列数据,以便进行数据分析和报表生成。
{
"entityType": "DEVICE",
"entityId": "${msg.deviceId}",
"ts": "${msg.ts}",
"values": {
"energyConsumed": "${msg.energyConsumed}",
"waterUsage": "${msg.waterUsage}"
}
}
3.3 业务逻辑处理
在业务逻辑处理中,需要将处理结果保存为时间序列数据,以便后续使用。
{
"entityType": "DEVICE",
"entityId": "${msg.deviceId}",
"ts": "${msg.ts}",
"values": {
"orderCount": "${msg.orderCount}",
"revenue": "${msg.revenue}"
}
}
4. 实际项目中的应用
下面是一个实际项目中的例子,展示如何在智能家居系统中使用 Save Timeseries
节点。
4.1 项目背景
假设我们正在开发一个智能家居系统,该系统需要支持用户通过手机应用控制家中的灯光、空调等设备,并记录设备的状态和使用情况。此外,还需要实现实时反馈,确保用户能够及时了解操作结果。
4.2 项目需求
- 记录设备的状态,例如当前温度、湿度等。
- 记录设备的使用情况,例如开关次数、能耗等。
- 实现实时反馈,确保用户能够及时了解操作结果。
4.3 实现步骤
-
部署设备:
- 在家中安装智能灯光、空调等设备,并连接到 ThingsBoard 平台。
-
创建规则链:
- 添加
Save Timeseries
节点,用于保存设备的状态和使用情况。 - 添加其他处理节点,如设备控制、状态查询和数据存储。
- 添加
-
配置规则链:
- 配置
Save Timeseries
节点,保存设备的状态数据。
- 配置
{
"entityType": "DEVICE",
"entityId": "${msg.deviceId}",
"ts": "${msg.ts}",
"values": {
"temperature": "${msg.temperature}",
"humidity": "${msg.humidity}",
"lightStatus": "${msg.lightStatus}",
"acStatus": "${msg.acStatus}"
}
}
- 配置
Save Timeseries
节点,保存设备的使用情况。
{
"entityType": "DEVICE",
"entityId": "${msg.deviceId}",
"ts": "${msg.ts}",
"values": {
"switchCount": "${msg.switchCount}",
"energyConsumed": "${msg.energyConsumed}"
}
}
- 处理数据:
- 根据设备上报的数据,使用
Save Timeseries
节点保存设备的状态和使用情况。
- 根据设备上报的数据,使用
// 处理设备上报的数据
public void processDeviceData(DeviceData data) {
// 保存设备状态
saveDeviceTimeseries(data.getDeviceId(), data.getTimestamp(), Map.of(
"temperature", data.getTemperature(),
"humidity", data.getHumidity(),
"lightStatus", data.getLightStatus(),
"acStatus", data.getAcStatus()
));
// 保存设备使用情况
saveDeviceUsage(data.getDeviceId(), data.getTimestamp(), Map.of(
"switchCount", data.getSwitchCount(),
"energyConsumed", data.getEnergyConsumed()
));
}
// 保存设备时间序列数据
private void saveDeviceTimeseries(String deviceId, long timestamp, Map<String, Object> values) {
JsonNode config = JsonNodeFactory.instance.objectNode()
.put("entityType", "DEVICE")
.put("entityId", deviceId)
.put("ts", timestamp)
.set("values", JsonNodeFactory.instance.objectNode().setAll(values));
saveTimeseriesNode.save(config);
}
// 保存设备使用情况
private void saveDeviceUsage(String deviceId, long timestamp, Map<String, Object> usage) {
JsonNode config = JsonNodeFactory.instance.objectNode()
.put("entityType", "DEVICE")
.put("entityId", deviceId)
.put("ts", timestamp)
.set("values", JsonNodeFactory.instance.objectNode().setAll(usage));
saveTimeseriesNode.save(config);
}
-
前端界面:
- 开发一个前端界面,显示设备的状态和使用情况。
- 提供一个界面,让用户能够查看和管理设备的状态和使用情况。
-
数据查询:
- 使用 ThingsBoard 的 REST API 或 GraphQL 查询,获取设备的状态和使用情况。
GET /api/plugins/telemetry/DEVICE/{deviceId}/values/timeseries?keys=temperature,humidity,lightStatus,acStatus,switchCount,energyConsumed&startTs={startTimestamp}&endTs={endTimestamp}
5. 总结
Save Timeseries
节点在 ThingsBoard 规则链中是一个非常有用的工具,可以帮助将数据保存为时间序列数据,实现数据持久化和后续分析。通过合理地使用Save Timeseries
节点,可以更好地管理和自动化系统中的各种操作。无论是在智能家居、工业监控还是其他物联网应用中,Save Timeseries
节点都能发挥重要作用。
🌐 项目地址
Things Vuehttp://thingsvue.tpson.cn:7772/#/login?redirect=/tb-home/index
账号:admin@thingsboard.org 密码:admin123456
🎽 安装使用
获取项目代码:
代码地址https://gitee.com/tpsonwell_admin/thingsvue