From 91620e5f14c5d57ad4cf41b5070c1af2c154766f Mon Sep 17 00:00:00 2001 From: Claude Bot Date: Fri, 17 Jul 2026 00:43:57 +0200 Subject: [PATCH] fix(home-energy): repair dead panels, wrong queries, misleading semantics - Current by Phase: regex /smart_meter.*current/ matched nothing (smart meter exposes no current entities) -> use verified e380_energy_meter_e380_current_l[123]; spanNulls for sparse updates - Energy Consumption: measurement "kWh" does not exist in the bucket -> plot verified Wh daily counters (grid import/export, PV production, battery charge/discharge) with readable display names - Active Lights: light-domain data is never recorded under measurement "%" -> replace dead table with Lights/Standby/Switches power timeseries from verified powercalc aggregates (all_*_power) - Top 20 Devices: add group() so sort/limit work globally (was alphabetical, unsorted, per-table); exclude grid meters, PV/battery, forecasts, powercalc room/floor aggregates and _device_power twins; fresh 30-min window instead of stale last() over the full range; rowsToFields for clean labels (was "_value xyz_power") - Grid semantics: retitle Total Power -> Grid Power (+Import/-Export), blue threshold for export; unstack mixed-sign phase graph; short L1/L2/L3 legend names; taller voltage/current panels so the legend table is not cut off Co-Authored-By: Claude Opus 4.8 --- .../monitoring/dashboards/home-energy.json | 111 ++++++++++-------- 1 file changed, 65 insertions(+), 46 deletions(-) diff --git a/kubernetes/apps/monitoring/dashboards/home-energy.json b/kubernetes/apps/monitoring/dashboards/home-energy.json index c8be4180..7d76f5a5 100644 --- a/kubernetes/apps/monitoring/dashboards/home-energy.json +++ b/kubernetes/apps/monitoring/dashboards/home-energy.json @@ -21,7 +21,7 @@ "defaults": { "color": { "mode": "thresholds" }, "mappings": [], - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }, { "color": "yellow", "value": 2000 }, { "color": "orange", "value": 4000 }, { "color": "red", "value": 6000 }] }, + "thresholds": { "mode": "absolute", "steps": [{ "color": "blue", "value": null }, { "color": "green", "value": 0 }, { "color": "yellow", "value": 2000 }, { "color": "orange", "value": 4000 }, { "color": "red", "value": 6000 }] }, "unit": "watt" }, "overrides": [] @@ -30,7 +30,7 @@ "id": 1, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "center", "orientation": "auto", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, "targets": [{ "datasource": { "type": "influxdb", "uid": "influxdb" }, "query": "from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"smart_meter_sum_active_instantaneous_power\") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)", "refId": "A" }], - "title": "Total Power", + "title": "Grid Power (+ Import / − Export)", "type": "stat" }, { @@ -39,7 +39,7 @@ "defaults": { "color": { "mode": "thresholds" }, "mappings": [], - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }, { "color": "yellow", "value": 1000 }, { "color": "red", "value": 2000 }] }, + "thresholds": { "mode": "absolute", "steps": [{ "color": "blue", "value": null }, { "color": "green", "value": 0 }, { "color": "yellow", "value": 1000 }, { "color": "red", "value": 2000 }] }, "unit": "watt" }, "overrides": [] @@ -57,7 +57,7 @@ "defaults": { "color": { "mode": "thresholds" }, "mappings": [], - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }, { "color": "yellow", "value": 1000 }, { "color": "red", "value": 2000 }] }, + "thresholds": { "mode": "absolute", "steps": [{ "color": "blue", "value": null }, { "color": "green", "value": 0 }, { "color": "yellow", "value": 1000 }, { "color": "red", "value": 2000 }] }, "unit": "watt" }, "overrides": [] @@ -75,7 +75,7 @@ "defaults": { "color": { "mode": "thresholds" }, "mappings": [], - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }, { "color": "yellow", "value": 1000 }, { "color": "red", "value": 2000 }] }, + "thresholds": { "mode": "absolute", "steps": [{ "color": "blue", "value": null }, { "color": "green", "value": 0 }, { "color": "yellow", "value": 1000 }, { "color": "red", "value": 2000 }] }, "unit": "watt" }, "overrides": [] @@ -98,12 +98,16 @@ "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, - "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 20, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", "mode": "normal" }, "thresholdsStyle": { "mode": "off" } }, + "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 10, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, "unit": "watt" }, - "overrides": [] + "overrides": [ + { "matcher": { "id": "byName", "options": "smart_meter_l1_active_instantaneous_power" }, "properties": [{ "id": "displayName", "value": "L1" }] }, + { "matcher": { "id": "byName", "options": "smart_meter_l2_active_instantaneous_power" }, "properties": [{ "id": "displayName", "value": "L2" }] }, + { "matcher": { "id": "byName", "options": "smart_meter_l3_active_instantaneous_power" }, "properties": [{ "id": "displayName", "value": "L3" }] } + ] }, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 8 }, "id": 10, @@ -111,7 +115,7 @@ "targets": [ { "datasource": { "type": "influxdb", "uid": "influxdb" }, "query": "from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id =~ /^smart_meter_l[123]_active_instantaneous_power$/) |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> keep(columns: [\"_time\", \"_value\", \"entity_id\"])", "refId": "A" } ], - "title": "Power by Phase (Stacked)", + "title": "Grid Power by Phase", "type": "timeseries" }, { @@ -122,15 +126,16 @@ "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 5, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, - "unit": "watt" + "unit": "watt", + "displayName": "Grid Power" }, "overrides": [] }, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 18 }, "id": 11, "options": { "legend": { "calcs": ["mean", "max", "lastNotNull"], "displayMode": "table", "placement": "right", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, - "targets": [{ "datasource": { "type": "influxdb", "uid": "influxdb" }, "query": "from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"smart_meter_sum_active_instantaneous_power\") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)", "refId": "A" }], - "title": "Total Power Over Time", + "targets": [{ "datasource": { "type": "influxdb", "uid": "influxdb" }, "query": "from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"smart_meter_sum_active_instantaneous_power\") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> keep(columns: [\"_time\", \"_value\"])", "refId": "A" }], + "title": "Grid Power Over Time (negative = Export)", "type": "timeseries" }, { @@ -149,9 +154,13 @@ "thresholds": { "mode": "absolute", "steps": [{ "color": "red", "value": null }, { "color": "yellow", "value": 220 }, { "color": "green", "value": 230 }, { "color": "yellow", "value": 240 }, { "color": "red", "value": 250 }] }, "unit": "volt" }, - "overrides": [] + "overrides": [ + { "matcher": { "id": "byName", "options": "smart_meter_l1_active_instantaneous_voltage" }, "properties": [{ "id": "displayName", "value": "L1" }] }, + { "matcher": { "id": "byName", "options": "smart_meter_l2_active_instantaneous_voltage" }, "properties": [{ "id": "displayName", "value": "L2" }] }, + { "matcher": { "id": "byName", "options": "smart_meter_l3_active_instantaneous_voltage" }, "properties": [{ "id": "displayName", "value": "L3" }] } + ] }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 29 }, + "gridPos": { "h": 9, "w": 12, "x": 0, "y": 29 }, "id": 20, "options": { "legend": { "calcs": ["mean", "min", "max"], "displayMode": "table", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "targets": [{ "datasource": { "type": "influxdb", "uid": "influxdb" }, "query": "from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"V\" and r._field == \"value\" and r.entity_id =~ /^smart_meter_l[123]_active_instantaneous_voltage$/) |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> keep(columns: [\"_time\", \"_value\", \"entity_id\"])", "refId": "A" }], @@ -163,22 +172,26 @@ "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, - "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 5, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, + "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 5, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "never", "spanNulls": true, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, "unit": "amp" }, - "overrides": [] + "overrides": [ + { "matcher": { "id": "byName", "options": "e380_energy_meter_e380_current_l1" }, "properties": [{ "id": "displayName", "value": "L1" }] }, + { "matcher": { "id": "byName", "options": "e380_energy_meter_e380_current_l2" }, "properties": [{ "id": "displayName", "value": "L2" }] }, + { "matcher": { "id": "byName", "options": "e380_energy_meter_e380_current_l3" }, "properties": [{ "id": "displayName", "value": "L3" }] } + ] }, - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 29 }, + "gridPos": { "h": 9, "w": 12, "x": 12, "y": 29 }, "id": 21, "options": { "legend": { "calcs": ["mean", "max"], "displayMode": "table", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, - "targets": [{ "datasource": { "type": "influxdb", "uid": "influxdb" }, "query": "from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"A\" and r._field == \"value\" and r.entity_id =~ /smart_meter.*current/) |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> keep(columns: [\"_time\", \"_value\", \"entity_id\"])", "refId": "A" }], - "title": "Current by Phase (if available)", + "targets": [{ "datasource": { "type": "influxdb", "uid": "influxdb" }, "query": "from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"A\" and r._field == \"value\" and r.entity_id =~ /^e380_energy_meter_e380_current_l[123]$/) |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> keep(columns: [\"_time\", \"_value\", \"entity_id\"])", "refId": "A" }], + "title": "Current by Phase (E380)", "type": "timeseries" }, { - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 37 }, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 38 }, "id": 103, "title": "Device Power Consumption", "type": "row" @@ -189,22 +202,22 @@ "defaults": { "color": { "mode": "thresholds" }, "mappings": [], - "max": 500, "min": 0, "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }, { "color": "yellow", "value": 100 }, { "color": "orange", "value": 200 }, { "color": "red", "value": 300 }] }, "unit": "watt" }, "overrides": [] }, - "gridPos": { "h": 10, "w": 24, "x": 0, "y": 38 }, + "gridPos": { "h": 10, "w": 24, "x": 0, "y": 39 }, "id": 30, "options": { "displayMode": "lcd", "minVizHeight": 10, "minVizWidth": 0, "orientation": "horizontal", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "showUnfilled": true, "valueMode": "color" }, - "targets": [{ "datasource": { "type": "influxdb", "uid": "influxdb" }, "query": "from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and not (r.entity_id =~ /phase/)) |> last() |> filter(fn: (r) => r._value > 0) |> sort(columns: [\"_value\"], desc: true) |> limit(n: 20) |> keep(columns: [\"_value\", \"entity_id\"])", "refId": "A" }], - "title": "Top 20 Power Consuming Devices", + "targets": [{ "datasource": { "type": "influxdb", "uid": "influxdb" }, "query": "from(bucket: \"suedstr28\") |> range(start: -30m) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\") |> filter(fn: (r) => r.entity_id !~ /^(all_|evcc_|solcast_|power_production_|smart_meter_|e380_|vitocharge_|vx3_|strom|hauslast|netzbezug|eigenverbrauch|erfasste_|erlaubte_|shellypro3em63_)/) |> filter(fn: (r) => r.entity_id !~ /_device_power$/) |> filter(fn: (r) => r.entity_id !~ /^(eg|og|dg|kg)_[a-z]+_power$/) |> filter(fn: (r) => r.entity_id !~ /^(erdgeschoss|obergeschoss|dachgeschoss|keller|ausenbereich|garten|galerie_leer|galerie_licht|treppenhaus_total)_power$/) |> filter(fn: (r) => r.entity_id !~ /^keller_[a-z]+_power$/) |> filter(fn: (r) => r.entity_id !~ /^(trockner|waschmaschine)_current_power$/) |> filter(fn: (r) => r.entity_id !~ /(thermal|refrigerant|heater|dhw_loading)_power$/) |> filter(fn: (r) => r.entity_id !~ /electric_consumption_w_2$/) |> last() |> filter(fn: (r) => r._value > 1.0) |> group() |> sort(columns: [\"_value\"], desc: true) |> limit(n: 20) |> keep(columns: [\"entity_id\", \"_value\"])", "refId": "A" }], + "transformations": [{ "id": "rowsToFields", "options": {} }], + "title": "Top 20 Power Consuming Devices (last 30 min)", "type": "bargauge" }, { - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 48 }, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 49 }, "id": 104, "title": "Energy Consumption", "type": "row" @@ -217,45 +230,51 @@ "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 5, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, - "unit": "kwatth" + "unit": "watth" }, - "overrides": [] + "overrides": [ + { "matcher": { "id": "byName", "options": "strom_bezug_tag" }, "properties": [{ "id": "displayName", "value": "Grid Import (today)" }] }, + { "matcher": { "id": "byName", "options": "strom_einspeisung_tag" }, "properties": [{ "id": "displayName", "value": "Grid Export (today)" }] }, + { "matcher": { "id": "byName", "options": "vitocharge_vx3_vx3_pv_production_today" }, "properties": [{ "id": "displayName", "value": "PV Production (today)" }] }, + { "matcher": { "id": "byName", "options": "vitocharge_vx3_vx3_battery_charge_today" }, "properties": [{ "id": "displayName", "value": "Battery Charge (today)" }] }, + { "matcher": { "id": "byName", "options": "vitocharge_vx3_vx3_battery_discharge_today" }, "properties": [{ "id": "displayName", "value": "Battery Discharge (today)" }] } + ] }, - "gridPos": { "h": 8, "w": 24, "x": 0, "y": 49 }, + "gridPos": { "h": 8, "w": 24, "x": 0, "y": 50 }, "id": 40, - "options": { "legend": { "calcs": ["lastNotNull", "diff"], "displayMode": "table", "placement": "right", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, - "targets": [{ "datasource": { "type": "influxdb", "uid": "influxdb" }, "query": "from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"kWh\" and r._field == \"value\" and r.entity_id =~ /(energy|verbrauch)/i) |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> keep(columns: [\"_time\", \"_value\", \"entity_id\"])", "refId": "A" }], - "title": "Energy Consumption (kWh)", + "options": { "legend": { "calcs": ["lastNotNull", "max"], "displayMode": "table", "placement": "right", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, + "targets": [{ "datasource": { "type": "influxdb", "uid": "influxdb" }, "query": "from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"Wh\" and r._field == \"value\" and r.entity_id =~ /^(strom_bezug_tag|strom_einspeisung_tag|vitocharge_vx3_vx3_pv_production_today|vitocharge_vx3_vx3_battery_charge_today|vitocharge_vx3_vx3_battery_discharge_today)$/) |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false) |> keep(columns: [\"_time\", \"_value\", \"entity_id\"])", "refId": "A" }], + "title": "Energy Today (Grid / PV / Battery)", "type": "timeseries" }, { - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 57 }, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 58 }, "id": 105, - "title": "Lights", + "title": "Lights & Standby", "type": "row" }, { "datasource": { "type": "influxdb", "uid": "influxdb" }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, - "custom": { "align": "auto", "cellOptions": { "type": "color-background" }, "inspect": false }, + "color": { "mode": "palette-classic" }, + "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 10, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], - "thresholds": { "mode": "absolute", "steps": [{ "color": "dark-green", "value": null }, { "color": "yellow", "value": 1 }, { "color": "orange", "value": 50 }, { "color": "light-yellow", "value": 100 }] }, - "unit": "percent" + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, + "unit": "watt" }, - "overrides": [] + "overrides": [ + { "matcher": { "id": "byName", "options": "all_lights_power" }, "properties": [{ "id": "displayName", "value": "Lights (total)" }] }, + { "matcher": { "id": "byName", "options": "all_standby_power" }, "properties": [{ "id": "displayName", "value": "Standby (total)" }] }, + { "matcher": { "id": "byName", "options": "all_switches_power" }, "properties": [{ "id": "displayName", "value": "Switches (total)" }] } + ] }, - "gridPos": { "h": 10, "w": 24, "x": 0, "y": 58 }, + "gridPos": { "h": 10, "w": 24, "x": 0, "y": 59 }, "id": 50, - "options": { "showHeader": true, "cellHeight": "sm", "footer": { "show": false }, "sortBy": [{ "desc": true, "displayName": "Brightness" }] }, - "pluginVersion": "10.0.0", - "targets": [{ "datasource": { "type": "influxdb", "uid": "influxdb" }, "query": "from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r.domain == \"light\" and r._measurement == \"%\" and r._field == \"value\") |> last() |> filter(fn: (r) => r._value > 0) |> keep(columns: [\"entity_id\", \"_value\"])", "refId": "A" }], - "title": "Active Lights", - "transformations": [ - { "id": "organize", "options": { "excludeByName": { "Time": true, "__name__": true, "domain": true, "instance": true, "job": true }, "renameByName": { "_value": "Brightness", "entity_id": "Light" } } } - ], - "type": "table" + "options": { "legend": { "calcs": ["mean", "max", "lastNotNull"], "displayMode": "table", "placement": "right", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, + "targets": [{ "datasource": { "type": "influxdb", "uid": "influxdb" }, "query": "from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id =~ /^all_(lights|standby|switches)_power$/) |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> keep(columns: [\"_time\", \"_value\", \"entity_id\"])", "refId": "A" }], + "title": "Lights / Standby / Switches Power", + "type": "timeseries" } ], "refresh": "30s", -- 2.54.0