Files
dashboardAPI/config/pumpingStation.json

582 lines
25 KiB
JSON
Raw Normal View History

2026-01-13 14:29:43 +01:00
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "grafana",
"uid": "-- Grafana --"
},
2026-01-13 14:29:43 +01:00
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"graphTooltip": 0,
"id": null,
"links": [],
"panels": [
{
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 },
"id": 1,
"title": "Status",
"type": "row"
},
{
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"datasource": { "type": "influxdb", "uid": "cdzg44tv250jkd" },
"fieldConfig": {
"defaults": {
"thresholds": {
"mode": "absolute",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"steps": [{ "color": "blue", "value": null }]
}
},
"overrides": []
},
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"gridPos": { "h": 4, "w": 6, "x": 0, "y": 1 },
2026-01-13 14:29:43 +01:00
"id": 2,
"options": {
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"reduceOptions": { "calcs": ["lastNotNull"], "fields": "/.*/" },
"colorMode": "value",
"graphMode": "none"
},
2026-01-13 14:29:43 +01:00
"targets": [
{
"query": "from(bucket: \"${bucket}\")\n |> range(start: -7d)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"direction\")\n |> group(columns:[\"_field\"])\n |> last()\n |> keep(columns:[\"_value\"])",
"refId": "A"
}
2026-01-13 14:29:43 +01:00
],
2026-03-11 11:13:44 +01:00
"title": "Direction",
"type": "stat",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"meta": { "emittedFields": ["direction"] }
2026-01-13 14:29:43 +01:00
},
{
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"datasource": { "type": "influxdb", "uid": "cdzg44tv250jkd" },
"fieldConfig": {
"defaults": {
"unit": "s",
"thresholds": {
"mode": "absolute",
"steps": [
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
{ "color": "green", "value": null },
{ "color": "orange", "value": 300 },
{ "color": "red", "value": 600 }
]
}
},
"overrides": []
},
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"gridPos": { "h": 4, "w": 6, "x": 6, "y": 1 },
2026-01-13 14:29:43 +01:00
"id": 3,
"options": {
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"reduceOptions": { "calcs": ["lastNotNull"] },
"colorMode": "value",
"graphMode": "area"
},
2026-01-13 14:29:43 +01:00
"targets": [
{
"query": "from(bucket: \"${bucket}\")\n |> range(start: -7d)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"timeleft\")\n |> group(columns:[\"_field\"])\n |> last()",
"refId": "A"
}
2026-01-13 14:29:43 +01:00
],
2026-03-11 11:13:44 +01:00
"title": "Time Left",
"type": "stat",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"meta": { "emittedFields": ["timeLeft"] }
2026-03-11 11:13:44 +01:00
},
{
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"datasource": { "type": "influxdb", "uid": "cdzg44tv250jkd" },
"fieldConfig": {
"defaults": {
"thresholds": {
"mode": "absolute",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"steps": [{ "color": "purple", "value": null }]
}
},
"overrides": []
},
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"gridPos": { "h": 4, "w": 6, "x": 12, "y": 1 },
2026-03-11 11:13:44 +01:00
"id": 4,
"options": {
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"reduceOptions": { "calcs": ["lastNotNull"], "fields": "/.*/" },
"colorMode": "value",
"graphMode": "none"
},
2026-03-11 11:13:44 +01:00
"targets": [
{
"query": "from(bucket: \"${bucket}\")\n |> range(start: -7d)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"flowSource\")\n |> group(columns:[\"_field\"])\n |> last()\n |> keep(columns:[\"_value\"])",
"refId": "A"
}
2026-03-11 11:13:44 +01:00
],
"title": "Flow Source",
"type": "stat",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"meta": { "emittedFields": ["flowSource"] }
2026-03-11 11:13:44 +01:00
},
{
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"datasource": { "type": "influxdb", "uid": "cdzg44tv250jkd" },
"fieldConfig": {
"defaults": {
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"unit": "lengthm",
"thresholds": {
"mode": "absolute",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"steps": [{ "color": "green", "value": null }]
}
},
"overrides": []
},
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"gridPos": { "h": 4, "w": 6, "x": 18, "y": 1 },
"id": 6,
"options": {
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"reduceOptions": { "calcs": ["lastNotNull"] },
"colorMode": "value",
"graphMode": "area"
},
2026-03-11 11:13:44 +01:00
"targets": [
{
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"query": "from(bucket: \"${bucket}\")\n |> range(start: -7d)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field =~ /^level\\.predicted\\.atequipment/)\n |> group(columns:[\"_field\"])\n |> last()\n |> keep(columns:[\"_value\"])",
"refId": "A"
}
2026-03-11 11:13:44 +01:00
],
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"title": "Level",
"type": "stat",
"meta": { "emittedFields": ["level"] }
2026-03-11 11:13:44 +01:00
},
{
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 5 },
"id": 13,
"title": "Basin",
"type": "row"
},
{
"datasource": { "type": "influxdb", "uid": "cdzg44tv250jkd" },
"fieldConfig": {
"defaults": {
"unit": "lengthm",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"min": 0,
"max": {{heightBasin}},
"thresholds": {
"mode": "absolute",
"steps": [
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
{ "color": "#3a3a3a", "value": null },
{ "color": "semi-dark-grey", "value": {{outflowLevel}} },
{ "color": "blue", "value": {{dryRunLevel}} },
{ "color": "green", "value": {{inflowLevel}} },
{ "color": "orange", "value": {{highSafetyLevel}} },
{ "color": "red", "value": {{overflowLevel}} }
]
}
},
"overrides": []
},
"gridPos": { "h": 20, "w": 4, "x": 0, "y": 6 },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"id": 16,
"options": {
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"displayMode": "basic",
"orientation": "vertical",
"reduceOptions": { "calcs": ["lastNotNull"], "fields": "" },
"showThresholdLabels": true,
"showThresholdMarkers": true,
"showUnfilled": true,
"minVizWidth": 8,
"minVizHeight": 16,
"valueMode": "color",
"namePlacement": "auto"
},
2026-03-11 11:13:44 +01:00
"targets": [
{
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"query": "from(bucket: \"${bucket}\")\n |> range(start: -7d)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field =~ /^level\\.predicted\\.atequipment/)\n |> group(columns:[\"_field\"])\n |> last()\n |> keep(columns:[\"_value\"])",
"refId": "A"
}
2026-03-11 11:13:44 +01:00
],
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"title": "Water Level",
"type": "bargauge",
"meta": { "emittedFields": ["basinLevel"] }
2026-03-11 11:13:44 +01:00
},
{
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"datasource": { "type": "influxdb", "uid": "cdzg44tv250jkd" },
"fieldConfig": {
"defaults": {
"unit": "none",
"decimals": 2
},
"overrides": [
{
"matcher": { "id": "byRegexp", "options": "^(outflowLevel|inflowLevel|overflowLevel|heightBasin|dryRunLevel|highVolumeSafetyLevel|level)$" },
"properties": [{ "id": "unit", "value": "lengthm" }, { "id": "decimals", "value": 2 }]
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
},
{
"matcher": { "id": "byRegexp", "options": "^(volume|maxVol|minVol|maxVolAtOverflow|minVolAtOutflow|minVolAtInflow)$" },
"properties": [{ "id": "unit", "value": "m3" }, { "id": "decimals", "value": 2 }]
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
},
{
"matcher": { "id": "byRegexp", "options": "^volumePercent$" },
"properties": [{ "id": "unit", "value": "percent" }, { "id": "decimals", "value": 1 }]
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
}
]
},
"gridPos": { "h": 20, "w": 6, "x": 4, "y": 6 },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"id": 17,
"options": {
"inlineEditing": false,
"showAdvancedTypes": true,
"panZoom": false,
"infinitePan": false,
"root": {
"name": "Basin",
"type": "frame",
"placement": { "left": 0, "top": 0, "right": 0, "bottom": 0 },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "dark-green" } },
"elements": [
{
"name": "Zone Spill",
"type": "rectangle",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": 5.26, "left": 2.5, "right": 2.5, "bottom": {{zb_spill}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "rgba(229, 67, 67, 0.18)" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "fixed", "fixed": "" } }
},
{
"name": "Zone HighSafety",
"type": "rectangle",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{y_overflow}}, "left": 2.5, "right": 2.5, "bottom": {{zb_highSafety}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "rgba(242, 165, 67, 0.16)" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "fixed", "fixed": "" } }
},
{
"name": "Zone Operating",
"type": "rectangle",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{y_highSafety}}, "left": 2.5, "right": 2.5, "bottom": {{zb_operating}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "rgba(95, 179, 122, 0.14)" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "fixed", "fixed": "" } }
},
{
"name": "Zone Dead",
"type": "rectangle",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{y_outflow}}, "left": 2.5, "right": 2.5, "bottom": {{zb_dead}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "rgba(128, 128, 128, 0.20)" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "fixed", "fixed": "" } }
},
{
"name": "Tank Outline",
"type": "rectangle",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": 5.26, "left": 2.5, "right": 2.5, "bottom": 5.27 },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "#8a8a8a" }, "width": 2 },
"config": { "text": { "mode": "fixed", "fixed": "" } }
},
{
"name": "Line Overflow",
"type": "rectangle",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{y_overflow}}, "left": 2.5, "right": 2.5, "bottom": {{yb_overflow}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "#e54343" } },
"border": { "color": { "fixed": "#e54343" }, "width": 0 }
},
{
"name": "Line HighSafety",
"type": "rectangle",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{y_highSafety}}, "left": 2.5, "right": 2.5, "bottom": {{yb_highSafety}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "#f2a543" } },
"border": { "color": { "fixed": "#f2a543" }, "width": 0 }
},
{
"name": "Line Inflow",
"type": "rectangle",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{y_inflow}}, "left": 2.5, "right": 2.5, "bottom": {{yb_inflow}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "#5fb37a" } },
"border": { "color": { "fixed": "#5fb37a" }, "width": 0 }
},
{
"name": "Line DryRun",
"type": "rectangle",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{y_dryRun}}, "left": 2.5, "right": 2.5, "bottom": {{yb_dryRun}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "#5b9bd5" } },
"border": { "color": { "fixed": "#5b9bd5" }, "width": 0 }
},
{
"name": "Line Outflow",
"type": "rectangle",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{y_outflow}}, "left": 2.5, "right": 2.5, "bottom": {{yb_outflow}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "#bfbfbf" } },
"border": { "color": { "fixed": "#bfbfbf" }, "width": 0 }
},
{
"name": "Label Overflow Name",
"type": "text",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{ty_overflow}}, "left": 15, "right": 53, "bottom": {{tyb_overflow}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "fixed", "fixed": "overflowLevel" }, "color": { "fixed": "#c92020" }, "size": 14, "align": "right", "valign": "middle" }
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
},
{
"name": "Label HighSafety Name",
"type": "text",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{ty_highSafety}}, "left": 15, "right": 53, "bottom": {{tyb_highSafety}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "fixed", "fixed": "highSafety" }, "color": { "fixed": "#cf7e20" }, "size": 14, "align": "right", "valign": "middle" }
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
},
{
"name": "Label Inflow Name",
"type": "text",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{ty_inflow}}, "left": 15, "right": 53, "bottom": {{tyb_inflow}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "fixed", "fixed": "inflowLevel" }, "color": { "fixed": "#3d8a5a" }, "size": 14, "align": "right", "valign": "middle" }
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
},
{
"name": "Label DryRun Name",
"type": "text",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{ty_dryRun}}, "left": 15, "right": 53, "bottom": {{tyb_dryRun}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "fixed", "fixed": "dryRunLevel" }, "color": { "fixed": "#3a76a8" }, "size": 14, "align": "right", "valign": "middle" }
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
},
{
"name": "Label Outflow Name",
"type": "text",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{ty_outflow}}, "left": 15, "right": 53, "bottom": {{tyb_outflow}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "fixed", "fixed": "outflowLevel" }, "color": { "fixed": "#6a6a6a" }, "size": 14, "align": "right", "valign": "middle" }
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
},
{
"name": "Value Overflow",
"type": "metric-value",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{ty_overflow}}, "left": 53, "right": 12, "bottom": {{tyb_overflow}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "field", "fixed": "", "field": "overflowLevel" }, "color": { "fixed": "#c92020" }, "size": 14, "align": "left", "valign": "middle" }
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
},
{
"name": "Value HighSafety",
"type": "metric-value",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{ty_highSafety}}, "left": 53, "right": 12, "bottom": {{tyb_highSafety}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "field", "fixed": "", "field": "highVolumeSafetyLevel" }, "color": { "fixed": "#cf7e20" }, "size": 14, "align": "left", "valign": "middle" }
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
},
{
"name": "Value Inflow",
"type": "metric-value",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{ty_inflow}}, "left": 53, "right": 12, "bottom": {{tyb_inflow}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "field", "fixed": "", "field": "inflowLevel" }, "color": { "fixed": "#3d8a5a" }, "size": 14, "align": "left", "valign": "middle" }
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
},
{
"name": "Value DryRun",
"type": "metric-value",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{ty_dryRun}}, "left": 53, "right": 12, "bottom": {{tyb_dryRun}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "field", "fixed": "", "field": "dryRunLevel" }, "color": { "fixed": "#3a76a8" }, "size": 14, "align": "left", "valign": "middle" }
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
},
{
"name": "Value Outflow",
"type": "metric-value",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": {{ty_outflow}}, "left": 53, "right": 12, "bottom": {{tyb_outflow}} },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "field", "fixed": "", "field": "outflowLevel" }, "color": { "fixed": "#6a6a6a" }, "size": 14, "align": "left", "valign": "middle" }
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
},
{
"name": "Header Rim",
"type": "text",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": 2.63, "left": 2.5, "right": 2.5, "bottom": 95.26 },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "fixed", "fixed": "rim ({{heightBasin}} m)" }, "color": { "fixed": "#8a8a8a" }, "size": 10, "align": "center", "valign": "middle" }
},
{
"name": "Footer Floor",
"type": "text",
"constraint": { "horizontal": "scale", "vertical": "scale" },
"placement": { "top": 95.26, "left": 2.5, "right": 2.5, "bottom": 2.63 },
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"background": { "color": { "fixed": "transparent" } },
"border": { "color": { "fixed": "transparent" }, "width": 0 },
"config": { "text": { "mode": "fixed", "fixed": "floor (0.00 m)" }, "color": { "fixed": "#8a8a8a" }, "size": 10, "align": "center", "valign": "middle" }
}
]
}
},
"targets": [
{
"query": "from(bucket: \"${bucket}\")\n |> range(start: -7d)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and (r._field==\"outflowLevel\" or r._field==\"inflowLevel\" or r._field==\"overflowLevel\" or r._field==\"heightBasin\" or r._field==\"dryRunLevel\" or r._field==\"highVolumeSafetyLevel\" or r._field =~ /^level\\.predicted\\.atequipment/ or r._field =~ /^volume\\.predicted\\.atequipment/ or r._field =~ /^volumePercent\\.predicted\\.atequipment/))\n |> last()\n |> map(fn: (r) => ({ r with _field: if r._field =~ /^volumePercent\\.predicted/ then \"volumePercent\" else if r._field =~ /^volume\\.predicted/ then \"volume\" else if r._field =~ /^level\\.predicted/ then \"level\" else r._field, _time: 2020-01-01T00:00:00Z }))\n |> group()\n |> keep(columns:[\"_field\",\"_value\",\"_time\"])\n |> pivot(rowKey:[\"_time\"], columnKey:[\"_field\"], valueColumn:\"_value\")",
"refId": "A"
}
],
"title": "Tank Layout",
"type": "canvas",
"meta": { "emittedFields": ["basinLayout"] }
},
{
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"datasource": { "type": "influxdb", "uid": "cdzg44tv250jkd" },
"fieldConfig": {
"defaults": {
"unit": "lengthm",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"custom": { "drawStyle": "line", "lineWidth": 2, "fillOpacity": 10 }
},
"overrides": []
},
"gridPos": { "h": 10, "w": 14, "x": 10, "y": 6 },
2026-03-11 11:13:44 +01:00
"id": 8,
"options": {
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"legend": { "displayMode": "list", "placement": "bottom" },
"tooltip": { "mode": "multi" }
},
2026-03-11 11:13:44 +01:00
"targets": [
{
"query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field =~ /^level\\.(predicted|measured)\\.atequipment/)\n |> group(columns:[\"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)",
"refId": "A"
}
2026-03-11 11:13:44 +01:00
],
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"title": "Level (over time)",
"type": "timeseries",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"meta": { "emittedFields": ["level"] }
2026-03-11 11:13:44 +01:00
},
{
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"datasource": { "type": "influxdb", "uid": "cdzg44tv250jkd" },
"fieldConfig": {
"defaults": {
"unit": "m3",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"custom": { "drawStyle": "line", "lineWidth": 2, "fillOpacity": 10 }
},
"overrides": []
},
"gridPos": { "h": 10, "w": 14, "x": 10, "y": 16 },
2026-03-11 11:13:44 +01:00
"id": 9,
"options": {
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"legend": { "displayMode": "list", "placement": "bottom" },
"tooltip": { "mode": "multi" }
},
2026-03-11 11:13:44 +01:00
"targets": [
{
"query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field =~ /^volume\\.predicted\\.atequipment/)\n |> group(columns:[\"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)",
"refId": "A"
}
2026-03-11 11:13:44 +01:00
],
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"title": "Volume (over time)",
"type": "timeseries",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"meta": { "emittedFields": ["volume"] }
},
{
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 26 },
"id": 10,
"title": "Flow",
"type": "row"
2026-03-11 11:13:44 +01:00
},
{
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"datasource": { "type": "influxdb", "uid": "cdzg44tv250jkd" },
"fieldConfig": {
"defaults": {
"unit": "m3/h",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"custom": { "drawStyle": "line", "lineWidth": 2, "fillOpacity": 10 }
},
"overrides": []
},
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 27 },
2026-03-11 11:13:44 +01:00
"id": 11,
"options": {
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"legend": { "displayMode": "list", "placement": "bottom" },
"tooltip": { "mode": "multi" }
},
2026-03-11 11:13:44 +01:00
"targets": [
{
"query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field =~ /^netFlowRate\\.(predicted|measured)\\.atequipment/)\n |> group(columns:[\"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)",
"refId": "A"
}
2026-03-11 11:13:44 +01:00
],
"title": "Net Flow Rate",
"type": "timeseries",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"meta": { "emittedFields": ["flow.net", "flow"] }
2026-03-11 11:13:44 +01:00
},
{
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"datasource": { "type": "influxdb", "uid": "cdzg44tv250jkd" },
"fieldConfig": {
"defaults": {
"unit": "m3/h",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"custom": { "drawStyle": "line", "lineWidth": 2, "fillOpacity": 10 }
},
"overrides": []
},
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 27 },
2026-03-11 11:13:44 +01:00
"id": 12,
"options": {
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"legend": { "displayMode": "list", "placement": "bottom" },
"tooltip": { "mode": "multi" }
},
2026-03-11 11:13:44 +01:00
"targets": [
{
"query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field =~ /^flow\\.(predicted|measured)\\.(upstream|in|out|overflow)/)\n |> group(columns:[\"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)",
"refId": "A"
}
2026-03-11 11:13:44 +01:00
],
"title": "Inflow + Outflow",
"type": "timeseries",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"meta": { "emittedFields": ["flow.in", "flow.out"] }
2026-01-13 14:29:43 +01:00
}
],
"schemaVersion": 39,
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"tags": ["EVOLV", "pumpingStation", "template"],
2026-01-13 14:29:43 +01:00
"templating": {
"list": [
{
"name": "dbase",
"type": "custom",
"label": "dbase",
"query": "cdzg44tv250jkd",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"current": { "text": "cdzg44tv250jkd", "value": "cdzg44tv250jkd", "selected": false },
"options": [{ "text": "cdzg44tv250jkd", "value": "cdzg44tv250jkd", "selected": true }],
"hide": 2
},
{
"name": "measurement",
"type": "custom",
"query": "template",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"current": { "text": "template", "value": "template", "selected": false },
"options": [{ "text": "template", "value": "template", "selected": true }]
},
{
"name": "bucket",
"type": "custom",
"query": "lvl2",
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"current": { "text": "lvl2", "value": "lvl2", "selected": false },
"options": [{ "text": "lvl2", "value": "lvl2", "selected": true }]
}
2026-01-13 14:29:43 +01:00
]
},
feat(dashboardAPI): basin canvas + bar gauge for pumpingStation Replaces the configuration row's Heights + Volume Limits stat panels and the radial Fill % gauge with an integrated basin visual that conveys tank geometry and live water level at a glance. Configuration row → Basin row: - Vertical bar gauge bound to level (m) with min=0/max=basinHeight and thresholds at outflow/dryRun/inflow/highSafety/overflow safety levels. - Canvas panel with tank outline, zone tints (dead/operating/highSafety/ spill), threshold lines + named labels, and live numeric readouts for each threshold value plus current level/volume/fill at the bottom. - Level + Volume timeseries moved next to the basin visual so the row reads as basin → trends left-to-right. Other layout polish: - Status row Fill % gauge removed; remaining 4 stats widen to w:6 each. - Old "Basin" row header dropped (its panels migrated into the new row). - Configuration row renamed to "Basin". Mechanics: - dashboardAPI substitutes mustache {{var}} placeholders in templates at JSON.parse time. Per-softwareType var sets live in _templateVarsForNode; pumpingStation gets basin geometry + derived safety levels + canvas pixel y-positions + min-gap-enforced label positions. - Mustache braces stay distinct from Grafana's ${var} dashboard variables. - Canvas Flux query pivots heights + predicted level/volume/percent into one row with normalized field names so metric-value elements can bind. No node-side telemetry change: dryRunLevel + highVolumeSafetyLevel already reach Influx via getOutput() (specificClass.js:248,250) and outputUtils iterates every key with no filter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:32:52 +02:00
"time": { "from": "now-6h", "to": "now" },
2026-01-13 14:29:43 +01:00
"timezone": "",
"title": "template",
"uid": null,
"version": 1
}