You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

InfluxDB:如何用Flux按天汇总stateDuration得到的设备‘on’总时长?

解决设备每日"on"状态总时长的Flux查询方案

直接用以下查询即可实现按天汇总设备"on"状态的总时长:

from(bucket: "hass")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "binary_sensor.slave_ch_active_boiler_caldaia_ot")
  |> filter(fn: (r) => r["_field"] == "state")
  |> filter(fn: (r) => r["domain"] == "binary_sensor")
  |> filter(fn: (r) => r["entity_id"] == "slave_ch_active_boiler_caldaia_ot")
  |> stateDuration(fn: (r) => r._value == "on", column: "state_duration", unit: 1s)
  // 按自然天划分时间窗口
  |> window(every: 1d)
  // 提取每个on时段的最终时长(stateDuration持续输出时,最后一条值为该时段总时长)
  |> last(column: "state_duration")
  // 汇总当天所有on时段的总时长
  |> sum(column: "state_duration")
  // 整理结果格式,移除窗口标记
  |> duplicate(column: "_stop", as: "_time")
  |> window(every: inf)

关键步骤说明

  • window(every: 1d):将数据按天分割为独立的处理单元,确保后续汇总只针对单天的数据。
  • last(column: "state_duration"):stateDuration在设备处于"on"状态时会持续输出递增的时长值,每个on时段的最后一条记录就是该时段的完整时长,用last()精准提取这个值。
  • sum(column: "state_duration"):把当天所有on时段的时长累加,得到该设备当天的总运行时长。
  • 最后两行的窗口处理:移除自动生成的窗口起止标记,将结果格式化为每个日期对应一个总时长的简洁形式。

内容的提问来源于stack exchange,提问作者Cybergatto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:57:20