跳转到内容

Grafana 能耗仪表板

Grafana 能耗仪表板

本节介绍如何设计用于能耗监控的 Grafana 仪表板。学习完成后,您将能够:

  • 设计面向客户展示的能耗仪表板布局
  • 创建实时功率、电压、电流的监控面板
  • 实现能耗趋势分析和对比
  • 配置 Kiosk 模式用于客户演示
┌──────────────────────────────────────────────────────────────┐
│ IoT 能耗监测仪表板 │
├──────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ 当前功率 │ │ 今日用电 │ │ 电压 │ │ 设备温度 │ │
│ │ 42.5 W │ │ 0.63 kWh │ │ 223.1 V │ │ 42.5°C │ │
│ └───────────┘ └───────────┘ └───────────┘ └───────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 功率趋势 (24小时) │ │
│ │ ╱╲ ╱╲ ╱╲ │ │
│ │ ╱ ╲ ╱ ╲ ╱ ╲ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────┐ ┌──────────────────────────┐ │
│ │ 设备状态表 │ │ 能耗排名 │ │
│ │ ┌────────┬──────┬────┐ │ │ ┌────────┬──────────┐ │ │
│ │ │ 设备 │ 状态 │ 功率│ │ │ │ 设备 │ 今日 kWh │ │ │
│ │ ├────────┼──────┼────┤ │ │ ├────────┼──────────┤ │ │
│ │ │ LINE-1 │ ● 开 │ 42W│ │ │ │ LINE-1 │ 0.63 │ │ │
│ │ │ LINE-2 │ ● 关 │ 0W│ │ │ │ LINE-2 │ 0.00 │ │ │
│ │ └────────┴──────┴────┘ │ │ └────────┴──────────┘ │ │
│ └──────────────────────────┘ └──────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────┘
-- 获取最新的功率值
from(bucket: "nodered")
|> range(start: -5m)
|> filter(fn: (r) => r._measurement == "energy_consumption")
|> filter(fn: (r) => r._field == "power")
|> filter(fn: (r) => r.device == "${device}")
|> last()
|> yield(name: "current_power")

可视化配置:

  • 类型: Stat
  • 单位: Watts (W)
  • 小数: 1
  • 阈值: > 1500W 橙色, > 2000W 红色
  • 刷新: 5s
-- 获取今日累计用电量
from(bucket: "nodered")
|> range(start: -24h)
|> filter(fn: (r) => r._measurement == "energy_consumption")
|> filter(fn: (r) => r._field == "today_kwh")
|> filter(fn: (r) => r.device == "${device}")
|> last()
|> yield(name: "today_energy")

可视化配置:

  • 类型: Stat
  • 单位: Kilowatt-hours (kWh)
  • 小数: 2
  • 颜色: 绿色 < 5, 橙色 5-10, 红色 > 10
-- 24 小时功率趋势
from(bucket: "nodered")
|> range(start: -24h)
|> filter(fn: (r) => r._measurement == "energy_consumption")
|> filter(fn: (r) => r._field == "power")
|> filter(fn: (r) => r.device == "${device}")
|> aggregateWindow(every: 5m, fn: mean)
|> yield(name: "power_trend")

可视化配置:

  • 类型: Time Series
  • 线条: Step
  • 填充: 30% 透明度
  • 时间范围: Last 24 hours
  • 刷新: 10s
-- 电压曲线
from(bucket: "nodered")
|> range(start: -24h)
|> filter(fn: (r) => r._measurement == "energy_consumption")
|> filter(fn: (r) => r._field == "voltage")
|> filter(fn: (r) => r.device == "${device}")
|> aggregateWindow(every: 15m, fn: mean)
|> yield(name: "voltage")
-- 电流曲线 (第二个查询在同一面板中)
from(bucket: "nodered")
|> range(start: -24h)
|> filter(fn: (r) => r._measurement == "energy_consumption")
|> filter(fn: (r) => r._field == "current")
|> filter(fn: (r) => r.device == "${device}")
|> aggregateWindow(every: 15m, fn: mean)
|> yield(name: "current")

可视化配置:

  • 类型: Time Series
  • 双 Y 轴: 电压左轴 (V), 电流右轴 (A)
  • 颜色: 电压蓝色, 电流橙色
-- 所有设备的最新状态
from(bucket: "nodered")
|> range(start: -5m)
|> filter(fn: (r) => r._measurement == "energy_consumption")
|> last()
|> group(columns: ["device"])
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> yield(name: "device_status")

可视化配置:

  • 类型: Table
  • 列: device, power, voltage, current, today_kwh
  • 条件格式: power > 0 显示绿色指示灯
-- 各设备今日用电量排名
from(bucket: "nodered")
|> range(start: -24h)
|> filter(fn: (r) => r._measurement == "energy_consumption")
|> filter(fn: (r) => r._field == "today_kwh")
|> last()
|> group(columns: ["device"])
|> yield(name: "energy_ranking")

可视化配置:

  • 类型: Bar Chart
  • 排列: 降序
  • 颜色: 渐变 (低→高: 绿→黄→红)

变量名: device

查询:

import "influxdata/influxdb/schema"
schema.tagValues(
bucket: "nodered",
tag: "device"
)

配置:

  • Type: Query
  • Multi-value: ✅
  • Include All: ✅
  • Refresh: On Dashboard Load

通过配置文件自动创建仪表板:

/etc/grafana/provisioning/dashboards/energy-monitoring.yaml
apiVersion: 1
providers:
- name: 'IoT Energy Monitoring'
orgId: 1
folder: 'IoT'
type: file
disableDeletion: false
updateIntervalSeconds: 10
options:
path: /var/lib/grafana/dashboards
// Dashboard JSON (可导入或通过 API 创建)
{
"dashboard": {
"title": "IoT 能耗监测",
"tags": ["iot", "energy", "monitoring"],
"timezone": "browser",
"time": {
"from": "now-24h",
"to": "now"
},
"refresh": "5s",
"panels": [
{
"title": "当前功率",
"type": "stat",
"gridPos": {"h": 4, "w": 4, "x": 0, "y": 0},
"targets": [{"query": "..."}]
},
{
"title": "今日用电",
"type": "stat",
"gridPos": {"h": 4, "w": 4, "x": 4, "y": 0},
"targets": [{"query": "..."}]
}
]
}
}
Terminal window
# 客户展示模式
# URL 参数:
http://localhost:3000/d/{dashboard-uid}/iot-energy?kiosk&refresh=5s
# 参数说明:
# kiosk - 全屏模式,隐藏 UI 元素
# refresh=5s - 5 秒自动刷新
# from=now-6h/to=now - 显示最近 6 小时

可以。Grafana 支持响应式布局,在手机浏览器中访问会自动适配。也可以使用 Grafana Mobile App。

Q2: 如何对比不同时间段的能耗?

Section titled “Q2: 如何对比不同时间段的能耗?”

在面板中增加时间对比功能:使用 Grafana 的 Time Shift 功能,添加同一面板的第二条查询并设置 shift: -7d 实现同比对比。

推荐做法:

  • 顶部放置关键 KPI(当前功率、今日用电)
  • 使用 Dashboard 变量实现设备筛选
  • 设置合理的刷新间隔(5-30s)
  • 预配置 Kiosk 模式用于演示

避免做法:

  • 单个仪表板包含过多面板 (>20)
  • 刷新间隔过短 (< 3s)
  • 不使用模板变量硬编码设备
  • 忽略数据保留策略
  1. Stat 面板展示关键 KPI(当前功率、今日用电)
  2. Time Series展示 24 小时功率趋势
  3. Table展示多设备状态总览
  4. Dashboard 变量实现设备动态筛选
  5. Kiosk 模式适合客户演示场景