diff --git a/config/aeration.json b/config/aeration.json
new file mode 100644
index 0000000..9e4f165
--- /dev/null
+++ b/config/aeration.json
@@ -0,0 +1,3242 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "id": 5,
+ "links": [],
+ "panels": [
+ {
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 2,
+ "title": "Hydraulics",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "max": 5000,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": [
+ {
+ "__systemRef": "hideSeriesFrom",
+ "matcher": {
+ "id": "byNames",
+ "options": {
+ "mode": "exclude",
+ "names": [
+ "q {group=\"recirculation\", name=\"recircN1\"}",
+ "q {group=\"recirculation\", name=\"reciruclation\"}",
+ "q {group=\"influent\", name=\"influent\"}"
+ ],
+ "prefix": "All except:",
+ "readOnly": true
+ }
+ },
+ "properties": [
+ {
+ "id": "custom.hideFrom",
+ "value": {
+ "legend": false,
+ "tooltip": false,
+ "viz": true
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 10,
+ "w": 24,
+ "x": 0,
+ "y": 1
+ },
+ "id": 1,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"influent\" and r._field == \"q\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n |> yield(name: \"_results\")",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reciruclation\" and r._field == \"q\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n |> yield(name: \"_results\")",
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"recircN1\" and r._field == \"q\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n |> yield(name: \"_results\")",
+ "refId": "C"
+ }
+ ],
+ "title": "Influent | recirculation internally and externally",
+ "transformations": [
+ {
+ "id": "calculateField",
+ "options": {
+ "cumulative": {
+ "field": "q {group=\"influent\", name=\"influent\"}",
+ "reducer": "sum"
+ },
+ "mode": "reduceRow",
+ "reduce": {
+ "include": [
+ "q {group=\"influent\", name=\"influent\"}",
+ "q {group=\"recirculation\", name=\"reciruclation\"}",
+ "q {group=\"recirculation\", name=\"recircN1\"}"
+ ],
+ "reducer": "sum"
+ }
+ }
+ }
+ ],
+ "transparent": true,
+ "type": "timeseries"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 11
+ },
+ "id": 46,
+ "panels": [],
+ "title": "Compartiment 1",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "max": 25,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#6ED0E0",
+ "value": 2.5
+ },
+ {
+ "color": "#EAB839",
+ "value": 5
+ },
+ {
+ "color": "red",
+ "value": 15
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 0,
+ "y": 12
+ },
+ "id": 4,
+ "options": {
+ "displayMode": "lcd",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor1\" and r._field == \"reactor1.S10.NH4+|NH3\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "End compartiment NH4+|NH3",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-blues"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "max": 2400,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 3,
+ "y": 12
+ },
+ "id": 12,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone1\" and r._field == \"iFlow\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Input airflow in diffusers",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-blues"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "max": 2400,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 6,
+ "y": 12
+ },
+ "id": 16,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone1\" and r._field == \"oFlowElement\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Flow per element",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-blues"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "max": 2400,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 9,
+ "y": 12
+ },
+ "id": 20,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone1\" and r._field == \"oPLoss\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Diffuser DeltaP",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-RdYlGr"
+ },
+ "decimals": 1,
+ "mappings": [],
+ "max": 30,
+ "min": 20,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 12,
+ "y": 12
+ },
+ "id": 24,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone1\" and r._field == \"oOtr\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Oxygen Transfer Rate",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 1,
+ "mappings": [],
+ "max": 4,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "blue",
+ "value": null
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 4,
+ "x": 15,
+ "y": 12
+ },
+ "id": 28,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor1\" and r._field == \"reactor1.S7.O2\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Dissolved Oxygen",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 100,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "semi-dark-yellow",
+ "value": 50
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "%/min"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 2,
+ "x": 19,
+ "y": 12
+ },
+ "id": 32,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor1\" and r._field == \"dFactor\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Mixer speed",
+ "transparent": true,
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 100,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "semi-dark-yellow",
+ "value": 3000
+ },
+ {
+ "color": "red",
+ "value": 4000
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 21,
+ "y": 12
+ },
+ "id": 36,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor1\" and r._field == \"sludge\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "MLSS",
+ "transparent": true,
+ "type": "stat"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 16
+ },
+ "id": 47,
+ "panels": [],
+ "title": "Compartiment 2",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "max": 25,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#6ED0E0",
+ "value": 2.5
+ },
+ {
+ "color": "#EAB839",
+ "value": 5
+ },
+ {
+ "color": "red",
+ "value": 15
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 0,
+ "y": 17
+ },
+ "id": 9,
+ "options": {
+ "displayMode": "lcd",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor2\" and r._field == \"reactor2.S10.NH4+|NH3\" )\r\n |> last()",
+ "refId": "B"
+ }
+ ],
+ "title": "End compartiment NH4+|NH3",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "max": 2400,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 3,
+ "y": 17
+ },
+ "id": 13,
+ "options": {
+ "displayMode": "basic",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone2\" and r._field == \"iFlow\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Input airflow in diffusers",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-GrYlRd"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "max": 8,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 6,
+ "y": 17
+ },
+ "id": 17,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone2\" and r._field == \"oFlowElement\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Flow per element",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 600,
+ "min": 500,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "green",
+ "value": 520
+ },
+ {
+ "color": "#EAB839",
+ "value": 550
+ },
+ {
+ "color": "red",
+ "value": 600
+ }
+ ]
+ },
+ "unit": "pressurembar"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 9,
+ "y": 17
+ },
+ "id": 21,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone2\" and r._field == \"oPLoss\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Diffuser DeltaP",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-RdYlGr"
+ },
+ "decimals": 1,
+ "mappings": [],
+ "max": 30,
+ "min": 20,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "g/Nm3h/m"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 12,
+ "y": 17
+ },
+ "id": 25,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone2\" and r._field == \"oOtr\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Oxygen Transfer Rate",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 1,
+ "mappings": [],
+ "max": 4,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "blue",
+ "value": null
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 4,
+ "x": 15,
+ "y": 17
+ },
+ "id": 29,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor2\" and r._field == \"reactor2.S7.O2\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Dissolved Oxygen",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 100,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "semi-dark-yellow",
+ "value": 50
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "%/min"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 2,
+ "x": 19,
+ "y": 17
+ },
+ "id": 33,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor2\" and r._field == \"dFactor\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Mixer speed",
+ "transparent": true,
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "semi-dark-yellow",
+ "value": 3000
+ },
+ {
+ "color": "red",
+ "value": 4000
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 21,
+ "y": 17
+ },
+ "id": 37,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor2\" and r._field == \"sludge\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "MLSS",
+ "transparent": true,
+ "type": "stat"
+ },
+ {
+ "collapsed": true,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 21
+ },
+ "id": 48,
+ "panels": [],
+ "title": "Compartiment 3",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "max": 25,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#6ED0E0",
+ "value": 2.5
+ },
+ {
+ "color": "#EAB839",
+ "value": 5
+ },
+ {
+ "color": "red",
+ "value": 15
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 0,
+ "y": 22
+ },
+ "id": 10,
+ "options": {
+ "displayMode": "lcd",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor3\" and r._field == \"reactor3.S10.NH4+|NH3\" )\r\n |> last()",
+ "refId": "C"
+ }
+ ],
+ "title": "End compartiment NH4+|NH3",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "max": 1920,
+ "min": 200,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 3,
+ "y": 22
+ },
+ "id": 14,
+ "options": {
+ "displayMode": "basic",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone3\" and r._field == \"iFlow\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Input airflow in diffusers",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-GrYlRd"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "max": 8,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 6,
+ "y": 22
+ },
+ "id": 18,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone3\" and r._field == \"oFlowElement\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Flow per element",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 600,
+ "min": 500,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "green",
+ "value": 520
+ },
+ {
+ "color": "#EAB839",
+ "value": 550
+ },
+ {
+ "color": "red",
+ "value": 600
+ }
+ ]
+ },
+ "unit": "pressurembar"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 9,
+ "y": 22
+ },
+ "id": 22,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone3\" and r._field == \"oPLoss\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Diffuser DeltaP",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-RdYlGr"
+ },
+ "decimals": 1,
+ "mappings": [],
+ "max": 30,
+ "min": 20,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "g/Nm3h/m"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 12,
+ "y": 22
+ },
+ "id": 26,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone3\" and r._field == \"oOtr\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Oxygen Transfer Rate",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 1,
+ "mappings": [],
+ "max": 4,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "blue",
+ "value": null
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 4,
+ "x": 15,
+ "y": 22
+ },
+ "id": 30,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor3\" and r._field == \"reactor3.S7.O2\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Dissolved Oxygen",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 100,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "semi-dark-yellow",
+ "value": 50
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "%/min"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 2,
+ "x": 19,
+ "y": 22
+ },
+ "id": 34,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor3\" and r._field == \"dFactor\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Mixer speed",
+ "transparent": true,
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "semi-dark-yellow",
+ "value": 3000
+ },
+ {
+ "color": "red",
+ "value": 4000
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 21,
+ "y": 22
+ },
+ "id": 38,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor3\" and r._field == \"sludge\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "MLSS",
+ "transparent": true,
+ "type": "stat"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 26
+ },
+ "id": 49,
+ "panels": [],
+ "title": "Compartiment 4",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "max": 25,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#6ED0E0",
+ "value": 2.5
+ },
+ {
+ "color": "#EAB839",
+ "value": 5
+ },
+ {
+ "color": "red",
+ "value": 15
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 0,
+ "y": 27
+ },
+ "id": 11,
+ "options": {
+ "displayMode": "lcd",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor4\" and r._field == \"reactor4.S10.NH4+|NH3\" )\r\n |> last()",
+ "refId": "D"
+ }
+ ],
+ "title": "End compartiment NH4+|NH3",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "max": 1920,
+ "min": 200,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 3,
+ "y": 27
+ },
+ "id": 15,
+ "options": {
+ "displayMode": "basic",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone4\" and r._field == \"iFlow\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Input airflow in diffusers",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-GrYlRd"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "max": 8,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 6,
+ "y": 27
+ },
+ "id": 19,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone4\" and r._field == \"oFlowElement\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Flow per element",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 600,
+ "min": 500,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "green",
+ "value": 520
+ },
+ {
+ "color": "#EAB839",
+ "value": 550
+ },
+ {
+ "color": "red",
+ "value": 600
+ }
+ ]
+ },
+ "unit": "pressurembar"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 9,
+ "y": 27
+ },
+ "id": 23,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone4\" and r._field == \"oPLoss\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Diffuser DeltaP",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-RdYlGr"
+ },
+ "decimals": 1,
+ "mappings": [],
+ "max": 30,
+ "min": 20,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "g/Nm3h/m"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 12,
+ "y": 27
+ },
+ "id": 27,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"zone4\" and r._field == \"oOtr\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Oxygen Transfer Rate",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 1,
+ "mappings": [],
+ "max": 4,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "blue",
+ "value": null
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 4,
+ "x": 15,
+ "y": 27
+ },
+ "id": 31,
+ "options": {
+ "displayMode": "gradient",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor4\" and r._field == \"reactor4.S7.O2\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Dissolved Oxygen",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 100,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "semi-dark-yellow",
+ "value": 50
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "%/min"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 2,
+ "x": 19,
+ "y": 27
+ },
+ "id": 35,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor4\" and r._field == \"dFactor\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Mixer speed",
+ "transparent": true,
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "semi-dark-yellow",
+ "value": 3000
+ },
+ {
+ "color": "red",
+ "value": 4000
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 21,
+ "y": 27
+ },
+ "id": 39,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor4\" and r._field == \"sludge\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "MLSS",
+ "transparent": true,
+ "type": "stat"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 31
+ },
+ "id": 40,
+ "panels": [],
+ "title": "Basic info",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 10,
+ "w": 24,
+ "x": 0,
+ "y": 32
+ },
+ "id": 41,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"influent\" and r._field == \"influent.snh\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n |> yield(name: \"influent NH4+|NH3\")",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor4\" and r._field == \"reactor4.S10.NH4+|NH3\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n |> yield(name: \"Reactor1 NH4+|NH3\")",
+ "refId": "B"
+ }
+ ],
+ "title": "Influent | Effluent NH4+|NH3",
+ "transparent": true,
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 10,
+ "w": 24,
+ "x": 0,
+ "y": 42
+ },
+ "id": 50,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => ( r._measurement == \"reactor1\" or r._measurement == \"reactor2\" or r._measurement == \"reactor3\" or r._measurement == \"reactor4\") and r._field == \"sludge\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n |> movingAverage(n: 50)",
+ "refId": "A"
+ }
+ ],
+ "title": "Sludge MLSS",
+ "transparent": true,
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EF843C",
+ "value": 1000
+ },
+ {
+ "color": "green",
+ "value": 10000
+ },
+ {
+ "color": "#EAB839",
+ "value": 50000
+ },
+ {
+ "color": "semi-dark-red",
+ "value": 100000
+ }
+ ]
+ },
+ "unit": "kg/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 8,
+ "x": 0,
+ "y": 52
+ },
+ "id": 44,
+ "options": {
+ "displayMode": "lcd",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"influent\" and r._field == \"influent.snh\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n |> last()",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"influent\" and r._field == \"q\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n |> last()",
+ "refId": "C"
+ }
+ ],
+ "title": "Influent vracht NH4+|NH3",
+ "transformations": [
+ {
+ "id": "calculateField",
+ "options": {
+ "alias": "influentNH4_kgh",
+ "binary": {
+ "left": "q {group=\"influent\", name=\"influent\"}",
+ "operator": "*",
+ "right": "influent.snh {group=\"influent\", name=\"influent\"}"
+ },
+ "mode": "binary",
+ "reduce": {
+ "reducer": "sum"
+ },
+ "replaceFields": true
+ }
+ }
+ ],
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EF843C",
+ "value": 100
+ },
+ {
+ "color": "green",
+ "value": 5000
+ },
+ {
+ "color": "#EAB839",
+ "value": 12500
+ },
+ {
+ "color": "semi-dark-red",
+ "value": 25000
+ }
+ ]
+ },
+ "unit": "kg/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 8,
+ "x": 8,
+ "y": 52
+ },
+ "id": 45,
+ "options": {
+ "displayMode": "lcd",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor4\" and r._field == \"reactor4.S10.NH4+|NH3\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n |> last()",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"influent\" and r._field == \"q\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n |> last()",
+ "refId": "C"
+ }
+ ],
+ "title": "Effluent Vrach NH4+|NH3",
+ "transformations": [
+ {
+ "id": "calculateField",
+ "options": {
+ "alias": "influentNH4_kgh",
+ "binary": {
+ "left": "reactor4.S10.NH4+|NH3 {group=\"bio\", name=\"reactor4\"}",
+ "operator": "*",
+ "right": "q {group=\"influent\", name=\"influent\"}"
+ },
+ "mode": "binary",
+ "reduce": {
+ "reducer": "sum"
+ },
+ "replaceFields": true
+ }
+ }
+ ],
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic-by-name"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 10,
+ "w": 24,
+ "x": 0,
+ "y": 56
+ },
+ "id": 42,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"influent\" and r._field == \"influent.sno\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n |> yield(name: \"influent NH4+|NH3\")",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor4\" and r._field == \"reactor4.S10.NO3-|NO2-\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n |> yield(name: \"Reactor1 NH4+|NH3\")",
+ "refId": "B"
+ }
+ ],
+ "title": "Influent | Effluent NO3-|NO2-",
+ "transparent": true,
+ "type": "timeseries"
+ },
+ {
+ "collapsed": true,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 66
+ },
+ "id": 51,
+ "panels": [],
+ "title": "Advanced",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic-by-name"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "congm3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 10,
+ "w": 24,
+ "x": 0,
+ "y": 67
+ },
+ "id": 52,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"sim\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"reactor1\" and r.group == \"bio\" and r._field =~ /reactor1.S1/)\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n ",
+ "refId": "A"
+ }
+ ],
+ "title": "reactor 1 full bio first section",
+ "transparent": true,
+ "type": "timeseries"
+ }
+ ],
+ "refresh": "30s",
+ "schemaVersion": 39,
+ "tags": [],
+ "templating": {
+ "list": []
+ },
+ "time": {
+ "from": "now-6h",
+ "to": "now"
+ },
+ "timepicker": {},
+ "timezone": "browser",
+ "title": "RWZI bath - straat 1",
+ "uid": "bdzjluvuk4l4wb",
+ "version": 45,
+ "weekStart": ""
+ }
\ No newline at end of file
diff --git a/config/machine.json b/config/machine.json
new file mode 100644
index 0000000..1eb1e3a
--- /dev/null
+++ b/config/machine.json
@@ -0,0 +1,2091 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0,255,255,1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "id": 20,
+ "links": [],
+ "panels": [
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "panels": [],
+ "title": "Realtime",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 6,
+ "x": 0,
+ "y": 1
+ },
+ "id": 2,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "/^state \\{geoLocation_x=\"0\", geoLocation_y=\"0\", geoLocation_z=\"0\", id=\"b1226bbc99239bc5\", model=\"H05K\\-S03R\\+HGM1X\\-X280KO\", name=\"m1\", role=\"RotationalDeviceController\", softwareType=\"machine\", subType=\"centrifugal pumps\", supplier=\"hydrostal\", type=\"generic\", unit=\"m3/h\", uuid=\"null\"\\}$/",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: -1y) // Adjust time range as needed\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"state\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Machine State",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 3,
+ "x": 6,
+ "y": 1
+ },
+ "id": 4,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "/^mode \\{geoLocation_x=\"0\", geoLocation_y=\"0\", geoLocation_z=\"0\", id=\"b1226bbc99239bc5\", model=\"H05K\\-S03R\\+HGM1X\\-X280KO\", name=\"m1\", role=\"RotationalDeviceController\", softwareType=\"machine\", subType=\"centrifugal pumps\", supplier=\"hydrostal\", type=\"generic\", unit=\"m3/h\", uuid=\"null\"\\}$/",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: -1y) // Adjust time range as needed\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"mode\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Machine Mode",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "max": 1,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "transparent",
+ "value": null
+ },
+ {
+ "color": "green",
+ "value": 0
+ },
+ {
+ "color": "orange",
+ "value": 0.4
+ },
+ {
+ "color": "red",
+ "value": 0.8
+ }
+ ]
+ },
+ "unit": "percentunit"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 3,
+ "x": 9,
+ "y": 1
+ },
+ "id": 28,
+ "options": {
+ "minVizHeight": 75,
+ "minVizWidth": 75,
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "sizing": "auto"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"effRelDistFromPeak\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Relative distance from BEP",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 1,
+ "mappings": [],
+ "max": 220,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 150
+ },
+ {
+ "color": "red",
+ "value": 200
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 3,
+ "x": 12,
+ "y": 1
+ },
+ "id": 26,
+ "options": {
+ "minVizHeight": 75,
+ "minVizWidth": 75,
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "sizing": "auto"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"downstream_measured_flow\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Downstream measured flow",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "percent"
+ },
+ "overrides": [
+ {
+ "__systemRef": "hideSeriesFrom",
+ "matcher": {
+ "id": "byNames",
+ "options": {
+ "mode": "exclude",
+ "names": [
+ "flowLongTermLevel {geoLocation_x=\"0\", geoLocation_y=\"0\", geoLocation_z=\"0\", id=\"b1226bbc99239bc5\", model=\"H05K-S03R+HGM1X-X280KO\", name=\"m1\", role=\"RotationalDeviceController\", softwareType=\"machine\", subType=\"centrifugal pumps\", supplier=\"hydrostal\", type=\"generic\", unit=\"m3/h\", uuid=\"null\"}"
+ ],
+ "prefix": "All except:",
+ "readOnly": true
+ }
+ },
+ "properties": []
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 15,
+ "w": 3,
+ "x": 15,
+ "y": 1
+ },
+ "id": 22,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: -1y) // Adjust time range as needed\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"ctrl\" )\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Control",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "percent"
+ },
+ "overrides": [
+ {
+ "__systemRef": "hideSeriesFrom",
+ "matcher": {
+ "id": "byNames",
+ "options": {
+ "mode": "exclude",
+ "names": [
+ "flowLongTermLevel {geoLocation_x=\"0\", geoLocation_y=\"0\", geoLocation_z=\"0\", id=\"b1226bbc99239bc5\", model=\"H05K-S03R+HGM1X-X280KO\", name=\"m1\", role=\"RotationalDeviceController\", softwareType=\"machine\", subType=\"centrifugal pumps\", supplier=\"hydrostal\", type=\"generic\", unit=\"m3/h\", uuid=\"null\"}"
+ ],
+ "prefix": "All except:",
+ "readOnly": true
+ }
+ },
+ "properties": []
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 15,
+ "w": 3,
+ "x": 18,
+ "y": 1
+ },
+ "id": 32,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: -1y) // Adjust time range as needed\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"NCogPercent\" )\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Normalized CoG in %",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "__systemRef": "hideSeriesFrom",
+ "matcher": {
+ "id": "byNames",
+ "options": {
+ "mode": "exclude",
+ "names": [
+ "flowLongTermLevel {geoLocation_x=\"0\", geoLocation_y=\"0\", geoLocation_z=\"0\", id=\"b1226bbc99239bc5\", model=\"H05K-S03R+HGM1X-X280KO\", name=\"m1\", role=\"RotationalDeviceController\", softwareType=\"machine\", subType=\"centrifugal pumps\", supplier=\"hydrostal\", type=\"generic\", unit=\"m3/h\", uuid=\"null\"}"
+ ],
+ "prefix": "All except:",
+ "readOnly": true
+ }
+ },
+ "properties": []
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 3,
+ "x": 0,
+ "y": 4
+ },
+ "id": 21,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: -1y) // Adjust time range as needed\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"cog\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Best Efficiency Point",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "yellow",
+ "value": 1
+ },
+ {
+ "color": "orange",
+ "value": 2
+ },
+ {
+ "color": "red",
+ "value": 3
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 3,
+ "x": 3,
+ "y": 4
+ },
+ "id": 19,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: -1y) // Adjust time range as needed\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"flowImmediateLevel\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Flow Shortterm NRMSD",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "yellow",
+ "value": 1
+ },
+ {
+ "color": "orange",
+ "value": 2
+ },
+ {
+ "color": "red",
+ "value": 3
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 3,
+ "x": 6,
+ "y": 4
+ },
+ "id": 20,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: -1y) // Adjust time range as needed\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"flowLongTermLevel\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Flow Longterm NRMSD",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "transparent",
+ "value": null
+ },
+ {
+ "color": "green",
+ "value": 0
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 3,
+ "x": 0,
+ "y": 9
+ },
+ "id": 30,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"downstream_predicted_efficiency\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Efficiency",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "max": 3600,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 1500
+ },
+ {
+ "color": "red",
+ "value": 2000
+ }
+ ]
+ },
+ "unit": "pressurembar"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 3,
+ "x": 3,
+ "y": 9
+ },
+ "id": 23,
+ "options": {
+ "minVizHeight": 75,
+ "minVizWidth": 75,
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "sizing": "auto"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"upstream_measured_pressure\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Upstream pressure",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "max": 3600,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 1500
+ },
+ {
+ "color": "red",
+ "value": 2000
+ }
+ ]
+ },
+ "unit": "pressurembar"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 3,
+ "x": 6,
+ "y": 9
+ },
+ "id": 25,
+ "options": {
+ "minVizHeight": 75,
+ "minVizWidth": 75,
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "sizing": "auto"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"downstream_measured_pressure\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Downstream pressure",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 1,
+ "mappings": [],
+ "max": 220,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 80
+ },
+ {
+ "color": "red",
+ "value": 120
+ }
+ ]
+ },
+ "unit": "kwatt"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 3,
+ "x": 9,
+ "y": 9
+ },
+ "id": 31,
+ "options": {
+ "minVizHeight": 75,
+ "minVizWidth": 75,
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "sizing": "auto"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"upstream_predicted_power\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Predicted power",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 1,
+ "mappings": [],
+ "max": 220,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 150
+ },
+ {
+ "color": "red",
+ "value": 200
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 3,
+ "x": 12,
+ "y": 9
+ },
+ "id": 24,
+ "options": {
+ "minVizHeight": 75,
+ "minVizWidth": 75,
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "sizing": "auto"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"downstream_predicted_flow\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Downstream predicted flow",
+ "type": "gauge"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 16
+ },
+ "id": 5,
+ "panels": [],
+ "title": "Measurements",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "displayName": "pressure",
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 6,
+ "x": 0,
+ "y": 17
+ },
+ "id": 6,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"upstream_measured_pressure\" or r._field==\"upstream_predicted_pressure\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Upstream pressure",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 19,
+ "w": 5,
+ "x": 6,
+ "y": 17
+ },
+ "id": 15,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"differential_measured_pressure\" )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Differential pressure",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 10,
+ "w": 6,
+ "x": 11,
+ "y": 17
+ },
+ "id": 16,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and ( r._field==\"upstream_measured_power\" or r._field==\"upstream_predicted_power\" ) )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Power",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 10,
+ "w": 7,
+ "x": 17,
+ "y": 17
+ },
+ "id": 14,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and ( r._field==\"downstream_measured_flow\" or r._field==\"downstream_predicted_flow\") )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Flow",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "fixed"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "dashed"
+ }
+ },
+ "decimals": 2,
+ "displayName": "pressure",
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 1500
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 6,
+ "x": 0,
+ "y": 22
+ },
+ "id": 7,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"downstream_measured_pressure\" or r._field==\"downstream_predicted_pressure\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Downstream pressure",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "dashed"
+ }
+ },
+ "decimals": 2,
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "transparent",
+ "value": null
+ },
+ {
+ "color": "green",
+ "value": 0
+ },
+ {
+ "color": "orange",
+ "value": 0.4
+ },
+ {
+ "color": "red",
+ "value": 0.8
+ }
+ ]
+ },
+ "unit": "percentunit"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 6,
+ "x": 0,
+ "y": 27
+ },
+ "id": 29,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"effRelDistFromPeak\")",
+ "refId": "A"
+ }
+ ],
+ "title": "Relative distance from BEP",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "flowLongterNRMSD {geoLocation_x=\"0\", geoLocation_y=\"0\", geoLocation_z=\"0\", id=\"b1226bbc99239bc5\", model=\"H05K-S03R+HGM1X-X280KO\", name=\"m1\", role=\"RotationalDeviceController\", softwareType=\"machine\", subType=\"centrifugal pumps\", supplier=\"hydrostal\", type=\"generic\", unit=\"m3/h\", uuid=\"null\"}"
+ },
+ "properties": [
+ {
+ "id": "custom.axisPlacement",
+ "value": "right"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 10,
+ "w": 7,
+ "x": 17,
+ "y": 27
+ },
+ "id": 18,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and ( r._field==\"flowLongterNRMSD\" or r._field==\"flowNrmse\") )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Predictive maintenance flow",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "Flow / Power",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "__systemRef": "hideSeriesFrom",
+ "matcher": {
+ "id": "byNames",
+ "options": {
+ "mode": "exclude",
+ "names": [
+ "downstream_predicted_efficiency {geoLocation_x=\"0\", geoLocation_y=\"0\", geoLocation_z=\"0\", id=\"b1226bbc99239bc5\", model=\"H05K-S03R+HGM1X-X280KO\", name=\"m1\", role=\"RotationalDeviceController\", softwareType=\"machine\", subType=\"centrifugal pumps\", supplier=\"hydrostal\", type=\"generic\", unit=\"m3/h\", uuid=\"null\"}"
+ ],
+ "prefix": "All except:",
+ "readOnly": true
+ }
+ },
+ "properties": [
+ {
+ "id": "custom.hideFrom",
+ "value": {
+ "legend": false,
+ "tooltip": false,
+ "viz": true
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 13,
+ "w": 24,
+ "x": 0,
+ "y": 37
+ },
+ "id": 17,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and ( r._field==\"downstream_measured_efficiency\" or r._field==\"downstream_predicted_efficiency\") )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Efficiency",
+ "type": "timeseries"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 50
+ },
+ "id": 10,
+ "panels": [],
+ "title": "Machine control",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "fieldMinMax": false,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 10
+ },
+ {
+ "color": "#EAB839",
+ "value": 20
+ },
+ {
+ "color": "yellow",
+ "value": 80
+ },
+ {
+ "color": "red",
+ "value": 90
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "__systemRef": "hideSeriesFrom",
+ "matcher": {
+ "id": "byNames",
+ "options": {
+ "mode": "exclude",
+ "names": [
+ "position {geoLocation_x=\"0\", geoLocation_y=\"0\", geoLocation_z=\"0\", id=\"b1226bbc99239bc5\", model=\"H05K-S03R+HGM1X-X280KO\", name=\"m1\", role=\"RotationalDeviceController\", softwareType=\"machine\", subType=\"centrifugal pumps\", supplier=\"hydrostal\", type=\"generic\", unit=\"m3/h\", uuid=\"null\"}"
+ ],
+ "prefix": "All except:",
+ "readOnly": true
+ }
+ },
+ "properties": []
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 11,
+ "w": 24,
+ "x": 0,
+ "y": 51
+ },
+ "id": 13,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and ( r._field==\"ctrl\" or r._field==\"moveTimeleft\" ))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Control",
+ "type": "timeseries"
+ }
+ ],
+ "refresh": "10s",
+ "schemaVersion": 39,
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "selected": false,
+ "text": "influxdb",
+ "value": "influxdb"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "label": "dbase",
+ "multi": false,
+ "name": "dbase",
+ "options": [
+ {
+ "selected": true,
+ "text": "influxdb",
+ "value": "influxdb"
+ }
+ ],
+ "query": "influxdb",
+ "queryValue": "",
+ "skipUrlSync": false,
+ "type": "custom"
+ },
+ {
+ "current": {
+ "selected": false,
+ "text": "m1",
+ "value": "m1"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "label": "",
+ "multi": false,
+ "name": "measurement",
+ "options": [
+ {
+ "selected": true,
+ "text": "m1",
+ "value": "m1"
+ }
+ ],
+ "query": "m1",
+ "queryValue": "",
+ "skipUrlSync": false,
+ "type": "custom"
+ },
+ {
+ "current": {
+ "selected": false,
+ "text": "lvl2",
+ "value": "lvl2"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "multi": false,
+ "name": "bucket",
+ "options": [
+ {
+ "selected": true,
+ "text": "lvl2",
+ "value": "lvl2"
+ }
+ ],
+ "query": "lvl2",
+ "queryValue": "",
+ "skipUrlSync": false,
+ "type": "custom"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-1h",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h"
+ ]
+ },
+ "timezone": "browser",
+ "title": "machineDashboard",
+ "uid": "",
+ "version": 40,
+ "weekStart": ""
+}
\ No newline at end of file
diff --git a/config/machineGroup.json b/config/machineGroup.json
new file mode 100644
index 0000000..3a30e79
--- /dev/null
+++ b/config/machineGroup.json
@@ -0,0 +1,2609 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0,255,255,1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "id": 22,
+ "links": [],
+ "panels": [
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "panels": [],
+ "title": "Realtime Prio flow",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 250,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 150
+ },
+ {
+ "color": "red",
+ "value": 180
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 4,
+ "x": 0,
+ "y": 1
+ },
+ "id": 25,
+ "options": {
+ "minVizHeight": 75,
+ "minVizWidth": 75,
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "sizing": "auto"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => ( r._measurement==\"mG1\" ) and ( r._field==\"downstream_predicted_flow\" ) )\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Realtime flow",
+ "transformations": [
+ {
+ "id": "calculateField",
+ "options": {
+ "alias": "cost / h",
+ "binary": {
+ "left": "upstream_predicted_power {geoLocation=\"undefined\", id=\"eb9bc2362e755b9e\", model=\"undefined\", name=\"mG1\", role=\"GroupController\", softwareType=\"machineGroup\", subType=\"undefined\", supplier=\"undefined\", type=\"undefined\", unit=\"undefined\", uuid=\"undefined\"}",
+ "operator": "*",
+ "right": "0.25"
+ },
+ "mode": "binary",
+ "reduce": {
+ "reducer": "sum"
+ },
+ "replaceFields": true
+ }
+ }
+ ],
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 300,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 100
+ },
+ {
+ "color": "red",
+ "value": 180
+ }
+ ]
+ },
+ "unit": "kwatt"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 5,
+ "x": 4,
+ "y": 1
+ },
+ "id": 23,
+ "options": {
+ "minVizHeight": 75,
+ "minVizWidth": 75,
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "sizing": "auto"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => ( r._measurement==\"mG1\" ) and ( r._field==\"upstream_measured_power\" or r._field==\"upstream_predicted_power\" ) )\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Realtime verbruik",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 300,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 20
+ },
+ {
+ "color": "red",
+ "value": 50
+ }
+ ]
+ },
+ "unit": "currencyEUR"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 2,
+ "x": 9,
+ "y": 1
+ },
+ "id": 39,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"mG1\" and r._field == \"upstream_predicted_power\")\n |> last()\n |> map(fn: (r) => ({ r with _value: r._value * 0.25 }))\n |> yield(name: \"multiplied_value\")",
+ "refId": "A"
+ }
+ ],
+ "title": "Realtime kost",
+ "transformations": [
+ {
+ "id": "calculateField",
+ "options": {
+ "alias": "cost / h",
+ "binary": {
+ "left": "upstream_predicted_power {geoLocation=\"undefined\", id=\"07ec60b7b7c17582\", model=\"undefined\", name=\"mG2\", role=\"GroupController\", softwareType=\"machineGroup\", subType=\"undefined\", supplier=\"undefined\", type=\"undefined\", unit=\"undefined\", uuid=\"undefined\"}",
+ "operator": "*",
+ "right": "0.25"
+ },
+ "mode": "binary",
+ "reduce": {
+ "reducer": "sum"
+ },
+ "replaceFields": true
+ }
+ }
+ ],
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 300,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 20
+ },
+ {
+ "color": "red",
+ "value": 50
+ }
+ ]
+ },
+ "unit": "m3/kW"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 3,
+ "x": 11,
+ "y": 1
+ },
+ "id": 44,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"mG1\" and r._field == \"downstream_predicted_efficiency\")\n |> last()\n |> map(fn: (r) => ({ r with _value: r._value}))\n |> yield(name: \"multiplied_value\")",
+ "refId": "A"
+ }
+ ],
+ "title": "Flow / Power",
+ "transformations": [
+ {
+ "id": "calculateField",
+ "options": {
+ "alias": "cost / h",
+ "binary": {
+ "left": "upstream_predicted_power {geoLocation=\"undefined\", id=\"07ec60b7b7c17582\", model=\"undefined\", name=\"mG2\", role=\"GroupController\", softwareType=\"machineGroup\", subType=\"undefined\", supplier=\"undefined\", type=\"undefined\", unit=\"undefined\", uuid=\"undefined\"}",
+ "operator": "*",
+ "right": "0.25"
+ },
+ "mode": "binary",
+ "reduce": {
+ "reducer": "sum"
+ },
+ "replaceFields": true
+ }
+ }
+ ],
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "blue",
+ "value": null
+ }
+ ]
+ },
+ "unit": "kwatth"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 7,
+ "x": 14,
+ "y": 1
+ },
+ "id": 27,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => \n r._measurement == \"mG1\" and \n r._field == \"upstream_predicted_power\"\n )\n |> group()\n |> window(every: $__interval, period: $__interval)\n |> mean(column: \"_value\")\n |> duplicate(column: \"_start\", as: \"_time\")\n |> drop(columns: [\"_start\", \"_stop\"])\n |> yield(name: \"rolling_average_predicted_power\")\n",
+ "refId": "A"
+ }
+ ],
+ "title": "Verbruik",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "blue",
+ "value": null
+ }
+ ]
+ },
+ "unit": "percentunit"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 3,
+ "x": 21,
+ "y": 1
+ },
+ "id": 42,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => ( r._measurement==\"mG1\" ) and ( r._field==\"absDistFromPeak\" ) )\n |> last()\n",
+ "refId": "A"
+ }
+ ],
+ "title": "Distance from group BEP",
+ "type": "stat"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 8
+ },
+ "id": 34,
+ "panels": [],
+ "title": "Realtime Optimaal",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 250,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 150
+ },
+ {
+ "color": "red",
+ "value": 180
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 4,
+ "x": 0,
+ "y": 9
+ },
+ "id": 37,
+ "options": {
+ "minVizHeight": 75,
+ "minVizWidth": 75,
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "sizing": "auto"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => ( r._measurement==\"mG2\" ) and ( r._field==\"downstream_predicted_flow\" ) )\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Realtime flow",
+ "transformations": [
+ {
+ "id": "calculateField",
+ "options": {
+ "alias": "cost / h",
+ "binary": {
+ "left": "upstream_predicted_power {geoLocation=\"undefined\", id=\"eb9bc2362e755b9e\", model=\"undefined\", name=\"mG1\", role=\"GroupController\", softwareType=\"machineGroup\", subType=\"undefined\", supplier=\"undefined\", type=\"undefined\", unit=\"undefined\", uuid=\"undefined\"}",
+ "operator": "*",
+ "right": "0.25"
+ },
+ "mode": "binary",
+ "reduce": {
+ "reducer": "sum"
+ },
+ "replaceFields": true
+ }
+ }
+ ],
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 300,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 100
+ },
+ {
+ "color": "red",
+ "value": 180
+ }
+ ]
+ },
+ "unit": "kwatt"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 5,
+ "x": 4,
+ "y": 9
+ },
+ "id": 24,
+ "options": {
+ "minVizHeight": 75,
+ "minVizWidth": 75,
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "sizing": "auto"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => ( r._measurement==\"mG2\" ) and ( r._field==\"upstream_measured_power\" or r._field==\"upstream_predicted_power\" ) )\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Realtime verbruik",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 300,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 20
+ },
+ {
+ "color": "red",
+ "value": 50
+ }
+ ]
+ },
+ "unit": "currencyEUR"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 2,
+ "x": 9,
+ "y": 9
+ },
+ "id": 30,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"mG2\" and r._field == \"upstream_predicted_power\")\n |> last()\n |> map(fn: (r) => ({ r with _value: r._value * 0.25 }))\n |> yield(name: \"multiplied_value\")",
+ "refId": "A"
+ }
+ ],
+ "title": "Realtime kost",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 300,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 20
+ },
+ {
+ "color": "red",
+ "value": 50
+ }
+ ]
+ },
+ "unit": "m3/kW"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 3,
+ "x": 11,
+ "y": 9
+ },
+ "id": 45,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"mG2\" and r._field == \"downstream_predicted_efficiency\")\n |> last()\n |> map(fn: (r) => ({ r with _value: r._value}))\n |> yield(name: \"multiplied_value\")",
+ "refId": "A"
+ }
+ ],
+ "title": "Flow / Power",
+ "transformations": [
+ {
+ "id": "calculateField",
+ "options": {
+ "alias": "cost / h",
+ "binary": {
+ "left": "upstream_predicted_power {geoLocation=\"undefined\", id=\"07ec60b7b7c17582\", model=\"undefined\", name=\"mG2\", role=\"GroupController\", softwareType=\"machineGroup\", subType=\"undefined\", supplier=\"undefined\", type=\"undefined\", unit=\"undefined\", uuid=\"undefined\"}",
+ "operator": "*",
+ "right": "0.25"
+ },
+ "mode": "binary",
+ "reduce": {
+ "reducer": "sum"
+ },
+ "replaceFields": true
+ }
+ }
+ ],
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "blue",
+ "value": null
+ }
+ ]
+ },
+ "unit": "kwatth"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 7,
+ "x": 14,
+ "y": 9
+ },
+ "id": 28,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => \n r._measurement == \"mG2\" and \n r._field == \"upstream_predicted_power\"\n )\n |> group()\n |> window(every: $__interval, period: $__interval)\n |> mean(column: \"_value\")\n |> duplicate(column: \"_start\", as: \"_time\")\n |> drop(columns: [\"_start\", \"_stop\"])\n |> yield(name: \"rolling_average_predicted_power\")\n",
+ "refId": "A"
+ }
+ ],
+ "title": "Verbruik",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "blue",
+ "value": null
+ }
+ ]
+ },
+ "unit": "percentunit"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 3,
+ "x": 21,
+ "y": 9
+ },
+ "id": 43,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => ( r._measurement==\"mG2\" ) and ( r._field==\"absDistFromPeak\" ) )\n |> last()\n",
+ "refId": "A"
+ }
+ ],
+ "title": "Distance from group BEP",
+ "type": "stat"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 16
+ },
+ "id": 35,
+ "panels": [],
+ "title": "Verschillen",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 250,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 150
+ },
+ {
+ "color": "red",
+ "value": 180
+ }
+ ]
+ },
+ "unit": "m3/h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 4,
+ "x": 0,
+ "y": 17
+ },
+ "id": 38,
+ "options": {
+ "minVizHeight": 75,
+ "minVizWidth": 75,
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "sizing": "auto"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n (r._measurement == \"mG2\" or r._measurement == \"mG1\") and \n r._field == \"downstream_predicted_flow\"\n )\n |> last()\n // Add a constant key so that both records share the same pivot key\n |> map(fn: (r) => ({ r with pivotKey: \"last\" }))\n // Drop _time to ensure both records are combined in the pivot\n |> drop(columns: [\"_time\"])\n |> group(columns: [\"pivotKey\"])\n // Pivot using the constant key, so that both mG2 and mG1 values appear in one row\n |> pivot(rowKey: [\"pivotKey\"], columnKey: [\"_measurement\"], valueColumn: \"_value\")\n // Compute the difference: mG2 minus mG1\n |> map(fn: (r) => ({ r with diff: r.mG1 - r.mG2 }))\n |> keep(columns: [\"diff\"])\n |> yield(name: \"difference\")",
+ "refId": "A"
+ }
+ ],
+ "title": "Realtime flow verschil",
+ "transformations": [
+ {
+ "id": "calculateField",
+ "options": {
+ "alias": "cost / h",
+ "binary": {
+ "left": "upstream_predicted_power {geoLocation=\"undefined\", id=\"eb9bc2362e755b9e\", model=\"undefined\", name=\"mG1\", role=\"GroupController\", softwareType=\"machineGroup\", subType=\"undefined\", supplier=\"undefined\", type=\"undefined\", unit=\"undefined\", uuid=\"undefined\"}",
+ "operator": "*",
+ "right": "0.25"
+ },
+ "mode": "binary",
+ "reduce": {
+ "reducer": "sum"
+ },
+ "replaceFields": true
+ }
+ }
+ ],
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 300,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 100
+ },
+ {
+ "color": "red",
+ "value": 180
+ }
+ ]
+ },
+ "unit": "kwatt"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 5,
+ "x": 4,
+ "y": 17
+ },
+ "id": 29,
+ "options": {
+ "minVizHeight": 75,
+ "minVizWidth": 75,
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "sizing": "auto"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n (r._measurement == \"mG2\" or r._measurement == \"mG1\") and \n r._field == \"upstream_predicted_power\"\n )\n |> last()\n // Add a constant key so that both records share the same pivot key\n |> map(fn: (r) => ({ r with pivotKey: \"last\" }))\n // Drop _time to ensure both records are combined in the pivot\n |> drop(columns: [\"_time\"])\n |> group(columns: [\"pivotKey\"])\n // Pivot using the constant key, so that both mG2 and mG1 values appear in one row\n |> pivot(rowKey: [\"pivotKey\"], columnKey: [\"_measurement\"], valueColumn: \"_value\")\n // Compute the difference: mG2 minus mG1\n |> map(fn: (r) => ({ r with diff: r.mG1 - r.mG2 }))\n |> keep(columns: [\"diff\"])\n |> yield(name: \"difference\")\n",
+ "refId": "A"
+ }
+ ],
+ "title": "Realtime power verschil",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "#EAB839",
+ "value": 20
+ },
+ {
+ "color": "red",
+ "value": 50
+ }
+ ]
+ },
+ "unit": "Euro (€) / h"
+ },
+ "overrides": [
+ {
+ "__systemRef": "hideSeriesFrom",
+ "matcher": {
+ "id": "byNames",
+ "options": {
+ "mode": "exclude",
+ "names": [
+ "diff upstream_predicted_power"
+ ],
+ "prefix": "All except:",
+ "readOnly": true
+ }
+ },
+ "properties": []
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 5,
+ "x": 9,
+ "y": 17
+ },
+ "id": 26,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "mG1 = from(bucket: \"${bucket}\")\n |> range(start: -90m, stop: now())\n |> filter(fn: (r) => r._measurement == \"mG1\" and r._field == \"upstream_predicted_power\")\n |> last()\n |> map(fn: (r) => ({\n _time: now(), // set a common timestamp\n joinKey: \"last\", // add a constant key for joining\n mG1_Cost: float(v: r._value) * 0.25\n }))\n\nmG2 = from(bucket: \"${bucket}\")\n |> range(start: -90m, stop: now())\n |> filter(fn: (r) => r._measurement == \"mG2\" and r._field == \"upstream_predicted_power\")\n |> last()\n |> map(fn: (r) => ({\n _time: now(), // set the same common timestamp\n joinKey: \"last\", // add the constant key for joining\n mG2_Cost: float(v: r._value) * 0.25\n }))\n\njoin(\n tables: {mG1: mG1, mG2: mG2},\n on: [\"joinKey\"],\n method: \"inner\"\n)\n |> map(fn: (r) => ({\n _time: r._time,\n diff: r.mG1_Cost - r.mG2_Cost\n }))\n |> yield(name: \"diff\")",
+ "refId": "A"
+ }
+ ],
+ "title": "Realtime verschil",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "Over een tijdsperiode van 1 uur het rollend gemiddelde in euro/h",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 2,
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "Euro (€) / h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 14,
+ "y": 17
+ },
+ "id": 32,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "vertical",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "/^scaled_difference$/",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "// Process mG1: Aggregate at 1m, compute moving average, and scale\nmG1 = from(bucket: \"${bucket}\")\n |> range(start: -90m, stop: now())\n |> filter(fn: (r) => r._measurement == \"mG1\" and r._field == \"upstream_predicted_power\")\n |> aggregateWindow(every: 1m, fn: mean, createEmpty: false)\n |> movingAverage(n: 60)\n |> map(fn: (r) => ({\n _time: r._time,\n mG1_scaled: float(v: r._value)\n }))\n\n// Process mG2: Same processing as mG1\nmG2 = from(bucket: \"${bucket}\")\n |> range(start: -90m, stop: now())\n |> filter(fn: (r) => r._measurement == \"mG2\" and r._field == \"upstream_predicted_power\")\n |> aggregateWindow(every: 1m, fn: mean, createEmpty: false)\n |> movingAverage(n: 60)\n |> map(fn: (r) => ({\n _time: r._time,\n mG2_scaled: float(v: r._value)\n }))\n\n// Join the two streams on _time and compute the cost difference\njoin(\n tables: {mG1: mG1, mG2: mG2},\n on: [\"_time\"],\n method: \"inner\"\n)\n |> map(fn: (r) => ({\n _time: r._time,\n // Assuming 0.25 Euro per kWh:\n scaled_difference: (r.mG1_scaled - r.mG2_scaled) * 0.25\n }))\n |> yield(name: \"scaled_rolling_difference\")",
+ "refId": "A"
+ }
+ ],
+ "title": "Rollend gemiddeld verschil / h",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "Rollend gemiddelde kost / h",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-GrYlRd"
+ },
+ "mappings": [],
+ "max": 16,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "blue",
+ "value": null
+ }
+ ]
+ },
+ "unit": "Euro (€) / h"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 14,
+ "w": 9,
+ "x": 0,
+ "y": 24
+ },
+ "id": 31,
+ "options": {
+ "displayMode": "lcd",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "text"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: -90m, stop: now())\n |> filter(fn: (r) => \n r._measurement == \"mG1\" and \n r._field == \"upstream_predicted_power\"\n )\n // Aggregate raw data to 1-minute intervals.\n |> aggregateWindow(every: 1m, fn: mean, createEmpty: false)\n // Compute a 60-point moving average (rolling average over the last 60 minutes).\n |> movingAverage(n: 60)\n // Re-aggregate to 1-minute intervals (adjust if you meant 6m for 10 points per hour)\n |> aggregateWindow(every: 1m, fn: last, createEmpty: false)\n // Multiply each value by 0.25\n |> map(fn: (r) => ({\n _time: r._time,\n _value: r._value * 0.25\n }))\n |> yield(name: \"mG1\")\n",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -90m, stop: now())\r\n |> filter(fn: (r) => \r\n r._measurement == \"mG2\" and \r\n r._field == \"upstream_predicted_power\"\r\n )\r\n // Aggregate raw data to 1-minute intervals.\r\n |> aggregateWindow(every: 1m, fn: mean, createEmpty: false)\r\n // Compute a 60-point moving average (rolling average over the last 60 minutes).\r\n |> movingAverage(n: 60)\r\n // Re-aggregate to 1-minute intervals (adjust if you meant 6m for 10 points per hour)\r\n |> aggregateWindow(every: 1m, fn: last, createEmpty: false)\r\n // Multiply each value by 0.25\r\n |> map(fn: (r) => ({\r\n _time: r._time,\r\n _value: r._value * 0.25\r\n }))\r\n |> yield(name: \"mG2\")\r\n",
+ "refId": "B"
+ }
+ ],
+ "title": "Kosten Rollend gemiddelde / h",
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "Over een tijdsperiode van 1 uur het rollend gemiddelde in kWh",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "kwatth"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 7,
+ "x": 9,
+ "y": 24
+ },
+ "id": 41,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: -90m, stop: now())\n |> filter(fn: (r) => \n r._measurement == \"mG1\" and \n r._field == \"upstream_predicted_power\"\n )\n // Aggregate raw data to 1-minute intervals.\n |> aggregateWindow(every: 1m, fn: mean, createEmpty: false)\n // Compute a 60-point moving average (rolling average over the last 60 minutes).\n |> movingAverage(n: 60)\n // Re-aggregate to 6-minute intervals to consistently yield 60 data points per hour.\n |> aggregateWindow(every: 1m, fn: last, createEmpty: false)\n |> yield(name: \"rolling_average\")\n",
+ "refId": "A"
+ }
+ ],
+ "title": "mG1 Rollend gemiddeld verschil / kWh",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "Het rollend gemiddelde * 8766 uur",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "max": 20,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "red",
+ "value": null
+ }
+ ]
+ },
+ "unit": "currencyEUR"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 14,
+ "w": 6,
+ "x": 16,
+ "y": 24
+ },
+ "id": 33,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "/^scaled_difference$/",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "// Process mG1: Filter, aggregate, compute moving average, and scale\nmG1 = from(bucket: \"${bucket}\")\n |> range(start: -90m, stop: now())\n |> filter(fn: (r) => r._measurement == \"mG1\" and r._field == \"upstream_predicted_power\")\n |> aggregateWindow(every: 1m, fn: mean, createEmpty: false)\n |> movingAverage(n: 60)\n |> map(fn: (r) => ({\n _time: r._time,\n mG1_scaled: float(v: r._value) * 8766.0\n }))\n\n// Process mG2: Filter, aggregate, compute moving average, and scale\nmG2 = from(bucket: \"${bucket}\")\n |> range(start: -90m, stop: now())\n |> filter(fn: (r) => r._measurement == \"mG2\" and r._field == \"upstream_predicted_power\")\n |> aggregateWindow(every: 1m, fn: mean, createEmpty: false)\n |> movingAverage(n: 60)\n |> map(fn: (r) => ({\n _time: r._time,\n mG2_scaled: float(v: r._value) * 8766.0\n }))\n\n// Join the two streams on _time and compute the difference\njoin(\n tables: {mG1: mG1, mG2: mG2},\n on: [\"_time\"],\n method: \"inner\"\n)\n |> map(fn: (r) => ({\n _time: r._time,\n scaled_difference: ( r.mG1_scaled - r.mG2_scaled ) * 0.25\n }))\n |> yield(name: \"scaled_rolling_difference\")\n\n\n\n\n\n",
+ "refId": "A"
+ }
+ ],
+ "title": "Projectie over 1 jaar",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "Over een tijdsperiode van 1 uur het rollend gemiddelde in kWh",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "kwatth"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 7,
+ "x": 9,
+ "y": 31
+ },
+ "id": 40,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "vertical",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: -90m, stop: now())\n |> filter(fn: (r) => \n r._measurement == \"mG2\" and \n r._field == \"upstream_predicted_power\"\n )\n // Aggregate raw data to 1-minute intervals.\n |> aggregateWindow(every: 1m, fn: mean, createEmpty: false)\n // Compute a 60-point moving average (rolling average over the last 60 minutes).\n |> movingAverage(n: 60)\n // Re-aggregate to 6-minute intervals to consistently yield 60 data points per hour.\n |> aggregateWindow(every: 1m, fn: last, createEmpty: false)\n |> yield(name: \"rolling_average\")\n\n",
+ "refId": "A"
+ }
+ ],
+ "title": "MG2 Rollend gemiddeld verschil / kWh",
+ "type": "stat"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 38
+ },
+ "id": 5,
+ "panels": [],
+ "title": "Measurements",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "Flow / Power",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 13,
+ "w": 24,
+ "x": 0,
+ "y": 39
+ },
+ "id": 17,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => ( r._measurement==\"mG1\" or r._measurement==\"mG2\" ) and ( r._field==\"downstream_measured_efficiency\" or r._field==\"downstream_predicted_efficiency\") )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Efficiency",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "mappings": [],
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "diff {_field=\"upstream_predicted_power\"}"
+ },
+ "properties": [
+ {
+ "id": "custom.axisPlacement",
+ "value": "right"
+ },
+ {
+ "id": "custom.drawStyle",
+ "value": "points"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 12,
+ "w": 24,
+ "x": 0,
+ "y": 52
+ },
+ "id": 16,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => ( r._measurement==\"mG1\" or r._measurement==\"mG2\" ) and ( r._field==\"upstream_measured_power\" or r._field==\"upstream_predicted_power\" ) )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "mg1 = from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => \r\n r._measurement == \"mG1\" and \r\n (r._field == \"upstream_measured_power\" or r._field == \"upstream_predicted_power\")\r\n )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n\r\nmg2 = from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => \r\n r._measurement == \"mG2\" and \r\n (r._field == \"upstream_measured_power\" or r._field == \"upstream_predicted_power\")\r\n )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\r\n\r\njoin(\r\n tables: {mg1: mg1, mg2: mg2},\r\n on: [\"_time\", \"_field\"],\r\n method: \"inner\"\r\n)\r\n|> map(fn: (r) => ({\r\n _time: r._time,\r\n _field: r._field,\r\n diff: r._value_mg1 - r._value_mg2\r\n}))",
+ "refId": "B"
+ }
+ ],
+ "title": "machineGroup power comparison",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 11,
+ "w": 24,
+ "x": 0,
+ "y": 64
+ },
+ "id": 14,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => ( r._measurement==\"mG1\" or r._measurement==\"mG2\" ) and (r._field==\"downstream_predicted_flow\") )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Flow",
+ "type": "timeseries"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 75
+ },
+ "id": 10,
+ "panels": [],
+ "title": "Machine control",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "fieldMinMax": false,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 10
+ },
+ {
+ "color": "#EAB839",
+ "value": 20
+ },
+ {
+ "color": "yellow",
+ "value": 80
+ },
+ {
+ "color": "red",
+ "value": 90
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "m1 ctrl {geoLocation_x=\"0\", geoLocation_y=\"0\", geoLocation_z=\"0\", id=\"b1226bbc99239bc5\", model=\"H05K-S03R+HGM1X-X280KO\", name=\"m1\", role=\"RotationalDeviceController\", softwareType=\"machine\", subType=\"centrifugal pumps\", supplier=\"hydrostal\", type=\"generic\", unit=\"m3/h\", uuid=\"null\"}"
+ },
+ "properties": [
+ {
+ "id": "custom.axisPlacement",
+ "value": "right"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "m2 ctrl {geoLocation_x=\"0\", geoLocation_y=\"0\", geoLocation_z=\"0\", id=\"f8a5f0524be2a754\", model=\"H05K-S03R+HGM1X-X280KO\", name=\"m2\", role=\"RotationalDeviceController\", softwareType=\"machine\", subType=\"centrifugal pumps\", supplier=\"hydrostal\", type=\"generic\", unit=\"m3/h\", uuid=\"null\"}"
+ },
+ "properties": [
+ {
+ "id": "custom.axisPlacement",
+ "value": "right"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "m3 ctrl {geoLocation_x=\"0\", geoLocation_y=\"0\", geoLocation_z=\"0\", id=\"b7cee587e61eeef4\", model=\"H05K-S03R+HGM1X-X280KO\", name=\"m3\", role=\"RotationalDeviceController\", softwareType=\"machine\", subType=\"centrifugal pumps\", supplier=\"hydrostal\", type=\"generic\", unit=\"m3/h\", uuid=\"null\"}"
+ },
+ "properties": [
+ {
+ "id": "custom.axisPlacement",
+ "value": "right"
+ }
+ ]
+ },
+ {
+ "__systemRef": "hideSeriesFrom",
+ "matcher": {
+ "id": "byNames",
+ "options": {
+ "mode": "exclude",
+ "names": [
+ "m1 ctrl {geoLocation_x=\"0\", geoLocation_y=\"0\", geoLocation_z=\"0\", id=\"b1226bbc99239bc5\", model=\"H05K-S03R+HGM1X-X280KO\", name=\"m1\", role=\"RotationalDeviceController\", softwareType=\"machine\", subType=\"centrifugal pumps\", supplier=\"hydrostal\", type=\"generic\", unit=\"m3/h\", uuid=\"null\"}"
+ ],
+ "prefix": "All except:",
+ "readOnly": true
+ }
+ },
+ "properties": [
+ {
+ "id": "custom.hideFrom",
+ "value": {
+ "legend": false,
+ "tooltip": false,
+ "viz": true
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 11,
+ "w": 24,
+ "x": 0,
+ "y": 76
+ },
+ "id": 13,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r._field == \"ctrl\" and \n (r._measurement == \"m1\" or \n r._measurement == \"m2\" or \n r._measurement == \"m3\" or \n r._measurement == \"m4\" or \n r._measurement == \"m5\" or \n r._measurement == \"m6\")\n )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "",
+ "refId": "B"
+ }
+ ],
+ "title": "Control",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "fieldMinMax": false,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 10
+ },
+ {
+ "color": "#EAB839",
+ "value": 20
+ },
+ {
+ "color": "yellow",
+ "value": 80
+ },
+ {
+ "color": "red",
+ "value": 90
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 12,
+ "w": 12,
+ "x": 0,
+ "y": 87
+ },
+ "id": 18,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => ( r._measurement==\"m1\" or r._measurement==\"m2\" or r._measurement==\"m3\" or r._measurement==\"mG1\" ) and ( r._field==\"downstream_predicted_flow\") )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "mG1 flow",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "fieldMinMax": false,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 10
+ },
+ {
+ "color": "#EAB839",
+ "value": 20
+ },
+ {
+ "color": "yellow",
+ "value": 80
+ },
+ {
+ "color": "red",
+ "value": 90
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 12,
+ "w": 12,
+ "x": 12,
+ "y": 87
+ },
+ "id": 20,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => ( r._measurement==\"m4\" or r._measurement==\"m5\" or r._measurement==\"m6\" or r._measurement==\"mG2\" ) and (r._field==\"downstream_predicted_flow\") )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "mG2 flow",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "fieldMinMax": false,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 10
+ },
+ {
+ "color": "#EAB839",
+ "value": 20
+ },
+ {
+ "color": "yellow",
+ "value": 80
+ },
+ {
+ "color": "red",
+ "value": 90
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "__systemRef": "hideSeriesFrom",
+ "matcher": {
+ "id": "byNames",
+ "options": {
+ "mode": "exclude",
+ "names": [
+ "mG2 downstream_predicted_flow {geoLocation=\"undefined\", id=\"07ec60b7b7c17582\", model=\"undefined\", name=\"mG2\", role=\"GroupController\", softwareType=\"machineGroup\", subType=\"undefined\", supplier=\"undefined\", type=\"undefined\", unit=\"undefined\", uuid=\"undefined\"}",
+ "mG1 downstream_predicted_flow {geoLocation=\"undefined\", id=\"eb9bc2362e755b9e\", model=\"undefined\", name=\"mG1\", role=\"GroupController\", softwareType=\"machineGroup\", subType=\"undefined\", supplier=\"undefined\", type=\"undefined\", unit=\"undefined\", uuid=\"undefined\"}"
+ ],
+ "prefix": "All except:",
+ "readOnly": true
+ }
+ },
+ "properties": [
+ {
+ "id": "custom.hideFrom",
+ "value": {
+ "legend": false,
+ "tooltip": false,
+ "viz": true
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 12,
+ "w": 24,
+ "x": 0,
+ "y": 99
+ },
+ "id": 21,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => ( r._measurement==\"m1\" or r._measurement==\"m2\" or r._measurement==\"m3\" or r._measurement==\"mG1\" ) and (r._field==\"downstream_predicted_flow\") )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn:(r) => ( r._measurement==\"m4\" or r._measurement==\"m5\" or r._measurement==\"m6\" or r._measurement==\"mG2\" ) and (r._field==\"downstream_predicted_flow\") )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "B"
+ }
+ ],
+ "title": "mG1 and mG2 Flow",
+ "type": "timeseries"
+ }
+ ],
+ "refresh": "10s",
+ "schemaVersion": 39,
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "selected": false,
+ "text": "influxdb",
+ "value": "influxdb"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "label": "dbase",
+ "multi": false,
+ "name": "dbase",
+ "options": [
+ {
+ "selected": true,
+ "text": "influxdb",
+ "value": "influxdb"
+ }
+ ],
+ "query": "influxdb",
+ "queryValue": "",
+ "skipUrlSync": false,
+ "type": "custom"
+ },
+ {
+ "current": {
+ "selected": true,
+ "text": "> mG1",
+ "value": "mG1"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "label": "",
+ "multi": false,
+ "name": "measurement",
+ "options": [
+ {
+ "selected": false,
+ "text": "template",
+ "value": "template"
+ }
+ ],
+ "query": "template",
+ "queryValue": "mG1",
+ "skipUrlSync": false,
+ "type": "custom"
+ },
+ {
+ "current": {
+ "selected": true,
+ "text": "> lvl2",
+ "value": "lvl2"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "multi": false,
+ "name": "bucket",
+ "options": [
+ {
+ "selected": false,
+ "text": "template",
+ "value": "template"
+ }
+ ],
+ "query": "template",
+ "queryValue": "lvl2",
+ "skipUrlSync": false,
+ "type": "custom"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-30m",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h"
+ ]
+ },
+ "timezone": "browser",
+ "title": "MultipleMachineGroups",
+ "uid": "eefi4duhkar5sd",
+ "version": 94,
+ "weekStart": ""
+ }
\ No newline at end of file
diff --git a/config/measurement.json b/config/measurement.json
new file mode 100644
index 0000000..c565bad
--- /dev/null
+++ b/config/measurement.json
@@ -0,0 +1,973 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0,255,255,1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "id": 14,
+ "links": [],
+ "panels": [
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 1,
+ "panels": [],
+ "title": "Machine Overview",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "align": "auto",
+ "cellOptions": {
+ "type": "auto"
+ },
+ "inspect": false
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 6,
+ "x": 0,
+ "y": 1
+ },
+ "id": 2,
+ "options": {
+ "cellHeight": "sm",
+ "footer": {
+ "countRows": false,
+ "fields": "",
+ "reducer": [
+ "sum"
+ ],
+ "show": false
+ },
+ "frameIndex": 2,
+ "showHeader": false
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: -1y) // Adjust time range as needed\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"state\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Machine State",
+ "type": "table"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "align": "auto",
+ "cellOptions": {
+ "type": "auto"
+ },
+ "inspect": false
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 6,
+ "x": 6,
+ "y": 1
+ },
+ "id": 4,
+ "options": {
+ "cellHeight": "sm",
+ "footer": {
+ "countRows": false,
+ "fields": "",
+ "reducer": [
+ "sum"
+ ],
+ "show": false
+ },
+ "frameIndex": 1,
+ "showHeader": false
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: -1y) // Adjust time range as needed\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"mode\")\n |> sort(columns: [\"_time\"], desc: true)\n |> limit(n: 1)",
+ "refId": "A"
+ }
+ ],
+ "title": "Machine Mode",
+ "type": "table"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 5
+ },
+ "id": 5,
+ "panels": [],
+ "title": "Measurements",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "displayName": "pressure",
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 6,
+ "x": 0,
+ "y": 6
+ },
+ "id": 6,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"upstream_measured_pressure\" or r._field==\"upstream_predicted_pressure\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Upstream pressure",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 10,
+ "w": 5,
+ "x": 6,
+ "y": 6
+ },
+ "id": 15,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"differential_measured_pressure\" )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Differential pressure",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 10,
+ "w": 6,
+ "x": 11,
+ "y": 6
+ },
+ "id": 16,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and ( r._field==\"upstream_measured_power\" or r._field==\"upstream_predicted_power\" ) )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Power",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 10,
+ "w": 7,
+ "x": 17,
+ "y": 6
+ },
+ "id": 14,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and ( r._field==\"downstream_measured_flow\" or r._field==\"downstream_predicted_flow\") )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Flow",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "fixed"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "dashed"
+ }
+ },
+ "decimals": 2,
+ "displayName": "pressure",
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 1500
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 6,
+ "x": 0,
+ "y": 11
+ },
+ "id": 7,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"downstream_measured_pressure\" or r._field==\"downstream_predicted_pressure\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Downstream pressure",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "Flow / Power",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": true,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 13,
+ "w": 24,
+ "x": 0,
+ "y": 16
+ },
+ "id": 17,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and ( r._field==\"downstream_measured_efficiency\" or r._field==\"downstream_predicted_efficiency\") )\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Efficiency",
+ "type": "timeseries"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 29
+ },
+ "id": 10,
+ "panels": [],
+ "title": "Machine control",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "decimals": 2,
+ "fieldMinMax": false,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 10
+ },
+ {
+ "color": "#EAB839",
+ "value": 20
+ },
+ {
+ "color": "yellow",
+ "value": 80
+ },
+ {
+ "color": "red",
+ "value": 90
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "__systemRef": "hideSeriesFrom",
+ "matcher": {
+ "id": "byNames",
+ "options": {
+ "mode": "exclude",
+ "names": [
+ "position {geoLocation_x=\"0\", geoLocation_y=\"0\", geoLocation_z=\"0\", id=\"b1226bbc99239bc5\", model=\"H05K-S03R+HGM1X-X280KO\", name=\"m1\", role=\"RotationalDeviceController\", softwareType=\"machine\", subType=\"centrifugal pumps\", supplier=\"hydrostal\", type=\"generic\", unit=\"m3/h\", uuid=\"null\"}"
+ ],
+ "prefix": "All except:",
+ "readOnly": true
+ }
+ },
+ "properties": []
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 11,
+ "w": 24,
+ "x": 0,
+ "y": 30
+ },
+ "id": 13,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "8.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn:(r) => r._measurement==\"${measurement}\" and r._field==\"ctrl\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ }
+ ],
+ "title": "Control",
+ "type": "timeseries"
+ }
+ ],
+ "refresh": "10s",
+ "schemaVersion": 39,
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "selected": false,
+ "text": "influxdb",
+ "value": "influxdb"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "label": "dbase",
+ "multi": false,
+ "name": "dbase",
+ "options": [
+ {
+ "selected": true,
+ "text": "influxdb",
+ "value": "influxdb"
+ }
+ ],
+ "query": "influxdb",
+ "queryValue": "",
+ "skipUrlSync": false,
+ "type": "custom"
+ },
+ {
+ "current": {
+ "selected": false,
+ "text": "template",
+ "value": "template"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "label": "",
+ "multi": false,
+ "name": "measurement",
+ "options": [
+ {
+ "selected": true,
+ "text": "template",
+ "value": "template"
+ }
+ ],
+ "query": "template",
+ "queryValue": "",
+ "skipUrlSync": false,
+ "type": "custom"
+ },
+ {
+ "current": {
+ "selected": false,
+ "text": "template",
+ "value": "template"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "multi": false,
+ "name": "bucket",
+ "options": [
+ {
+ "selected": true,
+ "text": "template",
+ "value": "template"
+ }
+ ],
+ "query": "template",
+ "skipUrlSync": false,
+ "type": "custom"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-15m",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h"
+ ]
+ },
+ "timezone": "browser",
+ "title": "template",
+ "uid": "test",
+ "version": 8,
+ "weekStart": ""
+}
\ No newline at end of file
diff --git a/config/monster.json b/config/monster.json
new file mode 100644
index 0000000..af7b620
--- /dev/null
+++ b/config/monster.json
@@ -0,0 +1,2682 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "id": 4,
+ "links": [],
+ "panels": [
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 2,
+ "panels": [],
+ "title": "Realtime values",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "#818c99",
+ "value": null
+ }
+ ]
+ },
+ "unit": "dateTimeAsSystem"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 20,
+ "x": 0,
+ "y": 1
+ },
+ "id": 37,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "area",
+ "justifyMode": "center",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "/^nextDate \\{aquon_name=\"112100\", location=\"rwzi_dongemond\"\\}$/",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"nextDate\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Next sample",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#282e44",
+ "mode": "fixed"
+ },
+ "mappings": [
+ {
+ "options": {
+ "false": {
+ "color": "#552d2d",
+ "index": 0,
+ "text": "False"
+ },
+ "true": {
+ "color": "#336533",
+ "index": 1,
+ "text": "True"
+ }
+ },
+ "type": "value"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "#818c99",
+ "value": null
+ }
+ ]
+ },
+ "unit": "bool"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 20,
+ "x": 0,
+ "y": 5
+ },
+ "id": 6,
+ "options": {
+ "colorMode": "background",
+ "graphMode": "none",
+ "justifyMode": "center",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "/.*/",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -30d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"running\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Sampling active",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "#818c99",
+ "value": null
+ }
+ ]
+ },
+ "unit": "days"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 5,
+ "x": 0,
+ "y": 9
+ },
+ "id": 8,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "area",
+ "justifyMode": "center",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"daysPerYear\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Sampling days left",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "#818c99",
+ "value": null
+ }
+ ]
+ },
+ "unit": "dateTimeFromNow"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 5,
+ "x": 5,
+ "y": 9
+ },
+ "id": 9,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "area",
+ "justifyMode": "center",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "/^nextDate \\{aquon_name=\"112100\", location=\"rwzi_dongemond\"\\}$/",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"nextDate\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Timeleft before next sample",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "#818c99",
+ "value": null
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 5,
+ "x": 10,
+ "y": 9
+ },
+ "id": 10,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "area",
+ "justifyMode": "center",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"timePassed\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Running time",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "#818c99",
+ "value": null
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 5,
+ "x": 15,
+ "y": 9
+ },
+ "id": 11,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "area",
+ "justifyMode": "center",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"timeLeft\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Time left",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-GrYlRd"
+ },
+ "mappings": [],
+ "max": 19.7,
+ "min": 5,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "litre"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 10,
+ "x": 0,
+ "y": 14
+ },
+ "id": 4,
+ "options": {
+ "displayMode": "lcd",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"bucketVol\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Current bucket volume",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-GrYlRd"
+ },
+ "mappings": [],
+ "max": 25,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "lengthmm"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 10,
+ "x": 10,
+ "y": 14
+ },
+ "id": 13,
+ "options": {
+ "displayMode": "lcd",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"sumRainNeg24\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Summed Actual -24h rain",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-GrYlRd"
+ },
+ "mappings": [],
+ "max": 23,
+ "min": 5,
+ "noValue": "-",
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "masskg"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 10,
+ "x": 0,
+ "y": 17
+ },
+ "id": 30,
+ "options": {
+ "displayMode": "lcd",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"bucketWeight\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Total weight",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-GrYlRd"
+ },
+ "mappings": [],
+ "max": 25,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "lengthmm"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 10,
+ "x": 10,
+ "y": 17
+ },
+ "id": 12,
+ "options": {
+ "displayMode": "lcd",
+ "maxVizHeight": 300,
+ "minVizHeight": 16,
+ "minVizWidth": 8,
+ "namePlacement": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showUnfilled": true,
+ "sizing": "auto",
+ "valueMode": "color"
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"sumRainPos24\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Summed Predicted +24h rain",
+ "transparent": true,
+ "type": "bargauge"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 15,
+ "x": 0,
+ "y": 20
+ },
+ "id": 19,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "none",
+ "justifyMode": "center",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"sumPuls\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Actual number of pulses",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "noValue": "-",
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 12,
+ "w": 5,
+ "x": 15,
+ "y": 20
+ },
+ "id": 1,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"m3PerPuls\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "m3/puls",
+ "transparent": true,
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 5,
+ "x": 0,
+ "y": 26
+ },
+ "id": 21,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"minPuls\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Minimum number of pulses",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#4f6483",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 5,
+ "x": 5,
+ "y": 26
+ },
+ "id": 20,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"targetPuls\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Target number of pulses",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 5,
+ "x": 10,
+ "y": 26
+ },
+ "id": 22,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"maxPuls\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Maximum number of pulses",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 5,
+ "x": 0,
+ "y": 32
+ },
+ "id": 27,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"minVolume\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Minimum volume",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#4f6483",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 5,
+ "x": 5,
+ "y": 32
+ },
+ "id": 28,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"targetVolume\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Target Volume",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "Taking into account the own weight of the bucket",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 5,
+ "x": 10,
+ "y": 32
+ },
+ "id": 29,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"maxVolume\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Maximum volume",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 5,
+ "x": 15,
+ "y": 32
+ },
+ "id": 31,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -1y)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"emptyWeightBucket\" )\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Weight of bucket",
+ "type": "stat"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 38
+ },
+ "id": 3,
+ "panels": [],
+ "title": "Historic values",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "fillOpacity": 80,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineWidth": 1,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "dark-yellow"
+ },
+ {
+ "color": "semi-dark-green",
+ "value": 5
+ },
+ {
+ "color": "semi-dark-red",
+ "value": 15
+ }
+ ]
+ },
+ "unit": "litre"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 39
+ },
+ "id": 5,
+ "options": {
+ "barRadius": 0,
+ "barWidth": 0.9,
+ "fullHighlight": true,
+ "groupWidth": 0.7,
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "orientation": "auto",
+ "showValue": "always",
+ "stacking": "none",
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ },
+ "xTickLabelRotation": 90,
+ "xTickLabelSpacing": 0
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"bucketVol\" )\r\n |> sample(n:5)",
+ "refId": "A"
+ }
+ ],
+ "title": "Historical bucket volume",
+ "type": "barchart"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "dashed"
+ }
+ },
+ "fieldMinMax": false,
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ },
+ "unit": "flowcms"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 39
+ },
+ "id": 7,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"qm3sec\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "lastValue = from(bucket: \"monster\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"Monsternamekast1\" and r._field == \"predM3PerSec\")\r\n |> last()\r\n |> findRecord(fn: (key) => true, idx: 0) // Get the last record\r\n\r\nfrom(bucket: \"monster\")\r\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"Monsternamekast1\" and r._field == \"predM3PerSec\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: true) // Create regular time windows\r\n |> map(fn: (r) => ({\r\n _time: r._time,\r\n predM3PerSec: lastValue._value\r\n }))",
+ "refId": "B"
+ }
+ ],
+ "title": "Actual and predicted m3/s",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-GrYlRd"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 20,
+ "gradientMode": "scheme",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "smooth",
+ "lineWidth": 3,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "max": 1.5,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 48
+ },
+ "id": 32,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "hidden",
+ "placement": "right",
+ "showLegend": false
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"qm3sec\" )\r\n |> aggregateWindow(every: 1m, fn: mean, createEmpty: true) // Optional: aggregate to 1 minute intervals first\r\n |> movingAverage(n: 60)\r\n |> sample(n:10)",
+ "refId": "A"
+ }
+ ],
+ "title": "m3/s moving average / h",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-GrYlRd"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 20,
+ "gradientMode": "scheme",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "smooth",
+ "lineWidth": 3,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "max": 1.5,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 48
+ },
+ "id": 35,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "hidden",
+ "placement": "right",
+ "showLegend": false
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"qm3sec\" )\r\n |> aggregateWindow(every: 1m, fn: mean, createEmpty: true)\r\n |> movingAverage(n: 180)\r\n |> sample(n:10)\r\n",
+ "refId": "A"
+ }
+ ],
+ "title": "m3/s moving average / 3h",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "fillOpacity": 87,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineWidth": 1,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "fieldMinMax": false,
+ "mappings": [],
+ "max": 20,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ },
+ "unit": "lengthmm"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "predFlow {aquon_name=\"112100\", location=\"rwzi_dongemond\"}"
+ },
+ "properties": [
+ {
+ "id": "custom.axisPlacement",
+ "value": "right"
+ },
+ {
+ "id": "unit",
+ "value": "m3"
+ },
+ {
+ "id": "max",
+ "value": 130000
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "qm3sec {aquon_name=\"112100\", location=\"rwzi_dongemond\"}"
+ },
+ "properties": [
+ {
+ "id": "custom.axisPlacement",
+ "value": "right"
+ },
+ {
+ "id": "unit",
+ "value": "m3"
+ },
+ {
+ "id": "max"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 57
+ },
+ "id": 16,
+ "options": {
+ "barRadius": 0,
+ "barWidth": 1,
+ "fullHighlight": true,
+ "groupWidth": 0.72,
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "orientation": "auto",
+ "showValue": "auto",
+ "stacking": "none",
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ },
+ "xTickLabelRotation": 0,
+ "xTickLabelSpacing": 0
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"sumRainPos24\" or r._measurement == \"${measurement}\"and r._field == \"sumRainNeg24\" )",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"predFlow\")",
+ "refId": "B"
+ }
+ ],
+ "title": "Rain -+24h",
+ "transparent": true,
+ "type": "barchart"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-GrYlRd"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 20,
+ "gradientMode": "scheme",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "smooth",
+ "lineWidth": 3,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "max": 1.5,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 57
+ },
+ "id": 33,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "hidden",
+ "placement": "right",
+ "showLegend": false
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"qm3sec\" )\r\n |> aggregateWindow(every: 1h, fn: mean, createEmpty: true) \r\n |> movingAverage(n: 24)",
+ "refId": "A"
+ }
+ ],
+ "title": "m3/s moving average / day",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "stepAfter",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "max": 130000,
+ "noValue": "-",
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ },
+ "unit": "m3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 66
+ },
+ "id": 14,
+ "options": {
+ "legend": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"m3Total\" )\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"monster\")\r\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"Monsternamekast1\" and r._field == \"predFlow\")",
+ "refId": "B"
+ }
+ ],
+ "title": "Predicted m3 total vs accumalated m3",
+ "transparent": true,
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-GrYlRd"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "fillOpacity": 80,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineWidth": 1,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 66
+ },
+ "id": 34,
+ "options": {
+ "barRadius": 0.05,
+ "barWidth": 1,
+ "fullHighlight": true,
+ "groupWidth": 0.7,
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "orientation": "auto",
+ "showValue": "auto",
+ "stacking": "none",
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ },
+ "xTickLabelRotation": 0,
+ "xTickLabelSpacing": 0
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field ==\"m3Total\")\r\n |> timeShift(duration: -6h) \r\n |> window(every: 24h) \r\n |> last() \r\n |> filter(fn: (r) => r._value != 0)\r\n |> timeShift(duration: 6h) ",
+ "refId": "B"
+ }
+ ],
+ "title": "total m3 per day",
+ "type": "barchart"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 75
+ },
+ "id": 23,
+ "panels": [],
+ "title": "Past values",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "Before ending the cycle what was last known value.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "noValue": "-",
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ },
+ "unit": "litre"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 5,
+ "x": 0,
+ "y": 76
+ },
+ "id": 26,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"bucketVol\" )\r\n |> filter(fn: (r) => r._value > 0)\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Last known bucket volume",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "Before ending the cycle what was last known value.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "noValue": "-",
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 5,
+ "x": 5,
+ "y": 76
+ },
+ "id": 36,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"m3PerPuls\" )\r\n |> filter(fn: (r) => r._value > 0)\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Last known total m3/pulse",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "Before ending the cycle what was last known value.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ },
+ "unit": "m3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 5,
+ "x": 10,
+ "y": 76
+ },
+ "id": 25,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"m3Total\" )\r\n |> filter(fn: (r) => r._value > 0)\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Last known total m3",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "Before ending the cycle what was last known value.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "#2b3146",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ }
+ ]
+ },
+ "unit": "m3"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 5,
+ "x": 15,
+ "y": 76
+ },
+ "id": 24,
+ "options": {
+ "colorMode": "background_solid",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: -60d)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"predFlow\" )\r\n |> filter(fn: (r) => r._value > 0)\r\n |> last()",
+ "refId": "A"
+ }
+ ],
+ "title": "Last known predicted flow over 24h",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 24,
+ "x": 0,
+ "y": 82
+ },
+ "id": 39,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "hide": false,
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field ==\"m3Total\")\r\n\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)",
+ "refId": "B"
+ }
+ ],
+ "title": "total m3 per day",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "default": true,
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "barWidthFactor": 0.6,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 12,
+ "w": 24,
+ "x": 0,
+ "y": 91
+ },
+ "id": 18,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "11.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "influxdb",
+ "uid": "cdzg44tv250jkd"
+ },
+ "query": "from(bucket: \"${bucket}\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r._field == \"precipationRaw\" )\r\n |> filter(fn: (r) => r.latitude == 51.592 and r.longitude == 4.93)",
+ "refId": "A"
+ }
+ ],
+ "title": "Predicted m3 total vs accumalated m3",
+ "transparent": true,
+ "type": "timeseries"
+ }
+ ],
+ "refresh": "30s",
+ "schemaVersion": 39,
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "selected": false,
+ "text": "influxdb",
+ "value": "influxdb"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "label": "dbase",
+ "multi": false,
+ "name": "dbase",
+ "options": [
+ {
+ "selected": true,
+ "text": "influxdb",
+ "value": "influxdb"
+ }
+ ],
+ "query": "influxdb",
+ "queryValue": "",
+ "skipUrlSync": false,
+ "type": "custom"
+ },
+ {
+ "current": {
+ "selected": false,
+ "text": "Monsternamekast1",
+ "value": "Monsternamekast1"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "label": "",
+ "multi": false,
+ "name": "measurement",
+ "options": [
+ {
+ "selected": true,
+ "text": "Monsternamekast1",
+ "value": "Monsternamekast1"
+ }
+ ],
+ "query": "Monsternamekast1",
+ "queryValue": "",
+ "skipUrlSync": false,
+ "type": "custom"
+ },
+ {
+ "current": {
+ "selected": false,
+ "text": "monster",
+ "value": "monster"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "multi": false,
+ "name": "bucket",
+ "options": [
+ {
+ "selected": true,
+ "text": "monster",
+ "value": "monster"
+ }
+ ],
+ "query": "monster",
+ "skipUrlSync": false,
+ "type": "custom"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-7d",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "10s",
+ "30s",
+ "5m",
+ "15m",
+ "30m",
+ "1h",
+ "2h",
+ "1d",
+ "2d",
+ "3d",
+ "4d",
+ "5d",
+ "6d",
+ "7d"
+ ]
+ },
+ "timezone": "browser",
+ "title": "Monster",
+ "uid": "fdzjc5mslrpq8d",
+ "version": 139,
+ "weekStart": ""
+}
\ No newline at end of file
diff --git a/dashboardapi.html b/dashboardapi.html
new file mode 100644
index 0000000..4336a25
--- /dev/null
+++ b/dashboardapi.html
@@ -0,0 +1,149 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dashboardapi.js b/dashboardapi.js
new file mode 100644
index 0000000..e10747a
--- /dev/null
+++ b/dashboardapi.js
@@ -0,0 +1,108 @@
+module.exports = function (RED) {
+ function dashboardapi(config) {
+ // create node
+ RED.nodes.createNode(this, config);
+
+ //call this => node so whenver you want to call a node function type node and the function behind it
+ var node = this;
+
+ try {
+ //fetch obj
+ const Dashboardapi = require("./dependencies/dashboardapi/dashboardapi_class");
+
+ //load user defined config in the node-red UI
+ const dConfig = {
+ general: {
+ name: config.name,
+ id: node.id,
+ logging: {
+ logLevel: config.logLevel,
+ enabled: config.enableLog,
+ },
+ },
+ grafanaConnector: {
+ host: config.host,
+ port: config.port,
+ bearerToken: config.bearerToken,
+ },
+ };
+
+ //make new measurement on creation to work with.
+ const d = new Dashboardapi(dConfig);
+
+ // put m on node memory as source
+ node.source = d;
+
+ function updateNodeStatus(val) {
+ if (val && val.grafanaResponse) {
+ // Check for a successful response from the Grafana API call
+ if (val.grafanaResponse.status === 200) {
+ node.status({
+ fill: "green",
+ shape: "dot",
+ text: "Grafana API: Success",
+ });
+ node.log("Grafana API call completed successfully.");
+ } else {
+ node.status({
+ fill: "red",
+ shape: "ring",
+ text: "Grafana API: Error",
+ });
+ node.error(
+ "Grafana API call failed with status: " +
+ val.grafanaResponse.status
+ );
+ }
+ }
+ }
+
+ //-------------------------------------------------------------------->>what to do on input
+ node.on("input", async function (msg, send, done) {
+ try {
+ switch(msg.topic) {
+ //on start make dashboard
+ case 'registerChild':
+
+ const childId = msg.payload;
+ const childObj = RED.nodes.getNode(childId);
+ if (!childObj || !childObj.source) {
+ throw new Error("Missing or invalid child node");
+ }
+ const child = childObj.source;
+
+ msg.payload = await d.generateDashB(child.config);
+
+ msg.topic = "create";
+ msg.headers = {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Bearer glsa_gI7fOMEd844p1gZt9iaDeEFpeYtejRj7_cf1c41f8'// + config.bearerToken
+ };
+
+ console.log(`Child registered: ${childId}`);
+ send(msg);
+
+ break;
+ }
+
+ done();
+ } catch (err) {
+ node.status({ fill: "red", shape: "ring", text: "Bad request data" });
+ node.error("Bad request data: " + err.message, msg);
+ done(err);
+ }
+ });
+
+ // tidy up any async code here - shutdown connections and so on.
+ node.on("close", function () {
+
+ });
+
+ } catch (e) {
+ console.log(e);
+ }
+ }
+
+ RED.nodes.registerType("dashboardapi", dashboardapi);
+};
diff --git a/dependencies/dashboardapi/dashboardapiConfig.json b/dependencies/dashboardapi/dashboardapiConfig.json
new file mode 100644
index 0000000..3d32ae0
--- /dev/null
+++ b/dependencies/dashboardapi/dashboardapiConfig.json
@@ -0,0 +1,130 @@
+{
+ "general": {
+ "name": {
+ "default": "dashboardapi",
+ "rules": {
+ "type": "string",
+ "description": "A human-readable name or label."
+ }
+ },
+ "id": {
+ "default": null,
+ "rules": {
+ "type": "string",
+ "nullable": true,
+ "description": "A unique identifier for this configuration. If not provided, defaults to null."
+ }
+ },
+ "unit": {
+ "default": "N/A",
+ "rules": {
+ "type": "string",
+ "description": "The default measurement unit for this configuration (e.g., 'meters', 'seconds', 'unitless')."
+ }
+ },
+ "logging": {
+ "logLevel": {
+ "default": "info",
+ "rules": {
+ "type": "enum",
+ "values": [
+ {
+ "value": "debug",
+ "description": "Log messages are printed for debugging purposes."
+ },
+ {
+ "value": "info",
+ "description": "Informational messages are printed."
+ },
+ {
+ "value": "warn",
+ "description": "Warning messages are printed."
+ },
+ {
+ "value": "error",
+ "description": "Error messages are printed."
+ }
+ ]
+ }
+ },
+ "enabled": {
+ "default": true,
+ "rules": {
+ "type": "boolean",
+ "description": "Indicates whether logging is active. If true, log messages will be generated."
+ }
+ }
+ }
+ },
+ "functionality": {
+ "softwareType": {
+ "default": "dashboardapi",
+ "rules": {
+ "type": "string",
+ "description": "Specified software type for this configuration."
+ }
+ },
+ "role": {
+ "default": "auto ui generator",
+ "rules": {
+ "type": "string",
+ "description": "Indicates the role this configuration plays within the system."
+ }
+ }
+ },
+ "grafanaConnector": {
+ "host": {
+ "default": "localhost",
+ "rules": {
+ "type": "string",
+ "description": "The host name or IP address of the server."
+ }
+ },
+ "port": {
+ "default": 3000,
+ "rules": {
+ "type": "integer",
+ "description": "The port number on which the server is listening."
+ }
+ },
+ "protocol": {
+ "default": "http",
+ "rules": {
+ "type": "string",
+ "description": "The protocol used to communicate with the server."
+ }
+ },
+ "header": {
+ "default": {},
+ "rules": {
+ "type": "object",
+ "schema":{
+ "Accept": {
+ "default": "application/json",
+ "rules": {
+ "type": "string",
+ "description": "Specifies the expected response format for requests using this header."
+ }
+ },
+ "Content-Type":{
+ "default": "application/json",
+ "rules": {
+ "type": "string",
+ "description": "Specifies the MIME type of the content."
+ }
+ }
+ },
+ "description": "The header object to be sent with the request."
+ }
+ },
+ "bearerToken": {
+ "default": null,
+ "rules": {
+ "type": "string",
+ "nullable": true,
+ "description": "The bearer token to be sent with the request."
+ }
+ }
+ }
+}
+
\ No newline at end of file
diff --git a/dependencies/dashboardapi/dashboardapi_class.js b/dependencies/dashboardapi/dashboardapi_class.js
new file mode 100644
index 0000000..0fa0adc
--- /dev/null
+++ b/dependencies/dashboardapi/dashboardapi_class.js
@@ -0,0 +1,183 @@
+/**
+ * @file dashboardapi_class.js
+ *
+ * Permission is hereby granted to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to use it for personal
+ * or non-commercial purposes, with the following restrictions:
+ *
+ * 1. **No Copying or Redistribution**: The Software or any of its parts may not
+ * be copied, merged, distributed, sublicensed, or sold without explicit
+ * prior written permission from the author.
+ *
+ * 2. **Commercial Use**: Any use of the Software for commercial purposes requires
+ * a valid license, obtainable only with the explicit consent of the author.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM,
+ * OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Ownership of this code remains solely with the original author. Unauthorized
+ * use of this Software is strictly prohibited.
+ *
+ * @summary A class for generating dynamic dashboards for system monitoring.
+ * @description The Dashboardapi class facilitates the creation and customization
+ * of Grafana dashboards using JSON templates. It dynamically updates templating values
+ * based on provided measurement and bucket configurations, enabling seamless integration
+ * within monitoring environments.
+ * @module dashboardapi_class
+ * @exports Dashboardapi
+ * @version 0.1.0
+ * @since 0.1.0
+ *
+ * Author:
+ * - Rene De Ren
+ * Email:
+ * - rene@thegoldenbasket.nl
+ *
+ * Future Enhancements:
+ * - Incorporate additional dynamic templating capabilities.
+ * - Add support for more customization options within dashboard configurations.
+ */
+
+//A class to interact and manipulate sampling machines
+
+//load local dependencies
+const EventEmitter = require('events');
+const Logger = require('../../../generalFunctions/helper/logger');
+
+//load all config modules
+const defaultConfig = require('./dashboardapiConfig.json');
+const ConfigUtils = require('../../../generalFunctions/helper/configUtils');
+
+//load registration utility
+const ChildRegistrationUtils = require('../../../generalFunctions/helper/childRegistrationUtils');
+
+class Dashboardapi{
+ /*------------------- Construct and set vars -------------------*/
+ constructor(config={}){
+
+ // basic setup
+ this.emitter = new EventEmitter(); // Own EventEmitter
+ this.configUtils = new ConfigUtils(defaultConfig);
+ this.config = this.configUtils.initConfig(config);
+
+ this.child = {} ; // object to hold child information so we know on what to subscribe
+
+ // Init after config is set
+ this.logger = new Logger(this.config.general.logging.enabled, this.config.general.logging.logLevel, this.config.general.name);
+
+ }
+
+ //how to handle children like the pump on a machine group node? Do we duplicate the information or fetch the names of the registered children en connect them
+ //to the dashboard?
+ //this is a question that needs to be answered in the future.
+
+ /*------------------- FUNCTIONS -------------------*/
+ async getDashboard(softwareType){
+ try {
+ let response = await fetch(`http://localhost:1880/dashboardapi/config/${softwareType}.json`);
+ if (!response.ok) {
+ this.logger.error(`Failed to fetch dashboard template: ${response.statusText}`);
+ }
+ const jsonDashB = await response.json();
+ return jsonDashB;
+ } catch (error) {
+ this.logger.error(`Failed to fetch dashboard template: ${error.message}`);
+
+ }
+ }
+ //generate dashboards based on the childs connected
+ async generateDashB(config) {
+ //define file name
+ const softwareType = config.functionality.softwareType;
+ this.logger.debug(`Generating dashboard for ${softwareType}`);
+ const jsonDashB = await this.getDashboard(softwareType);
+
+ // Validate templating structure exists
+ if (!jsonDashB.templating ||
+ !Array.isArray(jsonDashB.templating.list) ||
+ jsonDashB.templating.list.length < 3) {
+ this.logger.error("Dashboard JSON templating structure is not as expected.");
+ throw new Error("Invalid dashboard template structure");
+ }
+
+ const bucketName = "lvl2";
+ const measurementName = config.general.name;
+
+ // Set properties for a new dashboard
+ jsonDashB.id = null;
+ jsonDashB.uid = null;
+ jsonDashB.title = measurementName;
+
+ // Update measurement placeholder (using index 1)
+ const measurementTpl = jsonDashB.templating.list[1];
+ measurementTpl.current.text = measurementName;
+ measurementTpl.current.value = measurementName;
+ if (Array.isArray(measurementTpl.options) && measurementTpl.options.length > 0) {
+ measurementTpl.options[0].text = measurementName;
+ measurementTpl.options[0].value = measurementName;
+ }
+ measurementTpl.query = measurementName;
+
+ // Update bucket placeholder (using index 2)
+ const bucketTpl = jsonDashB.templating.list[2];
+ bucketTpl.current.text = bucketName;
+ bucketTpl.current.value = bucketName;
+ if (Array.isArray(bucketTpl.options) && bucketTpl.options.length > 0) {
+ bucketTpl.options[0].text = bucketName;
+ bucketTpl.options[0].value = bucketName;
+ }
+ bucketTpl.query = bucketName;
+
+ const output = {
+ dashboard: jsonDashB,
+ folderId: 0,
+ overwrite: true
+ };
+
+ return output;
+ }
+
+} // end of class
+
+module.exports = Dashboardapi;
+
+/*
+//import a child
+const Child = require('../../../measurement/dependencies/measurement/measurement');
+//const Child = require('../../../rotatingMachine/dependencies/machine/machine');
+
+console.log(`Creating child...`);
+const child = new Child(config={
+ general:{
+ name:"PT1",
+ logging:{
+ enabled:true,
+ logLevel:"debug",
+ },
+ },
+ functionality:{
+ softwareType:"measurement",
+ },
+ asset:{
+ type:"sensor",
+ subType:"pressure",
+ },
+});
+
+const d = new Dashboardapi();
+
+testGen();
+
+function testGen(){
+ d.generateDashB(child.config).then((res)=>{
+ console.log(res);
+ });
+}
+
+
+//*/
\ No newline at end of file