Files
homelab/kubernetes/apps/monitoring/dashboards/heatpump-dhw-loading.json
claude-bot f9cbeb0fc0 fix(heatpump-dhw-loading): dedupe scrape-residue series with max by (entity)
All four panels queried raw HA metrics that still carry ~12 duplicate
series per entity in the 90d window (two scrape jobs x six pod
lifetimes; the duplicate-scrape bug was fixed 2026-07-16 but the
residue stays in range queries until it ages out). This broke the
scatter join (no points rendered), made the stat panel show 8
conflicting averages, and drew rainbow duplicates in both time series.

Wrapping every target in max by (entity) (...) collapses the residue
to one series per entity; values between the duplicate jobs were
near-identical, so max is lossless.
2026-07-17 00:20:41 +02:00

141 lines
5.5 KiB
JSON

{
"annotations": { "list": [] },
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"links": [],
"liveNow": false,
"panels": [
{
"id": 1,
"type": "xychart",
"title": "WW-Ladeleistung vs. Außentemperatur",
"description": "Jeder Punkt = ein Scrape-Sample der WP-Leistungsaufnahme während einer aktiven WW-Ladung (Sensor ist nur dann verfügbar), gegen die gleichzeitige Außentemperatur. Zeigt, ob die Ladeleistung von der Außentemperatur abhängt. Baut sich mit jeder WW-Ladung weiter auf.",
"datasource": { "type": "prometheus", "uid": "prometheus" },
"gridPos": { "h": 12, "w": 16, "x": 0, "y": 0 },
"options": {
"seriesMapping": "auto",
"legend": { "displayMode": "list", "placement": "bottom", "showLegend": false },
"tooltip": { "mode": "single", "sort": "none" }
},
"fieldConfig": {
"defaults": { "custom": { "show": "points", "pointSize": { "fixed": 6 } } },
"overrides": [
{ "matcher": { "id": "byName", "options": "Ladeleistung" }, "properties": [ { "id": "unit", "value": "watt" } ] },
{ "matcher": { "id": "byName", "options": "Aussentemp" }, "properties": [ { "id": "unit", "value": "celsius" } ] }
]
},
"targets": [
{
"refId": "A",
"datasource": { "type": "prometheus", "uid": "prometheus" },
"expr": "max by (entity) (homeassistant_sensor_power_w{entity=\"sensor.vitocal_dhw_loading_power\"})",
"legendFormat": "Ladeleistung",
"format": "time_series"
},
{
"refId": "B",
"datasource": { "type": "prometheus", "uid": "prometheus" },
"expr": "max by (entity) (homeassistant_sensor_temperature_celsius{entity=\"sensor.vitocal_250_a_vitocal_outside_temperature\"})",
"legendFormat": "Aussentemp",
"format": "time_series"
}
],
"transformations": [
{ "id": "joinByField", "options": { "byField": "Time", "mode": "outer" } },
{ "id": "organize", "options": { "excludeByName": { "Time": true }, "indexByName": { "Aussentemp": 0, "Ladeleistung": 1 }, "renameByName": {} } },
{ "id": "filterByValue", "options": { "type": "include", "match": "all", "filters": [ { "fieldName": "Ladeleistung", "config": { "id": "isNotNull", "options": {} } } ] } }
]
},
{
"id": 2,
"type": "stat",
"title": "Ø Ladeleistung (Zeitraum)",
"datasource": { "type": "prometheus", "uid": "prometheus" },
"gridPos": { "h": 12, "w": 8, "x": 16, "y": 0 },
"options": {
"reduceOptions": { "calcs": ["mean"], "fields": "", "values": false },
"orientation": "vertical",
"textMode": "value_and_name",
"colorMode": "value",
"graphMode": "area"
},
"fieldConfig": {
"defaults": { "unit": "watt", "color": { "mode": "thresholds" }, "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] } },
"overrides": []
},
"targets": [
{
"refId": "A",
"datasource": { "type": "prometheus", "uid": "prometheus" },
"expr": "max by (entity) (homeassistant_sensor_power_w{entity=\"sensor.vitocal_dhw_loading_power\"})",
"legendFormat": "Ladeleistung"
}
]
},
{
"id": 3,
"type": "timeseries",
"title": "WW-Ladeleistung über Zeit",
"datasource": { "type": "prometheus", "uid": "prometheus" },
"gridPos": { "h": 9, "w": 12, "x": 0, "y": 12 },
"options": {
"legend": { "displayMode": "list", "placement": "bottom", "showLegend": false },
"tooltip": { "mode": "single", "sort": "none" }
},
"fieldConfig": {
"defaults": {
"unit": "watt",
"custom": { "drawStyle": "points", "pointSize": 4, "showPoints": "always", "lineWidth": 0, "axisLabel": "Ladeleistung (W)" }
},
"overrides": []
},
"targets": [
{
"refId": "A",
"datasource": { "type": "prometheus", "uid": "prometheus" },
"expr": "max by (entity) (homeassistant_sensor_power_w{entity=\"sensor.vitocal_dhw_loading_power\"})",
"legendFormat": "Ladeleistung"
}
]
},
{
"id": 4,
"type": "timeseries",
"title": "Außentemperatur",
"datasource": { "type": "prometheus", "uid": "prometheus" },
"gridPos": { "h": 9, "w": 12, "x": 12, "y": 12 },
"options": {
"legend": { "displayMode": "list", "placement": "bottom", "showLegend": false },
"tooltip": { "mode": "single", "sort": "none" }
},
"fieldConfig": {
"defaults": {
"unit": "celsius",
"custom": { "drawStyle": "line", "lineWidth": 1, "fillOpacity": 8, "axisLabel": "Außentemp (°C)" }
},
"overrides": []
},
"targets": [
{
"refId": "A",
"datasource": { "type": "prometheus", "uid": "prometheus" },
"expr": "max by (entity) (homeassistant_sensor_temperature_celsius{entity=\"sensor.vitocal_250_a_vitocal_outside_temperature\"})",
"legendFormat": "Außentemp"
}
]
}
],
"refresh": "",
"schemaVersion": 38,
"tags": ["homelab", "heatpump", "dhw", "warmwasser"],
"templating": { "list": [] },
"time": { "from": "now-90d", "to": "now" },
"timepicker": {},
"timezone": "browser",
"title": "Wärmepumpe — WW-Ladeleistung vs. Außentemperatur",
"uid": "heatpump-dhw-loading",
"version": 1,
"weekStart": ""
}