From f236bfec00713fdfa19ec97c720439c226a675d7 Mon Sep 17 00:00:00 2001 From: Micha Date: Sun, 14 Jun 2026 11:14:30 +0200 Subject: [PATCH] style: upgrade grafana weather dashboard Live-Gauges (Temp/Feuchte/Wind/UV/Solar mit Farbverlauf) + Luftdruck-Stat oben, aufgehuebschte Verlaufs-Charts (Temp/Feuchte/Wind mit Innen-Serien, Solar als Flaeche), Regen pro Tag als barchart. Analog zum Solar-Dashboard. Co-Authored-By: Claude Fable 5 --- .../grafana/dashboards/weather-archive.json | 169 +++++++++++++----- 1 file changed, 127 insertions(+), 42 deletions(-) diff --git a/monitoring/grafana/dashboards/weather-archive.json b/monitoring/grafana/dashboards/weather-archive.json index 72e7718..d7c70c5 100644 --- a/monitoring/grafana/dashboards/weather-archive.json +++ b/monitoring/grafana/dashboards/weather-archive.json @@ -4,77 +4,162 @@ "tags": ["weather", "ecowitt", "homeassistant"], "timezone": "browser", "schemaVersion": 39, - "version": 1, - "refresh": "5m", + "version": 2, + "refresh": "1m", "time": { "from": "now-7d", "to": "now" }, "templating": { "list": [] }, "annotations": { "list": [] }, "panels": [ { "id": 1, - "title": "Temperatur (°C)", - "type": "timeseries", - "gridPos": { "h": 9, "w": 12, "x": 0, "y": 0 }, + "title": "Außentemperatur", + "type": "gauge", + "gridPos": { "h": 5, "w": 4, "x": 0, "y": 0 }, "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, - "fieldConfig": { "defaults": { "unit": "celsius", "custom": { "drawStyle": "line", "fillOpacity": 8 } }, "overrides": [] }, - "targets": [ - { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value, entity_id FROM \"°C\" WHERE entity_id IN ('gw3000a_outdoor_temperature','gw3000a_feels_like_temperature','gw3000a_dewpoint') AND $__timeFilter(time) ORDER BY time" } - ] + "fieldConfig": { "defaults": { "unit": "celsius", "min": -10, "max": 40, "color": { "mode": "continuous-BlYlRd" } }, "overrides": [] }, + "options": { "reduceOptions": { "calcs": ["lastNotNull"] }, "showThresholdMarkers": false }, + "targets": [ { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"°C\" WHERE entity_id = 'gw3000a_outdoor_temperature' AND $__timeFilter(time) ORDER BY time" } ] }, { "id": 2, - "title": "Luftfeuchte (%)", - "type": "timeseries", - "gridPos": { "h": 9, "w": 12, "x": 12, "y": 0 }, + "title": "Luftfeuchte", + "type": "gauge", + "gridPos": { "h": 5, "w": 4, "x": 4, "y": 0 }, "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, - "fieldConfig": { "defaults": { "unit": "percent", "custom": { "drawStyle": "line", "fillOpacity": 8 } }, "overrides": [] }, - "targets": [ - { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value, entity_id FROM \"%\" WHERE entity_id IN ('gw3000a_humidity','gw3000a_indoor_humidity') AND $__timeFilter(time) ORDER BY time" } - ] + "fieldConfig": { "defaults": { "unit": "percent", "min": 0, "max": 100, "color": { "mode": "continuous-BlYlRd" } }, "overrides": [] }, + "options": { "reduceOptions": { "calcs": ["lastNotNull"] }, "showThresholdMarkers": false }, + "targets": [ { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"%\" WHERE entity_id = 'gw3000a_humidity' AND $__timeFilter(time) ORDER BY time" } ] }, { "id": 3, - "title": "Wind (km/h)", - "type": "timeseries", - "gridPos": { "h": 9, "w": 12, "x": 0, "y": 9 }, + "title": "Wind", + "type": "gauge", + "gridPos": { "h": 5, "w": 4, "x": 8, "y": 0 }, "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, - "fieldConfig": { "defaults": { "unit": "velocitykmh", "custom": { "drawStyle": "line", "fillOpacity": 8 } }, "overrides": [] }, - "targets": [ - { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value, entity_id FROM \"km/h\" WHERE entity_id IN ('gw3000a_wind_speed','gw3000a_wind_gust') AND $__timeFilter(time) ORDER BY time" } - ] + "fieldConfig": { "defaults": { "unit": "velocitykmh", "min": 0, "max": 60, "color": { "mode": "continuous-GrYlRd" } }, "overrides": [] }, + "options": { "reduceOptions": { "calcs": ["lastNotNull"] }, "showThresholdMarkers": false }, + "targets": [ { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"km/h\" WHERE entity_id = 'gw3000a_wind_speed' AND $__timeFilter(time) ORDER BY time" } ] }, { "id": 4, - "title": "Solarstrahlung (W/m²)", - "type": "timeseries", - "gridPos": { "h": 9, "w": 12, "x": 12, "y": 9 }, + "title": "UV-Index", + "type": "gauge", + "gridPos": { "h": 5, "w": 4, "x": 12, "y": 0 }, "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, - "fieldConfig": { "defaults": { "unit": "wattm2", "custom": { "drawStyle": "line", "fillOpacity": 20 } }, "overrides": [] }, - "targets": [ - { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value, entity_id FROM \"W/m²\" WHERE entity_id = 'gw3000a_solar_radiation' AND $__timeFilter(time) ORDER BY time" } - ] + "fieldConfig": { "defaults": { "unit": "short", "min": 0, "max": 11, "color": { "mode": "continuous-GrYlRd" } }, "overrides": [] }, + "options": { "reduceOptions": { "calcs": ["lastNotNull"] }, "showThresholdMarkers": false }, + "targets": [ { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"UV index\" WHERE entity_id = 'gw3000a_uv_index' AND $__timeFilter(time) ORDER BY time" } ] }, { "id": 5, - "title": "Regen pro Tag (mm)", - "type": "timeseries", - "gridPos": { "h": 9, "w": 12, "x": 0, "y": 18 }, + "title": "Solarstrahlung", + "type": "gauge", + "gridPos": { "h": 5, "w": 4, "x": 16, "y": 0 }, "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, - "fieldConfig": { "defaults": { "unit": "lengthmm", "custom": { "drawStyle": "bars", "fillOpacity": 60 } }, "overrides": [] }, - "targets": [ - { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT date_bin(INTERVAL '1 day', time) AS time, max(value) AS value FROM \"mm\" WHERE entity_id = 'gw3000a_daily_rain' AND $__timeFilter(time) GROUP BY 1 ORDER BY 1" } - ] + "fieldConfig": { "defaults": { "unit": "wattm2", "min": 0, "max": 1200, "color": { "mode": "continuous-GrYlRd" } }, "overrides": [] }, + "options": { "reduceOptions": { "calcs": ["lastNotNull"] }, "showThresholdMarkers": false }, + "targets": [ { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"W/m²\" WHERE entity_id = 'gw3000a_solar_radiation' AND $__timeFilter(time) ORDER BY time" } ] }, { "id": 6, + "title": "Luftdruck", + "type": "stat", + "gridPos": { "h": 5, "w": 4, "x": 20, "y": 0 }, + "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, + "fieldConfig": { "defaults": { "unit": "pressurehpa", "color": { "mode": "fixed", "fixedColor": "#4dabf7" } }, "overrides": [] }, + "options": { "reduceOptions": { "calcs": ["lastNotNull"] }, "colorMode": "value", "graphMode": "area", "textMode": "value" }, + "targets": [ { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"hPa\" WHERE entity_id = 'gw3000a_relative_pressure' AND $__timeFilter(time) ORDER BY time" } ] + }, + { + "id": 7, + "title": "Temperatur (°C)", + "type": "timeseries", + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 5 }, + "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, + "fieldConfig": { + "defaults": { "unit": "celsius", "custom": { "drawStyle": "line", "fillOpacity": 12, "lineWidth": 2, "showPoints": "never" } }, + "overrides": [ + { "matcher": { "id": "byFrameRefID", "options": "A" }, "properties": [ { "id": "displayName", "value": "Außen" }, { "id": "color", "value": { "mode": "fixed", "fixedColor": "#fa5252" } } ] }, + { "matcher": { "id": "byFrameRefID", "options": "B" }, "properties": [ { "id": "displayName", "value": "Gefühlt" }, { "id": "color", "value": { "mode": "fixed", "fixedColor": "#ff922b" } } ] }, + { "matcher": { "id": "byFrameRefID", "options": "C" }, "properties": [ { "id": "displayName", "value": "Taupunkt" }, { "id": "color", "value": { "mode": "fixed", "fixedColor": "#4dabf7" } } ] }, + { "matcher": { "id": "byFrameRefID", "options": "D" }, "properties": [ { "id": "displayName", "value": "Innen" }, { "id": "color", "value": { "mode": "fixed", "fixedColor": "#82c91e" } } ] } + ] + }, + "options": { "legend": { "displayMode": "list", "placement": "bottom", "calcs": ["lastNotNull"] }, "tooltip": { "mode": "multi" } }, + "targets": [ + { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"°C\" WHERE entity_id = 'gw3000a_outdoor_temperature' AND $__timeFilter(time) ORDER BY time" }, + { "refId": "B", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"°C\" WHERE entity_id = 'gw3000a_feels_like_temperature' AND $__timeFilter(time) ORDER BY time" }, + { "refId": "C", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"°C\" WHERE entity_id = 'gw3000a_dewpoint' AND $__timeFilter(time) ORDER BY time" }, + { "refId": "D", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"°C\" WHERE entity_id = 'gw3000a_indoor_temperature' AND $__timeFilter(time) ORDER BY time" } + ] + }, + { + "id": 8, + "title": "Luftfeuchte (%)", + "type": "timeseries", + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 5 }, + "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, + "fieldConfig": { + "defaults": { "unit": "percent", "min": 0, "max": 100, "custom": { "drawStyle": "line", "fillOpacity": 12, "lineWidth": 2, "showPoints": "never" } }, + "overrides": [ + { "matcher": { "id": "byFrameRefID", "options": "A" }, "properties": [ { "id": "displayName", "value": "Außen" }, { "id": "color", "value": { "mode": "fixed", "fixedColor": "#4dabf7" } } ] }, + { "matcher": { "id": "byFrameRefID", "options": "B" }, "properties": [ { "id": "displayName", "value": "Innen" }, { "id": "color", "value": { "mode": "fixed", "fixedColor": "#82c91e" } } ] } + ] + }, + "options": { "legend": { "displayMode": "list", "placement": "bottom", "calcs": ["lastNotNull"] }, "tooltip": { "mode": "multi" } }, + "targets": [ + { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"%\" WHERE entity_id = 'gw3000a_humidity' AND $__timeFilter(time) ORDER BY time" }, + { "refId": "B", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"%\" WHERE entity_id = 'gw3000a_indoor_humidity' AND $__timeFilter(time) ORDER BY time" } + ] + }, + { + "id": 9, + "title": "Solarstrahlung (W/m²)", + "type": "timeseries", + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 13 }, + "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, + "fieldConfig": { "defaults": { "unit": "wattm2", "color": { "mode": "fixed", "fixedColor": "#f2b705" }, "custom": { "drawStyle": "line", "fillOpacity": 35, "lineWidth": 1, "showPoints": "never", "gradientMode": "opacity" } }, "overrides": [] }, + "options": { "legend": { "displayMode": "hidden" }, "tooltip": { "mode": "single" } }, + "targets": [ { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"W/m²\" WHERE entity_id = 'gw3000a_solar_radiation' AND $__timeFilter(time) ORDER BY time" } ] + }, + { + "id": 10, + "title": "Wind (km/h)", + "type": "timeseries", + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 13 }, + "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, + "fieldConfig": { + "defaults": { "unit": "velocitykmh", "custom": { "drawStyle": "line", "fillOpacity": 10, "lineWidth": 2, "showPoints": "never" } }, + "overrides": [ + { "matcher": { "id": "byFrameRefID", "options": "A" }, "properties": [ { "id": "displayName", "value": "Wind" }, { "id": "color", "value": { "mode": "fixed", "fixedColor": "#15aabf" } } ] }, + { "matcher": { "id": "byFrameRefID", "options": "B" }, "properties": [ { "id": "displayName", "value": "Böe" }, { "id": "color", "value": { "mode": "fixed", "fixedColor": "#fab005" } } ] } + ] + }, + "options": { "legend": { "displayMode": "list", "placement": "bottom", "calcs": ["lastNotNull", "max"] }, "tooltip": { "mode": "multi" } }, + "targets": [ + { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"km/h\" WHERE entity_id = 'gw3000a_wind_speed' AND $__timeFilter(time) ORDER BY time" }, + { "refId": "B", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"km/h\" WHERE entity_id = 'gw3000a_wind_gust' AND $__timeFilter(time) ORDER BY time" } + ] + }, + { + "id": 11, + "title": "Regen pro Tag (mm)", + "type": "barchart", + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 21 }, + "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, + "fieldConfig": { "defaults": { "unit": "lengthmm", "color": { "mode": "fixed", "fixedColor": "#4dabf7" }, "custom": { "fillOpacity": 80, "lineWidth": 1 } }, "overrides": [] }, + "options": { "orientation": "vertical", "showValue": "auto", "xField": "time", "legend": { "showLegend": false }, "tooltip": { "mode": "single" } }, + "targets": [ { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "table", "rawSql": "SELECT date_bin(INTERVAL '1 day', time) AS time, max(value) AS value FROM \"mm\" WHERE entity_id = 'gw3000a_daily_rain' AND $__timeFilter(time) GROUP BY 1 ORDER BY 1" } ] + }, + { + "id": 12, "title": "Luftdruck (hPa)", "type": "timeseries", - "gridPos": { "h": 9, "w": 12, "x": 12, "y": 18 }, + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 21 }, "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, - "fieldConfig": { "defaults": { "unit": "pressurehpa", "custom": { "drawStyle": "line", "fillOpacity": 8 } }, "overrides": [] }, - "targets": [ - { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"hPa\" WHERE entity_id = 'gw3000a_relative_pressure' AND $__timeFilter(time) ORDER BY time" } - ] + "fieldConfig": { "defaults": { "unit": "pressurehpa", "decimals": 0, "color": { "mode": "fixed", "fixedColor": "#9775fa" }, "custom": { "drawStyle": "line", "fillOpacity": 10, "lineWidth": 2, "showPoints": "never" } }, "overrides": [] }, + "options": { "legend": { "displayMode": "hidden" }, "tooltip": { "mode": "single" } }, + "targets": [ { "refId": "A", "datasource": { "type": "influxdb", "uid": "ha-weather-influx" }, "rawQuery": true, "format": "time_series", "rawSql": "SELECT time, value FROM \"hPa\" WHERE entity_id = 'gw3000a_relative_pressure' AND $__timeFilter(time) ORDER BY time" } ] } ] }