From 371815433128a0e34482d11d179330af1e436f20 Mon Sep 17 00:00:00 2001 From: orbitalo Date: Thu, 9 Jul 2026 17:57:42 +0000 Subject: [PATCH] fix(grafana): complete heizraum.json with all 10 panels (Issue #4) --- infra/grafana/heizraum.json | 203 +++++++++++++++++++++++++++++++++++- 1 file changed, 198 insertions(+), 5 deletions(-) diff --git a/infra/grafana/heizraum.json b/infra/grafana/heizraum.json index 8330df0b6..d0eb16e3e 100644 --- a/infra/grafana/heizraum.json +++ b/infra/grafana/heizraum.json @@ -6,8 +6,6 @@ "schemaVersion": 39, "version": 1, "refresh": "30s", - "time": {"from": "now-6h", "to": "now"}, - "id": null, "panels": [ { "id": 1, @@ -20,16 +18,211 @@ "unit": "none", "decimals": 0, "thresholds": {"mode": "absolute", "steps": [{"color": "red", "value": null}, {"color": "green", "value": 1}]}, + "color": {"mode": "thresholds"}, "mappings": [ {"type": "value", "options": {"1": {"text": "ONLINE", "color": "green", "index": 0}, "0": {"text": "OFFLINE", "color": "red", "index": 1}}}, {"type": "special", "options": {"match": "null", "result": {"text": "OFFLINE", "color": "red", "index": 2}}} ], - "noValue": "OFFLINE", - "color": {"mode": "thresholds"} + "noValue": "OFFLINE" } }, "options": {"reduceOptions": {"values": false, "calcs": ["lastNotNull"]}, "orientation": "auto", "textMode": "auto", "colorMode": "background", "graphMode": "none", "justifyMode": "auto"}, "targets": [{"refId": "A", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT last(\"value\") FROM \"node_status\" WHERE \"node\"='heizraum'", "rawQuery": true}] + }, + { + "id": 2, + "gridPos": {"h": 4, "w": 4, "x": 4, "y": 0}, + "type": "gauge", + "title": "Puffer SoC %", + "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, + "fieldConfig": { + "defaults": { + "unit": "percent", + "decimals": 0, + "min": 0, + "max": 100, + "thresholds": {"mode": "absolute", "steps": [{"color": "red", "value": null}, {"color": "orange", "value": 25}, {"color": "yellow", "value": 50}, {"color": "green", "value": 75}]}, + "color": {"mode": "thresholds"} + } + }, + "options": {"reduceOptions": {"values": false, "calcs": ["lastNotNull"]}, "orientation": "auto", "showThresholdLabels": false, "showThresholdMarkers": true}, + "targets": [{"refId": "A", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND \"sensor\" =~ /^puffer_/ AND $timeFilter GROUP BY time($__interval)", "rawQuery": true}] + }, + { + "id": 3, + "gridPos": {"h": 10, "w": 24, "x": 0, "y": 4}, + "type": "timeseries", + "title": "Pufferschichtung", + "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, + "fieldConfig": { + "defaults": { + "unit": "celsius", + "custom": { + "drawStyle": "line", "lineInterpolation": "linear", "barAlignment": 0, "lineWidth": 2, "fillOpacity": 10, "gradientMode": "none", "spanNulls": 300000, "showPoints": "never", "pointSize": 5, + "stacking": {"mode": "none", "group": "A"}, "axisPlacement": "auto", "axisLabel": "", "axisColorMode": "text", "scaleDistribution": {"type": "linear"}, "axisCenteredZero": false, + "hideFrom": {"tooltip": false, "viz": false, "legend": false}, "thresholdsStyle": {"mode": "off"} + } + } + }, + "options": {"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["last", "mean", "max"]}, "tooltip": {"mode": "multi", "sort": "none"}}, + "targets": [{"refId": "A", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND \"sensor\" =~ /^puffer_/ AND $timeFilter GROUP BY time($__interval), \"sensor\"", "rawQuery": true}], + "description": "5 Schichten Pufferspeicher (1=oben … 5=unten)" + }, + { + "id": 4, + "gridPos": {"h": 10, "w": 24, "x": 0, "y": 14}, + "type": "timeseries", + "title": "Heizkreise", + "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, + "fieldConfig": { + "defaults": { + "unit": "celsius", + "custom": { + "drawStyle": "line", "lineInterpolation": "linear", "barAlignment": 0, "lineWidth": 2, "fillOpacity": 10, "gradientMode": "none", "spanNulls": 300000, "showPoints": "never", "pointSize": 5, + "stacking": {"mode": "none", "group": "A"}, "axisPlacement": "auto", "axisLabel": "", "axisColorMode": "text", "scaleDistribution": {"type": "linear"}, "axisCenteredZero": false, + "hideFrom": {"tooltip": false, "viz": false, "legend": false}, "thresholdsStyle": {"mode": "off"} + } + } + }, + "options": {"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["last", "mean", "max"]}, "tooltip": {"mode": "multi", "sort": "none"}}, + "targets": [{"refId": "A", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND \"sensor\" =~ /^hk_/ AND $timeFilter GROUP BY time($__interval), \"sensor\"", "rawQuery": true}], + "description": "hk_vl_zum_mischer, hk_vl_nach_mischer, hk_rl_1_links, hk_rl_2_links, hk_rl_3_nebengelass, hk_rl_gesamt" + }, + { + "id": 5, + "gridPos": {"h": 8, "w": 12, "x": 0, "y": 24}, + "type": "timeseries", + "title": "Thermosolar", + "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, + "fieldConfig": { + "defaults": { + "unit": "celsius", + "custom": { + "drawStyle": "line", "lineInterpolation": "linear", "barAlignment": 0, "lineWidth": 2, "fillOpacity": 10, "gradientMode": "none", "spanNulls": 300000, "showPoints": "never", "pointSize": 5, + "stacking": {"mode": "none", "group": "A"}, "axisPlacement": "auto", "axisLabel": "", "axisColorMode": "text", "scaleDistribution": {"type": "linear"}, "axisCenteredZero": false, + "hideFrom": {"tooltip": false, "viz": false, "legend": false}, "thresholdsStyle": {"mode": "off"} + } + } + }, + "options": {"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["last", "mean", "max"]}, "tooltip": {"mode": "multi", "sort": "none"}}, + "targets": [{"refId": "A", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND \"sensor\" =~ /^solar_/ AND $timeFilter GROUP BY time($__interval), \"sensor\"", "rawQuery": true}], + "description": "solar_vl, solar_rl" + }, + { + "id": 6, + "gridPos": {"h": 8, "w": 12, "x": 12, "y": 24}, + "type": "timeseries", + "title": "Erzeuger Öl", + "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, + "fieldConfig": { + "defaults": { + "unit": "celsius", + "custom": { + "drawStyle": "line", "lineInterpolation": "linear", "barAlignment": 0, "lineWidth": 2, "fillOpacity": 10, "gradientMode": "none", "spanNulls": 300000, "showPoints": "never", "pointSize": 5, + "stacking": {"mode": "none", "group": "A"}, "axisPlacement": "auto", "axisLabel": "", "axisColorMode": "text", "scaleDistribution": {"type": "linear"}, "axisCenteredZero": false, + "hideFrom": {"tooltip": false, "viz": false, "legend": false}, "thresholdsStyle": {"mode": "off"} + } + } + }, + "options": {"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["last", "mean", "max"]}, "tooltip": {"mode": "multi", "sort": "none"}}, + "targets": [{"refId": "A", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND \"sensor\" =~ /^oel_/ AND $timeFilter GROUP BY time($__interval), \"sensor\"", "rawQuery": true}], + "description": "oel_vl, oel_rl" + }, + { + "id": 7, + "gridPos": {"h": 8, "w": 12, "x": 0, "y": 32}, + "type": "timeseries", + "title": "Erzeuger Holzvergaser", + "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, + "fieldConfig": { + "defaults": { + "unit": "celsius", + "custom": { + "drawStyle": "line", "lineInterpolation": "linear", "barAlignment": 0, "lineWidth": 2, "fillOpacity": 10, "gradientMode": "none", "spanNulls": 300000, "showPoints": "never", "pointSize": 5, + "stacking": {"mode": "none", "group": "A"}, "axisPlacement": "auto", "axisLabel": "", "axisColorMode": "text", "scaleDistribution": {"type": "linear"}, "axisCenteredZero": false, + "hideFrom": {"tooltip": false, "viz": false, "legend": false}, "thresholdsStyle": {"mode": "off"} + } + } + }, + "options": {"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["last", "mean", "max"]}, "tooltip": {"mode": "multi", "sort": "none"}}, + "targets": [{"refId": "A", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND \"sensor\" =~ /^hv_/ AND $timeFilter GROUP BY time($__interval), \"sensor\"", "rawQuery": true}], + "description": "hv_vl, hv_body, hv_rl" + }, + { + "id": 8, + "gridPos": {"h": 8, "w": 12, "x": 12, "y": 32}, + "type": "timeseries", + "title": "Warmwasser / Außen", + "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, + "fieldConfig": { + "defaults": { + "unit": "celsius", + "custom": { + "drawStyle": "line", "lineInterpolation": "linear", "barAlignment": 0, "lineWidth": 2, "fillOpacity": 10, "gradientMode": "none", "spanNulls": 300000, "showPoints": "never", "pointSize": 5, + "stacking": {"mode": "none", "group": "A"}, "axisPlacement": "auto", "axisLabel": "", "axisColorMode": "text", "scaleDistribution": {"type": "linear"}, "axisCenteredZero": false, + "hideFrom": {"tooltip": false, "viz": false, "legend": false}, "thresholdsStyle": {"mode": "off"} + } + } + }, + "options": {"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["last", "mean", "max"]}, "tooltip": {"mode": "multi", "sort": "none"}}, + "targets": [{"refId": "A", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND (\"sensor\"='ww_zirku_rl' OR \"sensor\"='aussen_heizraum') AND $timeFilter GROUP BY time($__interval), \"sensor\"", "rawQuery": true}], + "description": "ww_zirku_rl, aussen_heizraum" + }, + { + "id": 9, + "gridPos": {"h": 8, "w": 24, "x": 0, "y": 40}, + "type": "timeseries", + "title": "Spreizung ΔT (VL−RL)", + "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, + "fieldConfig": { + "defaults": { + "unit": "celsius", + "custom": { + "drawStyle": "line", "lineInterpolation": "linear", "barAlignment": 0, "lineWidth": 2, "fillOpacity": 10, "gradientMode": "none", "spanNulls": 300000, "showPoints": "never", "pointSize": 5, + "stacking": {"mode": "none", "group": "A"}, "axisPlacement": "auto", "axisLabel": "", "axisColorMode": "text", "scaleDistribution": {"type": "linear"}, "axisCenteredZero": false, + "hideFrom": {"tooltip": false, "viz": false, "legend": false}, "thresholdsStyle": {"mode": "off"} + } + } + }, + "options": {"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["last", "mean"]}, "tooltip": {"mode": "multi", "sort": "none"}}, + "targets": [ + {"refId": "oel_vl", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND \"sensor\"='oel_vl' AND $timeFilter GROUP BY time($__interval)", "rawQuery": true, "hide": false}, + {"refId": "oel_vl_rl", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND \"sensor\"='oel_rl' AND $timeFilter GROUP BY time($__interval)", "rawQuery": true, "hide": false}, + {"refId": "hv_vl", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND \"sensor\"='hv_vl' AND $timeFilter GROUP BY time($__interval)", "rawQuery": true, "hide": false}, + {"refId": "hv_vl_rl", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND \"sensor\"='hv_rl' AND $timeFilter GROUP BY time($__interval)", "rawQuery": true, "hide": false}, + {"refId": "solar_vl", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND \"sensor\"='solar_vl' AND $timeFilter GROUP BY time($__interval)", "rawQuery": true, "hide": false}, + {"refId": "solar_vl_rl", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND \"sensor\"='solar_rl' AND $timeFilter GROUP BY time($__interval)", "rawQuery": true, "hide": false} + ], + "transformations": [ + {"id": "calculateField", "options": {"mode": "binary", "binary": {"left": "oel_vl.value", "operator": "-", "right": "oel_rl.value"}, "alias": "ΔT Öl"}}, + {"id": "calculateField", "options": {"mode": "binary", "binary": {"left": "hv_vl.value", "operator": "-", "right": "hv_rl.value"}, "alias": "ΔT HV"}}, + {"id": "calculateField", "options": {"mode": "binary", "binary": {"left": "solar_vl.value", "operator": "-", "right": "solar_rl.value"}, "alias": "ΔT Solar"}}, + {"id": "organize", "options": {"excludeByName": {"oel_vl.value": true, "oel_rl.value": true, "hv_vl.value": true, "hv_rl.value": true, "solar_vl.value": true, "solar_rl.value": true}}} + ], + "description": "Spreizung ΔT = Vorlauf − Rücklauf für Öl-, Holzvergaser- und Solarkreis. Positiv = Wärmeabgabe." + }, + { + "id": 10, + "gridPos": {"h": 8, "w": 24, "x": 0, "y": 48}, + "type": "timeseries", + "title": "HV-Rücklauf-Wächter", + "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, + "fieldConfig": { + "defaults": { + "unit": "celsius", + "custom": { + "drawStyle": "line", "lineInterpolation": "linear", "barAlignment": 0, "lineWidth": 2, "fillOpacity": 10, "gradientMode": "none", "spanNulls": 300000, "showPoints": "never", "pointSize": 5, + "stacking": {"mode": "none", "group": "A"}, "axisPlacement": "auto", "axisLabel": "", "axisColorMode": "text", "scaleDistribution": {"type": "linear"}, "axisCenteredZero": false, + "hideFrom": {"tooltip": false, "viz": false, "legend": false}, "thresholdsStyle": {"mode": "area"} + }, + "thresholds": {"mode": "absolute", "steps": [{"color": "red", "value": null}, {"color": "orange", "value": 45}, {"color": "yellow", "value": 55}, {"color": "green", "value": 60}]} + } + }, + "options": {"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["last", "mean", "max"]}, "tooltip": {"mode": "multi", "sort": "none"}}, + "targets": [{"refId": "A", "datasource": {"type": "influxdb", "uid": "ffptl25vzylfke"}, "query": "SELECT mean(\"value\") FROM \"temperature\" WHERE \"node\"='heizraum' AND \"sensor\"='hv_rl' AND $timeFilter GROUP BY time($__interval)", "rawQuery": true}], + "description": "HV-Rücklauftemperatur. Soll >55–60 °C im Betrieb (Mischventil-Diagnose)." } - ] + ], + "time": {"from": "now-6h", "to": "now"}, + "id": null }