From d60a975389ffb5fce7a100d01aa8448c35e4b4a7 Mon Sep 17 00:00:00 2001 From: "willem.serruys" Date: Mon, 29 Dec 2025 05:18:13 +0100 Subject: [PATCH] chore: added grafana resources --- .../alerts/electricity_negative_peak.json | 166 ++++++++ .../alerts/electricity_peak_too_high.json | 166 ++++++++ ...energy_consumption.json => always_on.json} | 372 +++++++++--------- ...ost_pc.json => energy_visualizations.json} | 372 +++++++++--------- configurations/grafana/dashboards/prices.json | 160 ++++++++ .../grafana/dashboards/temperatures.json | 328 +++++++++++++++ 6 files changed, 1184 insertions(+), 380 deletions(-) create mode 100644 configurations/grafana/alerts/electricity_negative_peak.json create mode 100644 configurations/grafana/alerts/electricity_peak_too_high.json rename configurations/grafana/dashboards/{energy_consumption.json => always_on.json} (51%) rename configurations/grafana/dashboards/{host_pc.json => energy_visualizations.json} (51%) create mode 100644 configurations/grafana/dashboards/prices.json create mode 100644 configurations/grafana/dashboards/temperatures.json diff --git a/configurations/grafana/alerts/electricity_negative_peak.json b/configurations/grafana/alerts/electricity_negative_peak.json new file mode 100644 index 0000000..f672fc5 --- /dev/null +++ b/configurations/grafana/alerts/electricity_negative_peak.json @@ -0,0 +1,166 @@ +{ + "apiVersion": 1, + "groups": [ + { + "orgId": 1, + "name": "Home", + "folder": "Power", + "interval": "10s", + "rules": [ + { + "uid": "ef6m5j923ruv4f", + "title": "Alert if peak is too high", + "condition": "C", + "data": [ + { + "refId": "A", + "relativeTimeRange": { "from": 600, "to": 0 }, + "datasourceUid": "cf6lzj1gt48aoe", + "model": { + "intervalMs": 1000, + "maxDataPoints": 43200, + "query": "from(bucket: \"homeassistant\")\n |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |\u003e filter(fn: (r) =\u003e r[\"entity_id\"] == \"thienpont_serruys_load_grid\")\n |\u003e filter(fn: (r) =\u003e r[\"_field\"] == \"value\")\n |\u003e filter(fn: (r) =\u003e r[\"domain\"] == \"sensor\")\n |\u003e filter(fn: (r) =\u003e r[\"_measurement\"] == \"W\")\n |\u003e aggregateWindow(every: 15m, fn: mean, createEmpty: false, offset: 0s)\n |\u003e yield(name: \"peak_load_15min\")\n", + "refId": "A" + } + }, + { + "refId": "B", + "relativeTimeRange": { "from": 0, "to": 0 }, + "datasourceUid": "__expr__", + "model": { + "conditions": [ + { + "evaluator": { "params": [], "type": "gt" }, + "operator": { "type": "and" }, + "query": { "params": ["B"] }, + "reducer": { "params": [], "type": "last" }, + "type": "query" + } + ], + "datasource": { "type": "__expr__", "uid": "__expr__" }, + "expression": "A", + "intervalMs": 1000, + "maxDataPoints": 43200, + "reducer": "last", + "refId": "B", + "type": "reduce" + } + }, + { + "refId": "C", + "relativeTimeRange": { "from": 0, "to": 0 }, + "datasourceUid": "__expr__", + "model": { + "conditions": [ + { + "evaluator": { "params": [5500], "type": "gt" }, + "operator": { "type": "and" }, + "query": { "params": ["C"] }, + "reducer": { "params": [], "type": "last" }, + "type": "query" + } + ], + "datasource": { "type": "__expr__", "uid": "__expr__" }, + "expression": "B", + "intervalMs": 1000, + "maxDataPoints": 43200, + "refId": "C", + "type": "threshold" + } + } + ], + "dashboardUid": "2990096a-3ff9-4217-a629-2152a260b6b6", + "panelId": 3, + "noDataState": "NoData", + "execErrState": "Error", + "keepFiringFor": "1m", + "annotations": { + "__dashboardUid__": "2990096a-3ff9-4217-a629-2152a260b6b6", + "__panelId__": "3", + "description": "Disable some devices to lower the peak.", + "summary": "Peak is too high!" + }, + "isPaused": false, + "notification_settings": { "receiver": "Telegram" } + }, + { + "uid": "af8fsdow4mjgga", + "title": "Alert if peak is negative", + "condition": "C", + "data": [ + { + "refId": "A", + "relativeTimeRange": { "from": 600, "to": 0 }, + "datasourceUid": "cf6lzj1gt48aoe", + "model": { + "intervalMs": 1000, + "maxDataPoints": 43200, + "query": "from(bucket: \"homeassistant\")\n |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |\u003e filter(fn: (r) =\u003e r[\"entity_id\"] == \"thienpont_serruys_load_grid\")\n |\u003e filter(fn: (r) =\u003e r[\"_field\"] == \"value\")\n |\u003e filter(fn: (r) =\u003e r[\"domain\"] == \"sensor\")\n |\u003e filter(fn: (r) =\u003e r[\"_measurement\"] == \"W\")\n |\u003e aggregateWindow(every: 15m, fn: mean, createEmpty: false, offset: 0s)\n |\u003e yield(name: \"peak_load_15min\")\n", + "refId": "A" + } + }, + { + "refId": "B", + "relativeTimeRange": { "from": 0, "to": 0 }, + "datasourceUid": "__expr__", + "model": { + "conditions": [ + { + "evaluator": { "params": [], "type": "gt" }, + "operator": { "type": "and" }, + "query": { "params": ["B"] }, + "reducer": { "params": [], "type": "last" }, + "type": "query" + } + ], + "datasource": { "type": "__expr__", "uid": "__expr__" }, + "expression": "A", + "intervalMs": 1000, + "maxDataPoints": 43200, + "reducer": "last", + "refId": "B", + "type": "reduce" + } + }, + { + "refId": "C", + "relativeTimeRange": { "from": 0, "to": 0 }, + "datasourceUid": "__expr__", + "model": { + "conditions": [ + { + "evaluator": { "params": [0], "type": "lt" }, + "operator": { "type": "and" }, + "query": { "params": ["C"] }, + "reducer": { "params": [], "type": "last" }, + "type": "query" + } + ], + "datasource": { "type": "__expr__", "uid": "__expr__" }, + "expression": "B", + "intervalMs": 1000, + "maxDataPoints": 43200, + "refId": "C", + "type": "threshold" + } + } + ], + "dashboardUid": "2990096a-3ff9-4217-a629-2152a260b6b6", + "panelId": 3, + "noDataState": "NoData", + "execErrState": "Error", + "keepFiringFor": "1m", + "annotations": { + "__dashboardUid__": "2990096a-3ff9-4217-a629-2152a260b6b6", + "__panelId__": "3", + "description": "Enable some devices", + "summary": "Peak is too high!" + }, + "labels": {}, + "isPaused": false, + "notification_settings": { "receiver": "Telegram" } + } + ] + } + ] +} diff --git a/configurations/grafana/alerts/electricity_peak_too_high.json b/configurations/grafana/alerts/electricity_peak_too_high.json new file mode 100644 index 0000000..2eea67b --- /dev/null +++ b/configurations/grafana/alerts/electricity_peak_too_high.json @@ -0,0 +1,166 @@ +{ + "apiVersion": 1, + "groups": [ + { + "orgId": 1, + "name": "Home", + "folder": "Power", + "interval": "10s", + "rules": [ + { + "uid": "ef6m5j923ruv4f", + "title": "Alert if peak is too high", + "condition": "C", + "data": [ + { + "refId": "A", + "relativeTimeRange": { "from": 600, "to": 0 }, + "datasourceUid": "cf6lzj1gt48aoe", + "model": { + "intervalMs": 1000, + "maxDataPoints": 43200, + "query": "from(bucket: \"homeassistant\")\n |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |\u003e filter(fn: (r) =\u003e r[\"entity_id\"] == \"thienpont_serruys_load_grid\")\n |\u003e filter(fn: (r) =\u003e r[\"_field\"] == \"value\")\n |\u003e filter(fn: (r) =\u003e r[\"domain\"] == \"sensor\")\n |\u003e filter(fn: (r) =\u003e r[\"_measurement\"] == \"W\")\n |\u003e aggregateWindow(every: 15m, fn: mean, createEmpty: false, offset: 0s)\n |\u003e yield(name: \"peak_load_15min\")\n", + "refId": "A" + } + }, + { + "refId": "B", + "relativeTimeRange": { "from": 0, "to": 0 }, + "datasourceUid": "__expr__", + "model": { + "conditions": [ + { + "evaluator": { "params": [], "type": "gt" }, + "operator": { "type": "and" }, + "query": { "params": ["B"] }, + "reducer": { "params": [], "type": "last" }, + "type": "query" + } + ], + "datasource": { "type": "__expr__", "uid": "__expr__" }, + "expression": "A", + "intervalMs": 1000, + "maxDataPoints": 43200, + "reducer": "last", + "refId": "B", + "type": "reduce" + } + }, + { + "refId": "C", + "relativeTimeRange": { "from": 0, "to": 0 }, + "datasourceUid": "__expr__", + "model": { + "conditions": [ + { + "evaluator": { "params": [5500], "type": "gt" }, + "operator": { "type": "and" }, + "query": { "params": ["C"] }, + "reducer": { "params": [], "type": "last" }, + "type": "query" + } + ], + "datasource": { "type": "__expr__", "uid": "__expr__" }, + "expression": "B", + "intervalMs": 1000, + "maxDataPoints": 43200, + "refId": "C", + "type": "threshold" + } + } + ], + "dashboardUid": "2990096a-3ff9-4217-a629-2152a260b6b6", + "panelId": 3, + "noDataState": "NoData", + "execErrState": "Error", + "keepFiringFor": "1m", + "annotations": { + "__dashboardUid__": "2990096a-3ff9-4217-a629-2152a260b6b6", + "__panelId__": "3", + "description": "Disable some devices to lower the peak.", + "summary": "Peak is too high!" + }, + "labels": {}, + "isPaused": false, + "notification_settings": { "receiver": "Telegram" } + }, + { + "uid": "af8fsdow4mjgga", + "title": "Alert if peak is negative", + "condition": "C", + "data": [ + { + "refId": "A", + "relativeTimeRange": { "from": 600, "to": 0 }, + "datasourceUid": "cf6lzj1gt48aoe", + "model": { + "intervalMs": 1000, + "maxDataPoints": 43200, + "query": "from(bucket: \"homeassistant\")\n |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |\u003e filter(fn: (r) =\u003e r[\"entity_id\"] == \"thienpont_serruys_load_grid\")\n |\u003e filter(fn: (r) =\u003e r[\"_field\"] == \"value\")\n |\u003e filter(fn: (r) =\u003e r[\"domain\"] == \"sensor\")\n |\u003e filter(fn: (r) =\u003e r[\"_measurement\"] == \"W\")\n |\u003e aggregateWindow(every: 15m, fn: mean, createEmpty: false, offset: 0s)\n |\u003e yield(name: \"peak_load_15min\")\n", + "refId": "A" + } + }, + { + "refId": "B", + "relativeTimeRange": { "from": 0, "to": 0 }, + "datasourceUid": "__expr__", + "model": { + "conditions": [ + { + "evaluator": { "params": [], "type": "gt" }, + "operator": { "type": "and" }, + "query": { "params": ["B"] }, + "reducer": { "params": [], "type": "last" }, + "type": "query" + } + ], + "datasource": { "type": "__expr__", "uid": "__expr__" }, + "expression": "A", + "intervalMs": 1000, + "maxDataPoints": 43200, + "reducer": "last", + "refId": "B", + "type": "reduce" + } + }, + { + "refId": "C", + "relativeTimeRange": { "from": 0, "to": 0 }, + "datasourceUid": "__expr__", + "model": { + "conditions": [ + { + "evaluator": { "params": [0], "type": "lt" }, + "operator": { "type": "and" }, + "query": { "params": ["C"] }, + "reducer": { "params": [], "type": "last" }, + "type": "query" + } + ], + "datasource": { "type": "__expr__", "uid": "__expr__" }, + "expression": "B", + "intervalMs": 1000, + "maxDataPoints": 43200, + "refId": "C", + "type": "threshold" + } + } + ], + "dashboardUid": "2990096a-3ff9-4217-a629-2152a260b6b6", + "panelId": 3, + "noDataState": "NoData", + "execErrState": "Error", + "keepFiringFor": "1m", + "annotations": { + "__dashboardUid__": "2990096a-3ff9-4217-a629-2152a260b6b6", + "__panelId__": "3", + "description": "Enable some devices", + "summary": "Peak is too high!" + }, + "isPaused": false, + "notification_settings": { "receiver": "Telegram" } + } + ] + } + ] +} diff --git a/configurations/grafana/dashboards/energy_consumption.json b/configurations/grafana/dashboards/always_on.json similarity index 51% rename from configurations/grafana/dashboards/energy_consumption.json rename to configurations/grafana/dashboards/always_on.json index 6492857..a191f9f 100644 --- a/configurations/grafana/dashboards/energy_consumption.json +++ b/configurations/grafana/dashboards/always_on.json @@ -18,13 +18,136 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": 1, + "id": 5, "links": [], "panels": [ { "datasource": { "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" + "uid": "cf6lzj1gt48aoe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "watth" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1", + "targets": [ + { + "query": "from(bucket: \"homeassistant\")\n |> range(start: -1y)\n |> filter(fn: (r) => r[\"entity_id\"] == \"christmas_lights_switch_0_power\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> aggregateWindow(every: 1h, fn: mean, createEmpty: false)\n |> sum()\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Total Energy Christmas Lights", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cf6lzj1gt48aoe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "currencyEUR" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 6, + "y": 0 + }, + "id": 5, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "value", + "wideLayout": true + }, + "pluginVersion": "12.0.1", + "targets": [ + { + "query": "from(bucket: \"homeassistant\")\n |> range(start: -1y)\n |> filter(fn: (r) => r[\"entity_id\"] == \"christmas_lights_switch_0_power\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> aggregateWindow(every: 1h, fn: mean, createEmpty: false)\n |> sum()\n |> map(fn: (r) => ({ r with _value: r._value / 1000.0 * 0.13 }))\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Total Price Christmas Lights", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cf6lzj1gt48aoe" }, "fieldConfig": { "defaults": { @@ -32,7 +155,7 @@ "mode": "palette-classic" }, "custom": { - "axisBorderShow": true, + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -40,20 +163,17 @@ "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", - "fillOpacity": 18, - "gradientMode": "opacity", + "fillOpacity": 0, + "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, - "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 6, + "lineInterpolation": "stepAfter", + "lineWidth": 1, + "pointSize": 5, "scaleDistribution": { "type": "linear" }, @@ -72,8 +192,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -86,45 +205,39 @@ "overrides": [] }, "gridPos": { - "h": 13, - "w": 23, + "h": 8, + "w": 12, "x": 0, - "y": 0 + "y": 5 }, "id": 1, "options": { "legend": { - "calcs": [ - "last" - ], - "displayMode": "table", + "calcs": [], + "displayMode": "list", "placement": "bottom", - "showLegend": true + "showLegend": false }, "tooltip": { + "hideZeros": false, "mode": "single", "sort": "none" } }, - "pluginVersion": "11.3.0", + "pluginVersion": "12.0.1", "targets": [ { - "datasource": { - "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" - }, - "query": "from(bucket: \"homeassistant\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\r\n |> filter(fn: (r) => r[\"entity_id\"] == \"p1_meter_power\" or r[\"entity_id\"] == \"p1_meter_power_phase_1\" or r[\"entity_id\"] == \"p1_meter_power_phase_2\" or r[\"entity_id\"] == \"p1_meter_power_phase_3\")\r\n |> group(columns: [\"friendly_name\"], mode: \"by\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean\")\r\n", + "query": "from(bucket: \"homeassistant\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"entity_id\"] == \"always_on_bureau_switch_0_power\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", "refId": "A" } ], - "title": "Energy Consumption", - "transparent": true, + "title": "Bureau", "type": "timeseries" }, { "datasource": { "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" + "uid": "cf6lzj1gt48aoe" }, "fieldConfig": { "defaults": { @@ -132,7 +245,7 @@ "mode": "palette-classic" }, "custom": { - "axisBorderShow": true, + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -140,20 +253,17 @@ "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", - "fillOpacity": 18, - "gradientMode": "opacity", + "fillOpacity": 0, + "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, - "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 6, + "lineInterpolation": "stepAfter", + "lineWidth": 1, + "pointSize": 5, "scaleDistribution": { "type": "linear" }, @@ -172,8 +282,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -186,45 +295,39 @@ "overrides": [] }, "gridPos": { - "h": 13, - "w": 23, + "h": 8, + "w": 12, "x": 0, "y": 13 }, - "id": 5, + "id": 2, "options": { "legend": { - "calcs": [ - "last" - ], - "displayMode": "table", + "calcs": [], + "displayMode": "list", "placement": "bottom", "showLegend": false }, "tooltip": { + "hideZeros": false, "mode": "single", "sort": "none" } }, - "pluginVersion": "11.3.0", + "pluginVersion": "12.0.1", "targets": [ { - "datasource": { - "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" - }, - "query": "from(bucket: \"homeassistant\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"friendly_name\"] == \"Heat Pump power\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n |> group(columns: [\"friendly_name\"], mode: \"by\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean\")\r\n", + "query": "from(bucket: \"homeassistant\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"entity_id\"] == \"always_on_living_power\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", "refId": "A" } ], - "title": "Heat Pump Consumption", - "transparent": true, + "title": "Living", "type": "timeseries" }, { "datasource": { "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" + "uid": "cf6lzj1gt48aoe" }, "fieldConfig": { "defaults": { @@ -232,7 +335,7 @@ "mode": "palette-classic" }, "custom": { - "axisBorderShow": true, + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -240,8 +343,8 @@ "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", - "fillOpacity": 18, - "gradientMode": "opacity", + "fillOpacity": 0, + "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, @@ -249,16 +352,13 @@ }, "insertNulls": false, "lineInterpolation": "stepAfter", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 6, + "lineWidth": 1, + "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", - "spanNulls": true, + "spanNulls": false, "stacking": { "group": "A", "mode": "none" @@ -272,8 +372,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -281,161 +380,54 @@ } ] }, - "unit": "bool_on_off" + "unit": "watt" }, "overrides": [] }, "gridPos": { - "h": 13, - "w": 23, + "h": 8, + "w": 12, "x": 0, - "y": 26 + "y": 21 }, "id": 3, "options": { "legend": { - "calcs": [ - "last" - ], - "displayMode": "table", + "calcs": [], + "displayMode": "list", "placement": "bottom", - "showLegend": true + "showLegend": false }, "tooltip": { + "hideZeros": false, "mode": "single", "sort": "none" } }, - "pluginVersion": "11.3.0", + "pluginVersion": "12.0.1", "targets": [ { - "datasource": { - "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" - }, - "query": "from(bucket: \"homeassistant\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"entity_id\"] == \"shellyplusplugs_c82e18083448_switch_0\" or r[\"entity_id\"] == \"shellyplusplugs_fcb4670e63cc_switch_0\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n |> group(columns: [\"entity_id\"], mode: \"by\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean\")", + "query": "from(bucket: \"homeassistant\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"entity_id\"] == \"christmas_lights_switch_0_power\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", "refId": "A" } ], "title": "Christmas Lights", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": true, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 18, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "stepAfter", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 6, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bool_on_off" - }, - "overrides": [] - }, - "gridPos": { - "h": 13, - "w": 23, - "x": 0, - "y": 39 - }, - "id": 4, - "options": { - "legend": { - "calcs": [ - "last" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "11.3.0", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" - }, - "query": "from(bucket: \"homeassistant\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"entity_id\"] == \"shelly1_98cdac2de851\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n |> group(columns: [\"friendly_name\"], mode: \"by\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Carport Light", - "transparent": true, "type": "timeseries" } ], "preload": false, - "schemaVersion": 40, + "schemaVersion": 41, "tags": [], "templating": { "list": [] }, "time": { - "from": "now-24h", + "from": "now-6h", "to": "now" }, "timepicker": {}, "timezone": "browser", - "title": "Energy Consumption", - "uid": "fe6zfiev1n3swc", - "version": 21, - "weekStart": "" + "title": "Always On", + "uid": "facf3c5d-3b86-4347-92ba-6d0ccb898955", + "version": 19 } diff --git a/configurations/grafana/dashboards/host_pc.json b/configurations/grafana/dashboards/energy_visualizations.json similarity index 51% rename from configurations/grafana/dashboards/host_pc.json rename to configurations/grafana/dashboards/energy_visualizations.json index 6492857..a191f9f 100644 --- a/configurations/grafana/dashboards/host_pc.json +++ b/configurations/grafana/dashboards/energy_visualizations.json @@ -18,13 +18,136 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": 1, + "id": 5, "links": [], "panels": [ { "datasource": { "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" + "uid": "cf6lzj1gt48aoe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "watth" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1", + "targets": [ + { + "query": "from(bucket: \"homeassistant\")\n |> range(start: -1y)\n |> filter(fn: (r) => r[\"entity_id\"] == \"christmas_lights_switch_0_power\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> aggregateWindow(every: 1h, fn: mean, createEmpty: false)\n |> sum()\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Total Energy Christmas Lights", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cf6lzj1gt48aoe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "currencyEUR" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 6, + "y": 0 + }, + "id": 5, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "value", + "wideLayout": true + }, + "pluginVersion": "12.0.1", + "targets": [ + { + "query": "from(bucket: \"homeassistant\")\n |> range(start: -1y)\n |> filter(fn: (r) => r[\"entity_id\"] == \"christmas_lights_switch_0_power\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> aggregateWindow(every: 1h, fn: mean, createEmpty: false)\n |> sum()\n |> map(fn: (r) => ({ r with _value: r._value / 1000.0 * 0.13 }))\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Total Price Christmas Lights", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cf6lzj1gt48aoe" }, "fieldConfig": { "defaults": { @@ -32,7 +155,7 @@ "mode": "palette-classic" }, "custom": { - "axisBorderShow": true, + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -40,20 +163,17 @@ "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", - "fillOpacity": 18, - "gradientMode": "opacity", + "fillOpacity": 0, + "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, - "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 6, + "lineInterpolation": "stepAfter", + "lineWidth": 1, + "pointSize": 5, "scaleDistribution": { "type": "linear" }, @@ -72,8 +192,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -86,45 +205,39 @@ "overrides": [] }, "gridPos": { - "h": 13, - "w": 23, + "h": 8, + "w": 12, "x": 0, - "y": 0 + "y": 5 }, "id": 1, "options": { "legend": { - "calcs": [ - "last" - ], - "displayMode": "table", + "calcs": [], + "displayMode": "list", "placement": "bottom", - "showLegend": true + "showLegend": false }, "tooltip": { + "hideZeros": false, "mode": "single", "sort": "none" } }, - "pluginVersion": "11.3.0", + "pluginVersion": "12.0.1", "targets": [ { - "datasource": { - "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" - }, - "query": "from(bucket: \"homeassistant\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\r\n |> filter(fn: (r) => r[\"entity_id\"] == \"p1_meter_power\" or r[\"entity_id\"] == \"p1_meter_power_phase_1\" or r[\"entity_id\"] == \"p1_meter_power_phase_2\" or r[\"entity_id\"] == \"p1_meter_power_phase_3\")\r\n |> group(columns: [\"friendly_name\"], mode: \"by\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean\")\r\n", + "query": "from(bucket: \"homeassistant\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"entity_id\"] == \"always_on_bureau_switch_0_power\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", "refId": "A" } ], - "title": "Energy Consumption", - "transparent": true, + "title": "Bureau", "type": "timeseries" }, { "datasource": { "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" + "uid": "cf6lzj1gt48aoe" }, "fieldConfig": { "defaults": { @@ -132,7 +245,7 @@ "mode": "palette-classic" }, "custom": { - "axisBorderShow": true, + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -140,20 +253,17 @@ "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", - "fillOpacity": 18, - "gradientMode": "opacity", + "fillOpacity": 0, + "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, - "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 6, + "lineInterpolation": "stepAfter", + "lineWidth": 1, + "pointSize": 5, "scaleDistribution": { "type": "linear" }, @@ -172,8 +282,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -186,45 +295,39 @@ "overrides": [] }, "gridPos": { - "h": 13, - "w": 23, + "h": 8, + "w": 12, "x": 0, "y": 13 }, - "id": 5, + "id": 2, "options": { "legend": { - "calcs": [ - "last" - ], - "displayMode": "table", + "calcs": [], + "displayMode": "list", "placement": "bottom", "showLegend": false }, "tooltip": { + "hideZeros": false, "mode": "single", "sort": "none" } }, - "pluginVersion": "11.3.0", + "pluginVersion": "12.0.1", "targets": [ { - "datasource": { - "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" - }, - "query": "from(bucket: \"homeassistant\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"friendly_name\"] == \"Heat Pump power\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n |> group(columns: [\"friendly_name\"], mode: \"by\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean\")\r\n", + "query": "from(bucket: \"homeassistant\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"entity_id\"] == \"always_on_living_power\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", "refId": "A" } ], - "title": "Heat Pump Consumption", - "transparent": true, + "title": "Living", "type": "timeseries" }, { "datasource": { "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" + "uid": "cf6lzj1gt48aoe" }, "fieldConfig": { "defaults": { @@ -232,7 +335,7 @@ "mode": "palette-classic" }, "custom": { - "axisBorderShow": true, + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -240,8 +343,8 @@ "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", - "fillOpacity": 18, - "gradientMode": "opacity", + "fillOpacity": 0, + "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, @@ -249,16 +352,13 @@ }, "insertNulls": false, "lineInterpolation": "stepAfter", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 6, + "lineWidth": 1, + "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", - "spanNulls": true, + "spanNulls": false, "stacking": { "group": "A", "mode": "none" @@ -272,8 +372,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -281,161 +380,54 @@ } ] }, - "unit": "bool_on_off" + "unit": "watt" }, "overrides": [] }, "gridPos": { - "h": 13, - "w": 23, + "h": 8, + "w": 12, "x": 0, - "y": 26 + "y": 21 }, "id": 3, "options": { "legend": { - "calcs": [ - "last" - ], - "displayMode": "table", + "calcs": [], + "displayMode": "list", "placement": "bottom", - "showLegend": true + "showLegend": false }, "tooltip": { + "hideZeros": false, "mode": "single", "sort": "none" } }, - "pluginVersion": "11.3.0", + "pluginVersion": "12.0.1", "targets": [ { - "datasource": { - "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" - }, - "query": "from(bucket: \"homeassistant\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"entity_id\"] == \"shellyplusplugs_c82e18083448_switch_0\" or r[\"entity_id\"] == \"shellyplusplugs_fcb4670e63cc_switch_0\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n |> group(columns: [\"entity_id\"], mode: \"by\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean\")", + "query": "from(bucket: \"homeassistant\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"entity_id\"] == \"christmas_lights_switch_0_power\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", "refId": "A" } ], "title": "Christmas Lights", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": true, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 18, - "gradientMode": "opacity", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "stepAfter", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 2, - "pointSize": 6, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bool_on_off" - }, - "overrides": [] - }, - "gridPos": { - "h": 13, - "w": 23, - "x": 0, - "y": 39 - }, - "id": 4, - "options": { - "legend": { - "calcs": [ - "last" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "11.3.0", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "fe6zcxyd0zz0gf" - }, - "query": "from(bucket: \"homeassistant\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"entity_id\"] == \"shelly1_98cdac2de851\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n |> group(columns: [\"friendly_name\"], mode: \"by\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Carport Light", - "transparent": true, "type": "timeseries" } ], "preload": false, - "schemaVersion": 40, + "schemaVersion": 41, "tags": [], "templating": { "list": [] }, "time": { - "from": "now-24h", + "from": "now-6h", "to": "now" }, "timepicker": {}, "timezone": "browser", - "title": "Energy Consumption", - "uid": "fe6zfiev1n3swc", - "version": 21, - "weekStart": "" + "title": "Always On", + "uid": "facf3c5d-3b86-4347-92ba-6d0ccb898955", + "version": 19 } diff --git a/configurations/grafana/dashboards/prices.json b/configurations/grafana/dashboards/prices.json new file mode 100644 index 0000000..80a8d2d --- /dev/null +++ b/configurations/grafana/dashboards/prices.json @@ -0,0 +1,160 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 4, + "links": [], + "panels": [ + { + "datasource": { + "uid": "cf6lzj1gt48aoe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "currencyEUR" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 2, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1", + "targets": [ + { + "query": "import \"date\"\n\nfrom(bucket: \"homeassistant\")\n |> range(start: date.truncate(t: now(), unit: 1mo))\n |> filter(fn: (r) => r[\"entity_id\"] == \"thienpont_serruys_load_grid\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\n |> aggregateWindow(every: 15m, fn: mean, createEmpty: false, offset: 0s)\n |> sum()\n |> map(fn: (r) => ({ r with _value: r._value * 0.00013 }))\n |> yield(name: \"peak_load_15min\")", + "refId": "A" + } + ], + "title": "Variable Energy cost this month", + "type": "stat" + }, + { + "datasource": { + "uid": "cf6lzj1gt48aoe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "currencyEUR" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 3, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1", + "targets": [ + { + "query": "import \"date\"\n\nfrom(bucket: \"homeassistant\")\n |> range(start: date.truncate(t: now(), unit: 1mo))\n |> filter(fn: (r) => r[\"entity_id\"] == \"thienpont_serruys_load_grid\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"W\")\n |> aggregateWindow(every: 15m, fn: mean, createEmpty: false, offset: 0s)\n |> sort(columns: [\"_value\"], desc: true)\n |> limit(n: 1)\n |> map(fn: (r) => ({ r with _value: r._value * 60.0 / 1000.0 / 12.0 }))", + "refId": "A" + } + ], + "title": "Fixed monthly Energy cost, based on this month's peak", + "type": "stat" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Prices", + "uid": "b8f69b2f-886c-4076-979d-b31352d8b531", + "version": 4 +} diff --git a/configurations/grafana/dashboards/temperatures.json b/configurations/grafana/dashboards/temperatures.json new file mode 100644 index 0000000..a5ca993 --- /dev/null +++ b/configurations/grafana/dashboards/temperatures.json @@ -0,0 +1,328 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "cf6lzj1gt48aoe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cf6lzj1gt48aoe" + }, + "query": "from(bucket: \"homeassistant\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"°C\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> filter(fn: (r) => r[\"entity_id\"] == \"climacontrol_living_room_dhw_temperature\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Temperature DHW", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cf6lzj1gt48aoe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 2, + "options": { + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cf6lzj1gt48aoe" + }, + "query": "from(bucket: \"homeassistant\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"°C\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> filter(fn: (r) => r[\"entity_id\"] == \"climacontrol_living_room_outside_temperature\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Temperature Outside", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cf6lzj1gt48aoe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 3, + "options": { + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cf6lzj1gt48aoe" + }, + "query": "from(bucket: \"homeassistant\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"°C\")\n |> filter(fn: (r) => r[\"_field\"] == \"value\")\n |> filter(fn: (r) => r[\"domain\"] == \"sensor\")\n |> filter(fn: (r) => r[\"entity_id\"] == \"climacontrol_living_room_zone_1_room_temperature\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Temperature Inside", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Temperatures", + "uid": "d32d8e73-20ec-42dc-88db-2bac3b929dd6", + "version": 4 +}