fix(pv-system-roi): repair Cumulative Value panel, honest current-power stat, unit + gap fixes #285
@@ -29,8 +29,8 @@
|
||||
},
|
||||
"gridPos": {"h": 4, "w": 4, "x": 4, "y": 0},
|
||||
"id": 2,
|
||||
"options": {"colorMode": "value", "graphMode": "area", "justifyMode": "auto", "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 == \"vitocharge_vx3_vx3_pv_power\") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)", "refId": "A"}],
|
||||
"options": {"colorMode": "value", "graphMode": "none", "justifyMode": "auto", "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 == \"vitocharge_vx3_vx3_pv_power\") |> last()", "refId": "A"}],
|
||||
"title": "Solar Power",
|
||||
"type": "stat"
|
||||
},
|
||||
@@ -50,7 +50,7 @@
|
||||
{
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb"},
|
||||
"fieldConfig": {
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "green", "value": null}]}, "unit": "kwh"},
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "green", "value": null}]}, "unit": "kwatth"},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {"h": 4, "w": 4, "x": 12, "y": 0},
|
||||
@@ -63,7 +63,7 @@
|
||||
{
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb"},
|
||||
"fieldConfig": {
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "purple", "value": null}]}, "unit": "kwh"},
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "purple", "value": null}]}, "unit": "kwatth"},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {"h": 4, "w": 4, "x": 16, "y": 0},
|
||||
@@ -90,7 +90,7 @@
|
||||
{
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb"},
|
||||
"fieldConfig": {
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "orange", "value": null}]}, "unit": "kwh"},
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "orange", "value": null}]}, "unit": "kwatth"},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {"h": 4, "w": 3, "x": 0, "y": 4},
|
||||
@@ -103,7 +103,7 @@
|
||||
{
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb"},
|
||||
"fieldConfig": {
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "green", "value": null}]}, "unit": "kwh"},
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "green", "value": null}]}, "unit": "kwatth"},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {"h": 4, "w": 3, "x": 3, "y": 4},
|
||||
@@ -116,7 +116,7 @@
|
||||
{
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb"},
|
||||
"fieldConfig": {
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "blue", "value": null}]}, "unit": "kwh"},
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "blue", "value": null}]}, "unit": "kwatth"},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {"h": 4, "w": 3, "x": 6, "y": 4},
|
||||
@@ -225,9 +225,9 @@
|
||||
"id": 20,
|
||||
"options": {"legend": {"calcs": ["mean", "max", "lastNotNull"], "displayMode": "table", "placement": "right", "showLegend": true}, "tooltip": {"mode": "multi", "sort": "desc"}},
|
||||
"targets": [
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_solar_power\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_pv_power\") |> map(fn: (r) => ({_time: r._time, _value: r._value}))])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> keep(columns: [\"_time\", \"_value\"]) |> rename(columns: {_value: \"Solar Power\"})", "refId": "A"},
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_battery_power_in_absolute\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_battery_power\") |> map(fn: (r) => ({_time: r._time, _value: if r._value < 0.0 then -r._value else 0.0}))])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> keep(columns: [\"_time\", \"_value\"]) |> rename(columns: {_value: \"Battery Charge\"})", "refId": "B"},
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_battery_power_out_absolute\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_battery_power\") |> map(fn: (r) => ({_time: r._time, _value: if r._value > 0.0 then r._value else 0.0}))])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> keep(columns: [\"_time\", \"_value\"]) |> rename(columns: {_value: \"Battery Discharge\"})", "refId": "C"}
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_solar_power\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_pv_power\") |> map(fn: (r) => ({_time: r._time, _value: r._value}))])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true) |> keep(columns: [\"_time\", \"_value\"]) |> rename(columns: {_value: \"Solar Power\"})", "refId": "A"},
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_battery_power_in_absolute\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_battery_power\") |> map(fn: (r) => ({_time: r._time, _value: if r._value < 0.0 then -r._value else 0.0}))])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true) |> keep(columns: [\"_time\", \"_value\"]) |> rename(columns: {_value: \"Battery Charge\"})", "refId": "B"},
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_battery_power_out_absolute\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_battery_power\") |> map(fn: (r) => ({_time: r._time, _value: if r._value > 0.0 then r._value else 0.0}))])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true) |> keep(columns: [\"_time\", \"_value\"]) |> rename(columns: {_value: \"Battery Discharge\"})", "refId": "C"}
|
||||
],
|
||||
"title": "Solar & Battery Power",
|
||||
"type": "timeseries"
|
||||
@@ -250,7 +250,7 @@
|
||||
"id": 21,
|
||||
"options": {"legend": {"calcs": ["mean", "min", "max"], "displayMode": "table", "placement": "right", "showLegend": true}, "tooltip": {"mode": "multi", "sort": "desc"}},
|
||||
"targets": [
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_power_exchange_with_grid\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_grid_power\") |> map(fn: (r) => ({_time: r._time, _value: r._value}))])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> keep(columns: [\"_time\", \"_value\"]) |> rename(columns: {_value: \"Grid Exchange\"})", "refId": "A"}
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_power_exchange_with_grid\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"W\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_grid_power\") |> map(fn: (r) => ({_time: r._time, _value: r._value}))])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true) |> keep(columns: [\"_time\", \"_value\"]) |> rename(columns: {_value: \"Grid Exchange\"})", "refId": "A"}
|
||||
],
|
||||
"title": "Grid Exchange (+ Import / - Export)",
|
||||
"type": "timeseries"
|
||||
@@ -271,7 +271,7 @@
|
||||
"id": 22,
|
||||
"options": {"legend": {"calcs": ["mean", "min", "max"], "displayMode": "table", "placement": "right", "showLegend": true}, "tooltip": {"mode": "multi", "sort": "desc"}},
|
||||
"targets": [
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"%\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_battery\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"%\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_battery_soc\") |> map(fn: (r) => ({_time: r._time, _value: r._value}))])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> keep(columns: [\"_time\", \"_value\"]) |> rename(columns: {_value: \"Battery Level\"})", "refId": "A"}
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"%\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_battery\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"%\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_battery_soc\") |> map(fn: (r) => ({_time: r._time, _value: r._value}))])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true) |> keep(columns: [\"_time\", \"_value\"]) |> rename(columns: {_value: \"Battery Level\"})", "refId": "A"}
|
||||
],
|
||||
"title": "Battery State of Charge",
|
||||
"type": "timeseries"
|
||||
@@ -292,7 +292,7 @@
|
||||
"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": true, "stacking": {"group": "A", "mode": "none"}, "thresholdsStyle": {"mode": "off"}},
|
||||
"mappings": [],
|
||||
"thresholds": {"mode": "absolute", "steps": [{"color": "green", "value": null}]},
|
||||
"unit": "kwh"
|
||||
"unit": "kwatth"
|
||||
},
|
||||
"overrides": [
|
||||
{"matcher": {"id": "byName", "options": "Solar Production"}, "properties": [{"id": "color", "value": {"fixedColor": "yellow", "mode": "fixed"}}]},
|
||||
@@ -331,9 +331,9 @@
|
||||
"id": 24,
|
||||
"options": {"legend": {"calcs": ["min", "max", "lastNotNull"], "displayMode": "table", "placement": "right", "showLegend": true}, "tooltip": {"mode": "multi", "sort": "desc"}},
|
||||
"targets": [
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "solar = union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"kWh\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_solar_energy_production_total\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"Wh\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_pv_production_total\") |> map(fn: (r) => ({_time: r._time, _value: r._value / 1000.0}))])\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> set(key: \"src\", value: \"solar\")\nexport_kwh = union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"Wh\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_energy_export_to_grid\") |> map(fn: (r) => ({_time: r._time, _value: r._value / 1000.0})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"kWh\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_grid_feed_in_energy\") |> map(fn: (r) => ({_time: r._time, _value: r._value}))])\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> set(key: \"src\", value: \"export\")\nprice = from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"EUR/kWh\" and r._field == \"value\" and r.entity_id == \"strompreis\") |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> keep(columns: [\"_time\", \"_value\"]) |> set(key: \"src\", value: \"price\")\nunion(tables: [solar, export_kwh, price]) |> pivot(rowKey: [\"_time\"], columnKey: [\"src\"], valueColumn: \"_value\") |> filter(fn: (r) => exists r.solar and exists r.export and exists r.price) |> map(fn: (r) => ({_time: r._time, _value: (r.solar - r.export) * r.price})) |> rename(columns: {_value: \"Self-Use Savings\"})", "refId": "A"},
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "solar = union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"kWh\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_solar_energy_production_total\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"Wh\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_pv_production_total\") |> map(fn: (r) => ({_time: r._time, _value: r._value / 1000.0}))])\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> set(key: \"src\", value: \"solar\")\nexport_kwh = union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"Wh\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_energy_export_to_grid\") |> map(fn: (r) => ({_time: r._time, _value: r._value / 1000.0})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"kWh\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_grid_feed_in_energy\") |> map(fn: (r) => ({_time: r._time, _value: r._value}))])\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> set(key: \"src\", value: \"export\")\nprice = from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"EUR/kWh\" and r._field == \"value\" and r.entity_id == \"strompreis\") |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> keep(columns: [\"_time\", \"_value\"]) |> set(key: \"src\", value: \"price\")\nunion(tables: [solar, export_kwh, price]) |> group() |> pivot(rowKey: [\"_time\"], columnKey: [\"src\"], valueColumn: \"_value\") |> sort(columns: [\"_time\"]) |> fill(column: \"price\", usePrevious: true) |> fill(column: \"solar\", usePrevious: true) |> fill(column: \"export\", usePrevious: true) |> filter(fn: (r) => exists r.solar and exists r.export and exists r.price) |> map(fn: (r) => ({_time: r._time, _value: (r.solar - r.export) * r.price})) |> rename(columns: {_value: \"Self-Use Savings\"})", "refId": "A"},
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"Wh\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_energy_export_to_grid\") |> map(fn: (r) => ({_time: r._time, _value: r._value / 1000.0})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"kWh\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_grid_feed_in_energy\") |> map(fn: (r) => ({_time: r._time, _value: r._value}))])\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> map(fn: (r) => ({_time: r._time, _value: r._value * ${feed_in_tariff}})) |> rename(columns: {_value: \"Feed-in Revenue\"})", "refId": "B"},
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "solar = union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"kWh\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_solar_energy_production_total\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"Wh\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_pv_production_total\") |> map(fn: (r) => ({_time: r._time, _value: r._value / 1000.0}))])\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> set(key: \"src\", value: \"solar\")\nexport_kwh = union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"Wh\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_energy_export_to_grid\") |> map(fn: (r) => ({_time: r._time, _value: r._value / 1000.0})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"kWh\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_grid_feed_in_energy\") |> map(fn: (r) => ({_time: r._time, _value: r._value}))])\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> set(key: \"src\", value: \"export\")\nprice = from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"EUR/kWh\" and r._field == \"value\" and r.entity_id == \"strompreis\") |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> keep(columns: [\"_time\", \"_value\"]) |> set(key: \"src\", value: \"price\")\nunion(tables: [solar, export_kwh, price]) |> pivot(rowKey: [\"_time\"], columnKey: [\"src\"], valueColumn: \"_value\") |> filter(fn: (r) => exists r.solar and exists r.export and exists r.price) |> map(fn: (r) => ({_time: r._time, _value: (r.solar - r.export) * r.price + r.export * ${feed_in_tariff}})) |> rename(columns: {_value: \"Total Value\"})", "refId": "C"}
|
||||
{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "solar = union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"kWh\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_solar_energy_production_total\") |> map(fn: (r) => ({_time: r._time, _value: r._value})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"Wh\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_pv_production_total\") |> map(fn: (r) => ({_time: r._time, _value: r._value / 1000.0}))])\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> set(key: \"src\", value: \"solar\")\nexport_kwh = union(tables: [\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"Wh\" and r._field == \"value\" and r.entity_id == \"e3_vitocharge_03_energy_export_to_grid\") |> map(fn: (r) => ({_time: r._time, _value: r._value / 1000.0})),\n from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"kWh\" and r._field == \"value\" and r.entity_id == \"vitocharge_vx3_vx3_grid_feed_in_energy\") |> map(fn: (r) => ({_time: r._time, _value: r._value}))])\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> set(key: \"src\", value: \"export\")\nprice = from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"EUR/kWh\" and r._field == \"value\" and r.entity_id == \"strompreis\") |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> keep(columns: [\"_time\", \"_value\"]) |> set(key: \"src\", value: \"price\")\nunion(tables: [solar, export_kwh, price]) |> group() |> pivot(rowKey: [\"_time\"], columnKey: [\"src\"], valueColumn: \"_value\") |> sort(columns: [\"_time\"]) |> fill(column: \"price\", usePrevious: true) |> fill(column: \"solar\", usePrevious: true) |> fill(column: \"export\", usePrevious: true) |> filter(fn: (r) => exists r.solar and exists r.export and exists r.price) |> map(fn: (r) => ({_time: r._time, _value: (r.solar - r.export) * r.price + r.export * ${feed_in_tariff}})) |> rename(columns: {_value: \"Total Value\"})", "refId": "C"}
|
||||
],
|
||||
"title": "Cumulative Value",
|
||||
"type": "timeseries"
|
||||
@@ -368,14 +368,15 @@
|
||||
"gridPos": {"h": 4, "w": 6, "x": 6, "y": 35},
|
||||
"id": 26,
|
||||
"options": {"colorMode": "value", "graphMode": "none", "justifyMode": "auto", "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 == \"kWp\" and r._field == \"value\" and r.domain == \"input_number\" and r.entity_id == \"e3_vitocharge_03_solar_power_installed\") |> last()", "refId": "A"}],
|
||||
"targets": [{"datasource": {"type": "influxdb", "uid": "influxdb"}, "query": "from(bucket: \"suedstr28\") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == \"kWp\" and r._field == \"value\" and r.domain == \"input_number\" and r.entity_id == \"e3_vitocharge_03_solar_power_installed\") |> last() |> map(fn: (r) => ({r with _value: r._value / 1000.0}))", "refId": "A"}],
|
||||
"title": "Solar Installed",
|
||||
"description": "Installed PV peak power. The HA input_number stores 8140 (Wp) despite its kWp unit label, so the value is divided by 1000 here.",
|
||||
"type": "stat"
|
||||
},
|
||||
{
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb"},
|
||||
"fieldConfig": {
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "blue", "value": null}]}, "unit": "kwh"},
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "blue", "value": null}]}, "unit": "kwatth"},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {"h": 4, "w": 6, "x": 12, "y": 35},
|
||||
@@ -388,7 +389,7 @@
|
||||
{
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb"},
|
||||
"fieldConfig": {
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "purple", "value": null}]}, "unit": "kwh"},
|
||||
"defaults": {"color": {"mode": "thresholds"}, "mappings": [], "thresholds": {"mode": "absolute", "steps": [{"color": "purple", "value": null}]}, "unit": "kwatth"},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {"h": 4, "w": 6, "x": 18, "y": 35},
|
||||
|
||||
Reference in New Issue
Block a user