如何使用Flux获取每个日历月内各传感器的最后值?
解决方案:获取月度累计传感器的日历月最后值
针对你的月度重置传感器,要获取每个自然日历月的最后值(即当月消耗),可以通过Flux的aggregateWindow函数实现,以下是调整后的查询:
from(bucket: "home") // 按需设置时间范围,比如-1y获取近一年完整月份数据 |> range(start: -1y, stop: now()) |> filter(fn: (r) => r["friendly_name"] =~ /1MON$/ and r["friendly_name"] !~ /^Main/) |> filter(fn: (r) => r["_field"] == "value") |> filter(fn: (r) => r["_measurement"] == "kWh") |> filter(fn: (r) => r["entity_id"] !~ /2$/) // 按自然日历月聚合,取每个月的最后值 |> aggregateWindow( every: 1mo, fn: last, offset: 0s, timeSrc: "_start" ) // 保留关键字段用于Grafana分组展示 |> keep(columns: ["_time", "_value", "friendly_name", "entity_id"])
关键说明:
aggregateWindow参数:every: 1mo指定按1个月的窗口聚合fn: last取每个窗口内的最后一个数据点——由于传感器月初归零后持续递增,月末的最后值就是当月总消耗offset: 0s+timeSrc: "_start"确保窗口严格对齐到自然日历月的起始(每月1日00:00),避免出现跨月的不完整窗口
- 时间范围设置:
避免选择跨月的自定义时间范围,建议用-1y(近一年)或Grafana预设的“Last 12 months”,确保覆盖完整的日历月 - 替换为max值:
如果想取当月最大值(和last值逻辑一致,因为传感器递增),只需把fn: last改成fn: max即可
Grafana可视化建议:
使用柱状图或折线图,X轴选择_time并设置格式为YYYY-MM,Y轴绑定_value,按friendly_name或entity_id分组,就能直观看到每个传感器的月度消耗数据。
内容的提问来源于stack exchange,提问作者Roberto Ferrari
相关产品推荐
相关产品推荐

