Grafana 能耗仪表板
Grafana 能耗仪表板
本节介绍如何设计用于能耗监控的 Grafana 仪表板。学习完成后,您将能够:
- 设计面向客户展示的能耗仪表板布局
- 创建实时功率、电压、电流的监控面板
- 实现能耗趋势分析和对比
- 配置 Kiosk 模式用于客户演示
Dashboard Architecture
Section titled “Dashboard Architecture”┌──────────────────────────────────────────────────────────────┐│ 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 │ │ ││ │ └────────┴──────┴────┘ │ │ └────────┴──────────┘ │ ││ └──────────────────────────┘ └──────────────────────────┘ ││ │└──────────────────────────────────────────────────────────────┘Flux Queries
Section titled “Flux Queries”Panel 1: Stat — 当前功率
Section titled “Panel 1: Stat — 当前功率”-- 获取最新的功率值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
Panel 2: Stat — 今日用电量
Section titled “Panel 2: Stat — 今日用电量”-- 获取今日累计用电量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
Panel 3: Time Series — 功率趋势
Section titled “Panel 3: Time Series — 功率趋势”-- 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
Panel 4: Time Series — 电压和电流
Section titled “Panel 4: Time Series — 电压和电流”-- 电压曲线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)
- 颜色: 电压蓝色, 电流橙色
Panel 5: Table — 设备状态表
Section titled “Panel 5: Table — 设备状态表”-- 所有设备的最新状态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 显示绿色指示灯
Panel 6: Bar Chart — 能耗排名
Section titled “Panel 6: Bar Chart — 能耗排名”-- 各设备今日用电量排名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
- 排列: 降序
- 颜色: 渐变 (低→高: 绿→黄→红)
Dashboard Variables
Section titled “Dashboard Variables”创建设备选择器
Section titled “创建设备选择器”变量名: device
查询:
import "influxdata/influxdb/schema"schema.tagValues( bucket: "nodered", tag: "device")配置:
- Type: Query
- Multi-value: ✅
- Include All: ✅
- Refresh: On Dashboard Load
Dashboard Provisioning
Section titled “Dashboard Provisioning”通过配置文件自动创建仪表板:
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": "..."}] } ] }}Kiosk Mode for Demo
Section titled “Kiosk Mode for Demo”# 客户展示模式# URL 参数:http://localhost:3000/d/{dashboard-uid}/iot-energy?kiosk&refresh=5s
# 参数说明:# kiosk - 全屏模式,隐藏 UI 元素# refresh=5s - 5 秒自动刷新# from=now-6h/to=now - 显示最近 6 小时Common Customer Questions
Section titled “Common Customer Questions”Q1: 能否在手机端查看仪表板?
Section titled “Q1: 能否在手机端查看仪表板?”可以。Grafana 支持响应式布局,在手机浏览器中访问会自动适配。也可以使用 Grafana Mobile App。
Q2: 如何对比不同时间段的能耗?
Section titled “Q2: 如何对比不同时间段的能耗?”在面板中增加时间对比功能:使用 Grafana 的 Time Shift 功能,添加同一面板的第二条查询并设置 shift: -7d 实现同比对比。
✅ 推荐做法:
- 顶部放置关键 KPI(当前功率、今日用电)
- 使用 Dashboard 变量实现设备筛选
- 设置合理的刷新间隔(5-30s)
- 预配置 Kiosk 模式用于演示
❌ 避免做法:
- 单个仪表板包含过多面板 (>20)
- 刷新间隔过短 (< 3s)
- 不使用模板变量硬编码设备
- 忽略数据保留策略
Summary
Section titled “Summary”- Stat 面板展示关键 KPI(当前功率、今日用电)
- Time Series展示 24 小时功率趋势
- Table展示多设备状态总览
- Dashboard 变量实现设备动态筛选
- Kiosk 模式适合客户演示场景