From 7eecbddd19d19476e7a3280596369c6c4adefb3a Mon Sep 17 00:00:00 2001 From: "p.vanderwilt" Date: Fri, 28 Nov 2025 14:29:53 +0100 Subject: [PATCH] Add example flow --- example_flow/reactor_flows.json | 838 ++++++++++++++++++++++++++++++++ 1 file changed, 838 insertions(+) create mode 100644 example_flow/reactor_flows.json diff --git a/example_flow/reactor_flows.json b/example_flow/reactor_flows.json new file mode 100644 index 0000000..d41761b --- /dev/null +++ b/example_flow/reactor_flows.json @@ -0,0 +1,838 @@ +[ + { + "id": "a6b85e226d144df1", + "type": "tab", + "label": "Flow 3", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "a94c85d65c71b66a", + "type": "inject", + "z": "a6b85e226d144df1", + "name": "Influx composition 1", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + }, + { + "p": "timestamp", + "v": "", + "vt": "date" + } + ], + "repeat": "864", + "crontab": "", + "once": true, + "onceDelay": "5", + "topic": "Fluent", + "payload": "{\"inlet\":0,\"F\":6600,\"C\":[0,30,100,16,0,0,5,25,75,30,0,0,125]}", + "payloadType": "json", + "x": 260, + "y": 240, + "wires": [ + [ + "b726c5be41c24dcb" + ] + ] + }, + { + "id": "0ebfbbf57bba79f1", + "type": "inject", + "z": "a6b85e226d144df1", + "name": "", + "props": [ + { + "p": "timestamp", + "v": "", + "vt": "date" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "1", + "crontab": "", + "once": true, + "onceDelay": 0.1, + "topic": "clock", + "x": 300, + "y": 280, + "wires": [ + [ + "b726c5be41c24dcb" + ] + ] + }, + { + "id": "cd0e4a78d1a59a6e", + "type": "inject", + "z": "a6b85e226d144df1", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": true, + "onceDelay": 0.1, + "topic": "Dispersion", + "payload": "100", + "payloadType": "num", + "x": 260, + "y": 320, + "wires": [ + [ + "b726c5be41c24dcb", + "b0819ff9a4010227" + ] + ] + }, + { + "id": "b726c5be41c24dcb", + "type": "reactor", + "z": "a6b85e226d144df1", + "name": "Anoxic 1", + "reactor_type": "PFR", + "volume": "730", + "length": "10", + "resolution_L": "20", + "kla": "", + "S_O_init": 0, + "S_I_init": 30, + "S_S_init": 100, + "S_NH_init": 16, + "S_N2_init": 0, + "S_NO_init": 0, + "S_HCO_init": 5, + "X_I_init": 25, + "X_S_init": 75, + "X_H_init": 30, + "X_STO_init": 0, + "X_A_init": "30", + "X_TS_init": "132", + "timeStep": "2", + "enableLog": true, + "logLevel": "info", + "positionVsParent": "upstream", + "x": 540, + "y": 240, + "wires": [ + [ + "057ab2dcd4739aef" + ], + [], + [ + "b0819ff9a4010227", + "214aff7330e81d3f", + "2ec38c4ae9aa6e7e" + ] + ] + }, + { + "id": "b0819ff9a4010227", + "type": "reactor", + "z": "a6b85e226d144df1", + "name": "Aerobic 1", + "reactor_type": "PFR", + "volume": "1460", + "length": "20", + "resolution_L": "40", + "kla": "2400", + "S_O_init": 0, + "S_I_init": 30, + "S_S_init": 100, + "S_NH_init": 16, + "S_N2_init": 0, + "S_NO_init": 0, + "S_HCO_init": 5, + "X_I_init": 25, + "X_S_init": 75, + "X_H_init": "500", + "X_STO_init": 0, + "X_A_init": "30", + "X_TS_init": "132", + "timeStep": "2", + "enableLog": true, + "logLevel": "info", + "positionVsParent": "upstream", + "x": 940, + "y": 240, + "wires": [ + [ + "e0049d66fefeb3e6" + ], + [], + [ + "47120bc82aa7bf49" + ] + ] + }, + { + "id": "214aff7330e81d3f", + "type": "rotatingMachine", + "z": "a6b85e226d144df1", + "speed": 1, + "startup": 0, + "warmup": 0, + "shutdown": 0, + "cooldown": 0, + "machineCurve": {}, + "flowNumber": "1", + "uuid": "", + "supplier": "Hidrostal", + "category": "Pumps", + "assetType": "Centrifugal", + "model": "hidrostal-H05K-S03R", + "unit": "l/s", + "enableLog": true, + "logLevel": "info", + "positionVsParent": "downstream", + "positionIcon": "→", + "hasDistance": false, + "distance": "", + "x": 740, + "y": 340, + "wires": [ + [], + [], + [ + "b0819ff9a4010227" + ] + ] + }, + { + "id": "0be74d5c77febec1", + "type": "measurement", + "z": "a6b85e226d144df1", + "name": "sensor", + "scaling": false, + "i_min": 0, + "i_max": 0, + "i_offset": 0, + "o_min": 900, + "o_max": 1200, + "simulator": true, + "smooth_method": "", + "count": 10, + "uuid": "", + "supplier": "Vega", + "category": "Sensor", + "assetType": "Flow", + "model": "VegaFlow 10", + "unit": "m³/h", + "enableLog": true, + "logLevel": "error", + "positionVsParent": "atEquipment", + "positionIcon": "⊥", + "hasDistance": false, + "distance": "", + "x": 600, + "y": 460, + "wires": [ + [], + [], + [ + "214aff7330e81d3f" + ] + ] + }, + { + "id": "668f41a05698f21b", + "type": "inject", + "z": "a6b85e226d144df1", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": true, + "onceDelay": 0.1, + "topic": "execSequence", + "payload": "{\"source\":\"parent\",\"action\":\"execSequence\",\"parameter\":\"startup\"}", + "payloadType": "json", + "x": 330, + "y": 400, + "wires": [ + [ + "214aff7330e81d3f", + "2ec38c4ae9aa6e7e" + ] + ] + }, + { + "id": "47120bc82aa7bf49", + "type": "settler", + "z": "a6b85e226d144df1", + "name": "", + "model": "mb-model", + "enableLog": true, + "logLevel": "info", + "positionVsParent": "atEquipment", + "x": 1100, + "y": 400, + "wires": [ + [ + "b1af49d1d0eb6783", + "6baffb7954cf0cce" + ], + [], + [] + ] + }, + { + "id": "2ec38c4ae9aa6e7e", + "type": "rotatingMachine", + "z": "a6b85e226d144df1", + "speed": 1, + "startup": 0, + "warmup": 0, + "shutdown": 0, + "cooldown": 0, + "machineCurve": {}, + "flowNumber": "2", + "uuid": "", + "supplier": "Hidrostal", + "category": "Pumps", + "assetType": "Centrifugal", + "model": "hidrostal-H05K-S03R", + "unit": "l/s", + "enableLog": true, + "logLevel": "info", + "positionVsParent": "downstream", + "positionIcon": "→", + "hasDistance": false, + "distance": "", + "x": 860, + "y": 460, + "wires": [ + [], + [], + [ + "47120bc82aa7bf49" + ] + ] + }, + { + "id": "21eff612371519c5", + "type": "measurement", + "z": "a6b85e226d144df1", + "name": "sensor", + "scaling": false, + "i_min": 0, + "i_max": 0, + "i_offset": 0, + "o_min": 500, + "o_max": 660, + "simulator": true, + "smooth_method": "", + "count": 10, + "uuid": "", + "supplier": "Vega", + "category": "Sensor", + "assetType": "Flow", + "model": "VegaFlow 10", + "unit": "m³/h", + "enableLog": true, + "logLevel": "error", + "positionVsParent": "atEquipment", + "positionIcon": "⊥", + "hasDistance": false, + "distance": "", + "x": 720, + "y": 580, + "wires": [ + [], + [], + [ + "2ec38c4ae9aa6e7e" + ] + ] + }, + { + "id": "057ab2dcd4739aef", + "type": "function", + "z": "a6b85e226d144df1", + "name": "Data_converter", + "func": "if (msg.topic != \"Fluent\") {\n return;\n}\n\nconst [S_O, S_I, S_S, S_NH, S_N2, S_NO, S_HCO, X_I, X_S, X_H, X_STO, X_A, X_TS] = msg.payload.C;\n\nmsg = {payload: [\n { \"Series\": \"S_O\", \"Y\": S_O},\n { \"Series\": \"S_I\", \"Y\": S_I},\n { \"Series\": \"S_S\", \"Y\": S_S},\n { \"Series\": \"S_NH\", \"Y\": S_NH},\n { \"Series\": \"S_N2\", \"Y\": S_N2},\n { \"Series\": \"S_NO\", \"Y\": S_NO},\n { \"Series\": \"S_HCO\", \"Y\": S_HCO},\n { \"Series\": \"X_I\", \"Y\": X_I},\n { \"Series\": \"X_S\", \"Y\": X_S},\n { \"Series\": \"X_H\", \"Y\": X_H},\n { \"Series\": \"X_STO\", \"Y\": X_STO},\n { \"Series\": \"X_A\", \"Y\": X_A},\n { \"Series\": \"X_TS\", \"Y\": X_TS}\n ]};\n\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 720, + "y": 180, + "wires": [ + [ + "02a932317c76721e" + ] + ] + }, + { + "id": "02a932317c76721e", + "type": "ui-chart", + "z": "a6b85e226d144df1", + "group": "ae38454098a37db0", + "name": "Anoxic reactor", + "label": "Anoxic reactor", + "order": 9007199254740991, + "chartType": "line", + "category": "Series", + "categoryType": "property", + "xAxisLabel": "", + "xAxisProperty": "", + "xAxisPropertyType": "timestamp", + "xAxisType": "time", + "xAxisFormat": "", + "xAxisFormatType": "auto", + "xmin": "", + "xmax": "", + "yAxisLabel": "", + "yAxisProperty": "Y", + "yAxisPropertyType": "property", + "ymin": "", + "ymax": "", + "bins": 10, + "action": "append", + "stackSeries": false, + "pointShape": "circle", + "pointRadius": 4, + "showLegend": true, + "removeOlder": "8", + "removeOlderUnit": "3600", + "removeOlderPoints": "2000", + "colors": [ + "#0095ff", + "#ff0000", + "#ff7f0e", + "#2ca02c", + "#a347e1", + "#d62728", + "#ff9896", + "#9467bd", + "#c5b0d5" + ], + "textColor": [ + "#666666" + ], + "textColorDefault": true, + "gridColor": [ + "#e5e5e5" + ], + "gridColorDefault": true, + "width": 6, + "height": 8, + "className": "", + "interpolation": "linear", + "x": 920, + "y": 180, + "wires": [ + [] + ] + }, + { + "id": "e0049d66fefeb3e6", + "type": "function", + "z": "a6b85e226d144df1", + "name": "Data_converter", + "func": "if (msg.topic != \"Fluent\") {\n return;\n}\n\nconst [S_O, S_I, S_S, S_NH, S_N2, S_NO, S_HCO, X_I, X_S, X_H, X_STO, X_A, X_TS] = msg.payload.C;\n\nmsg = {payload: [\n { \"Series\": \"S_O\", \"Y\": S_O},\n { \"Series\": \"S_I\", \"Y\": S_I},\n { \"Series\": \"S_S\", \"Y\": S_S},\n { \"Series\": \"S_NH\", \"Y\": S_NH},\n { \"Series\": \"S_N2\", \"Y\": S_N2},\n { \"Series\": \"S_NO\", \"Y\": S_NO},\n { \"Series\": \"S_HCO\", \"Y\": S_HCO},\n { \"Series\": \"X_I\", \"Y\": X_I},\n { \"Series\": \"X_S\", \"Y\": X_S},\n { \"Series\": \"X_H\", \"Y\": X_H},\n { \"Series\": \"X_STO\", \"Y\": X_STO},\n { \"Series\": \"X_A\", \"Y\": X_A},\n { \"Series\": \"X_TS\", \"Y\": X_TS}\n ]};\n\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1140, + "y": 220, + "wires": [ + [ + "70eeb4c8caa2db77" + ] + ] + }, + { + "id": "70eeb4c8caa2db77", + "type": "ui-chart", + "z": "a6b85e226d144df1", + "group": "ae38454098a37db0", + "name": "Aerobic reactor", + "label": "Aerobic reactor / recirculation", + "order": 9007199254740991, + "chartType": "line", + "category": "Series", + "categoryType": "property", + "xAxisLabel": "", + "xAxisProperty": "", + "xAxisPropertyType": "timestamp", + "xAxisType": "time", + "xAxisFormat": "", + "xAxisFormatType": "auto", + "xmin": "", + "xmax": "", + "yAxisLabel": "", + "yAxisProperty": "Y", + "yAxisPropertyType": "property", + "ymin": "", + "ymax": "", + "bins": 10, + "action": "append", + "stackSeries": false, + "pointShape": "circle", + "pointRadius": 4, + "showLegend": true, + "removeOlder": "8", + "removeOlderUnit": "3600", + "removeOlderPoints": "2000", + "colors": [ + "#0095ff", + "#ff0000", + "#ff7f0e", + "#2ca02c", + "#a347e1", + "#d62728", + "#ff9896", + "#9467bd", + "#c5b0d5" + ], + "textColor": [ + "#666666" + ], + "textColorDefault": true, + "gridColor": [ + "#e5e5e5" + ], + "gridColorDefault": true, + "width": 6, + "height": 8, + "className": "", + "interpolation": "linear", + "x": 1340, + "y": 220, + "wires": [ + [] + ] + }, + { + "id": "b1af49d1d0eb6783", + "type": "function", + "z": "a6b85e226d144df1", + "name": "Data_converter", + "func": "if (msg.topic != \"Fluent\" || msg.payload.inlet == 0) {\n return;\n}\n\nconst [S_O, S_I, S_S, S_NH, S_N2, S_NO, S_HCO, X_I, X_S, X_H, X_STO, X_A, X_TS] = msg.payload.C;\n\nmsg = {payload: [\n { \"Series\": \"X_I\", \"Y\": X_I},\n { \"Series\": \"X_S\", \"Y\": X_S},\n { \"Series\": \"X_H\", \"Y\": X_H},\n { \"Series\": \"X_STO\", \"Y\": X_STO},\n { \"Series\": \"X_A\", \"Y\": X_A},\n { \"Series\": \"X_TS\", \"Y\": X_TS}\n ]};\n\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1320, + "y": 380, + "wires": [ + [ + "0a3ffa69046a4844" + ] + ] + }, + { + "id": "0a3ffa69046a4844", + "type": "ui-chart", + "z": "a6b85e226d144df1", + "group": "de8b029d69f26c0e", + "name": "Sludge composition", + "label": "Sludge composition", + "order": 9007199254740991, + "chartType": "line", + "category": "Series", + "categoryType": "property", + "xAxisLabel": "", + "xAxisProperty": "", + "xAxisPropertyType": "timestamp", + "xAxisType": "time", + "xAxisFormat": "", + "xAxisFormatType": "auto", + "xmin": "", + "xmax": "", + "yAxisLabel": "", + "yAxisProperty": "Y", + "yAxisPropertyType": "property", + "ymin": "", + "ymax": "", + "bins": 10, + "action": "append", + "stackSeries": false, + "pointShape": "circle", + "pointRadius": 4, + "showLegend": true, + "removeOlder": "8", + "removeOlderUnit": "3600", + "removeOlderPoints": "2000", + "colors": [ + "#0095ff", + "#ff0000", + "#ff7f0e", + "#2ca02c", + "#a347e1", + "#d62728", + "#ff9896", + "#9467bd", + "#c5b0d5" + ], + "textColor": [ + "#666666" + ], + "textColorDefault": true, + "gridColor": [ + "#e5e5e5" + ], + "gridColorDefault": true, + "width": 6, + "height": 8, + "className": "", + "interpolation": "linear", + "x": 1530, + "y": 380, + "wires": [ + [] + ] + }, + { + "id": "272b4b0050479d13", + "type": "measurement", + "z": "a6b85e226d144df1", + "name": "sensor", + "scaling": false, + "i_min": 0, + "i_max": 0, + "i_offset": 0, + "o_min": 3200, + "o_max": 4000, + "simulator": true, + "smooth_method": "", + "count": 10, + "uuid": "", + "supplier": "Vega", + "category": "Sensor", + "assetType": "Quantity (TSS)", + "model": "VegaSolidsProbe", + "unit": "g/m³", + "enableLog": true, + "logLevel": "error", + "positionVsParent": "atEquipment", + "positionIcon": "⊥", + "hasDistance": false, + "distance": "", + "x": 930, + "y": 580, + "wires": [ + [], + [], + [ + "47120bc82aa7bf49" + ] + ] + }, + { + "id": "6baffb7954cf0cce", + "type": "function", + "z": "a6b85e226d144df1", + "name": "Data_converter", + "func": "if (msg.topic != \"Fluent\" || msg.payload.inlet == 1 || msg.payload.inlet == 2) {\n return;\n}\n\nconst [S_O, S_I, S_S, S_NH, S_N2, S_NO, S_HCO, X_I, X_S, X_H, X_STO, X_A, X_TS] = msg.payload.C;\n\nmsg = {payload: [\n { \"Series\": \"S_O\", \"Y\": S_O},\n { \"Series\": \"S_I\", \"Y\": S_I},\n { \"Series\": \"S_S\", \"Y\": S_S},\n { \"Series\": \"S_NH\", \"Y\": S_NH},\n { \"Series\": \"S_N2\", \"Y\": S_N2},\n { \"Series\": \"S_NO\", \"Y\": S_NO},\n { \"Series\": \"S_HCO\", \"Y\": S_HCO}\n ]};\n\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1320, + "y": 420, + "wires": [ + [ + "df288814a2a9a2b1" + ] + ] + }, + { + "id": "df288814a2a9a2b1", + "type": "ui-chart", + "z": "a6b85e226d144df1", + "group": "de8b029d69f26c0e", + "name": "Effluent", + "label": "Effluent", + "order": 9007199254740991, + "chartType": "line", + "category": "Series", + "categoryType": "property", + "xAxisLabel": "", + "xAxisProperty": "", + "xAxisPropertyType": "timestamp", + "xAxisType": "time", + "xAxisFormat": "", + "xAxisFormatType": "auto", + "xmin": "", + "xmax": "", + "yAxisLabel": "", + "yAxisProperty": "Y", + "yAxisPropertyType": "property", + "ymin": "", + "ymax": "", + "bins": 10, + "action": "append", + "stackSeries": false, + "pointShape": "circle", + "pointRadius": 4, + "showLegend": true, + "removeOlder": "8", + "removeOlderUnit": "3600", + "removeOlderPoints": "2000", + "colors": [ + "#0095ff", + "#ff0000", + "#ff7f0e", + "#2ca02c", + "#a347e1", + "#d62728", + "#ff9896", + "#9467bd", + "#c5b0d5" + ], + "textColor": [ + "#666666" + ], + "textColorDefault": true, + "gridColor": [ + "#e5e5e5" + ], + "gridColorDefault": true, + "width": 6, + "height": 8, + "className": "", + "interpolation": "linear", + "x": 1520, + "y": 420, + "wires": [ + [] + ] + }, + { + "id": "ae38454098a37db0", + "type": "ui-group", + "name": "Group 3", + "page": "ca564642bfc5606c", + "width": 6, + "height": 1, + "order": -1, + "showTitle": true, + "className": "", + "visible": "true", + "disabled": "false", + "groupType": "default" + }, + { + "id": "de8b029d69f26c0e", + "type": "ui-group", + "name": "Group 4", + "page": "ca564642bfc5606c", + "width": 6, + "height": 1, + "order": -1, + "showTitle": true, + "className": "", + "visible": "true", + "disabled": "false", + "groupType": "default" + }, + { + "id": "ca564642bfc5606c", + "type": "ui-page", + "name": "PFR", + "ui": "90eb5f47d95b4087", + "path": "/page2", + "icon": "home", + "layout": "grid", + "theme": "2c8bcaa0046b4323", + "breakpoints": [ + { + "name": "Default", + "px": "0", + "cols": "3" + }, + { + "name": "Tablet", + "px": "576", + "cols": "6" + }, + { + "name": "Small Desktop", + "px": "768", + "cols": "9" + }, + { + "name": "Desktop", + "px": "1024", + "cols": "12" + } + ], + "order": -1, + "className": "", + "visible": "true", + "disabled": "false" + }, + { + "id": "90eb5f47d95b4087", + "type": "ui-base", + "name": "Dashboard", + "path": "/dashboard", + "appIcon": "", + "includeClientData": true, + "acceptsClientConfig": [ + "ui-notification", + "ui-control" + ], + "showPathInSidebar": false, + "headerContent": "page", + "navigationStyle": "default", + "titleBarStyle": "default", + "showReconnectNotification": true, + "notificationDisplayTime": 1, + "showDisconnectNotification": true, + "allowInstall": true + }, + { + "id": "2c8bcaa0046b4323", + "type": "ui-theme", + "name": "Default", + "colors": { + "surface": "#ffffff", + "primary": "#0094ce", + "bgPage": "#eeeeee", + "groupBg": "#ffffff", + "groupOutline": "#cccccc" + }, + "sizes": { + "density": "default", + "pagePadding": "12px", + "groupGap": "12px", + "groupBorderRadius": "4px", + "widgetGap": "12px" + } + } +] \ No newline at end of file