Advertisement
__Dave__

Flux query power usage

Sep 12th, 2022
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. import "influxdata/influxdb/monitor"
  2. import "experimental"
  3. import "date"
  4.  
  5. monthStart = date.truncate(t: now(), unit: 1mo)
  6. monthEnd = experimental.subDuration(d: 1d, from: experimental.addDuration(d: 1mo, to: date.truncate(t: now(), unit: 1mo)))
  7. startDate = experimental.subDuration(d: 1y, from: monthStart)
  8. stopDate = experimental.subDuration(d: 0y, from: monthEnd)
  9.  
  10. data = from(bucket: "openhab_db/autogen")
  11. |> range(start: startDate, stop: stopDate)
  12. |> filter(fn: (r) => r["_measurement"] == "EliasPCRoomRelay")
  13. |> filter(fn: (r) => r["_field"] == "value")
  14. |> map(fn: (r) => ({r with _level: string(v: r._value)}))
  15.  
  16. toOn = data
  17. |> monitor.stateChanges(toLevel: "1")
  18.  
  19. toOff = data
  20. |> monitor.stateChanges(toLevel: "0")
  21.  
  22. union(tables: [toOn, toOff])
  23. |> group(columns: ["_measurement"], mode:"by")
  24. |> sort(columns: ["_time"], desc: false)
  25. |> elapsed(unit: 1m)
  26. |> filter(fn: (r) => r._value == 1)
  27. |> aggregateWindow(every: 1mo, fn: sum, column: "elapsed")
  28. |> map(fn: (r) => ({ r with hours: (float(v: r.elapsed/60)) }))
  29. |> map(fn: (r) => ({ r with energy: 0.8*(float(v: r.elapsed/60)) }))
  30. |> timeShift(duration: -1mo)
  31. |> keep(columns: ["_time", "_measurement", "energy"])
  32.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement