diff --git a/nodes/dashboardAPI b/nodes/dashboardAPI index 92d7eba..67a374f 160000 --- a/nodes/dashboardAPI +++ b/nodes/dashboardAPI @@ -1 +1 @@ -Subproject commit 92d7eba0fd18829fd1f8e7bf8a89af7b380c85c8 +Subproject commit 67a374ff4f76cbcc9c813ebd1fcb4255fe808845 diff --git a/nodes/diffuser b/nodes/diffuser index 15cfb22..9122b14 160000 --- a/nodes/diffuser +++ b/nodes/diffuser @@ -1 +1 @@ -Subproject commit 15cfb222b2c116850463a4d91707362cc58f0540 +Subproject commit 9122b14368573770538809a01657d23a3abb310a diff --git a/nodes/machineGroupControl b/nodes/machineGroupControl index bb2f3be..045a941 160000 --- a/nodes/machineGroupControl +++ b/nodes/machineGroupControl @@ -1 +1 @@ -Subproject commit bb2f3bea82ad7d3587ba76e90ec9c5ffb9afb305 +Subproject commit 045a941ab440684cce913d4cb3856ca29e69b51d diff --git a/nodes/measurement b/nodes/measurement index 42a0333..2aa8021 160000 --- a/nodes/measurement +++ b/nodes/measurement @@ -1 +1 @@ -Subproject commit 42a0333b7cbc9f890f918b1162d5d93db0b6a6d5 +Subproject commit 2aa80212e44ec44b0a0c013374b03385c8d3f040 diff --git a/nodes/monster b/nodes/monster index 2a6a0bc..2a82b7d 160000 --- a/nodes/monster +++ b/nodes/monster @@ -1 +1 @@ -Subproject commit 2a6a0bc34b17a066205198b1d15ac722f3edb2b9 +Subproject commit 2a82b7d7dc19c33fc24e03f847c8768f34d37a58 diff --git a/nodes/reactor b/nodes/reactor index 7bf464b..d931bea 160000 --- a/nodes/reactor +++ b/nodes/reactor @@ -1 +1 @@ -Subproject commit 7bf464b467c4261e1971dea7caea1ba8c7b0bb70 +Subproject commit d931bead0a849c6cd1d49777d7d000e9f7889e0a diff --git a/nodes/rotatingMachine b/nodes/rotatingMachine index e058fe9..9e8463b 160000 --- a/nodes/rotatingMachine +++ b/nodes/rotatingMachine @@ -1 +1 @@ -Subproject commit e058fe92450cf7caceba7e4b2b8c3ede5d293f6d +Subproject commit 9e8463b41db5aeb3bb85a2e1529590b085472bb6 diff --git a/nodes/settler b/nodes/settler index b8247fc..6953d64 160000 --- a/nodes/settler +++ b/nodes/settler @@ -1 +1 @@ -Subproject commit b8247fc7555583692314ecfe66a5adcb643c2991 +Subproject commit 6953d6473e36bc44718dda3e7708cd97ad808275 diff --git a/nodes/valve b/nodes/valve index e27135b..8aa5b5e 160000 --- a/nodes/valve +++ b/nodes/valve @@ -1 +1 @@ -Subproject commit e27135bdc441c86b73ff3c6aa665bf8bb12b7bc5 +Subproject commit 8aa5b5e23eab3f8ba391cdb6b2e06e06b47e6de9 diff --git a/nodes/valveGroupControl b/nodes/valveGroupControl index e02cd1a..c44d595 160000 --- a/nodes/valveGroupControl +++ b/nodes/valveGroupControl @@ -1 +1 @@ -Subproject commit e02cd1a7a70401d4f0ac387746df8ba12a4839a2 +Subproject commit c44d5959ad0836bcd88d998e6b6c969689a16758 diff --git a/wiki/Archive.md b/wiki/Archive.md new file mode 100644 index 0000000..0c9e0ce --- /dev/null +++ b/wiki/Archive.md @@ -0,0 +1,9 @@ +# Archive — pre-refactor wiki pages + +Pages kept for historical reference. **Do not update them.** Corrections go on the current page; if you find a meaningful inaccuracy in the archived page, leave it and add a note to the *current* page explaining what changed. + +| Page | Era | Archived on | +|---|---|---| +| _none yet_ | — | — | + +Each archived page carries the standard banner at its top (see `.claude/refactor/WIKI_TEMPLATE.md` → Archive banner). diff --git a/wiki/Home.md b/wiki/Home.md new file mode 100644 index 0000000..6b4c879 --- /dev/null +++ b/wiki/Home.md @@ -0,0 +1,101 @@ +# EVOLV — Wastewater treatment plant automation + +> **Reflects code as of `afc304b` · regenerated `2026-05-11` via `npm run wiki:home`** + +EVOLV is a Node-RED node library for wastewater plant automation, developed by the R&D team at Waterschap Brabantse Delta. Nodes follow the ISA-88 (S88) batch control standard. The library exposes 11 active nodes spanning four S88 levels — from Process Cell down to Control Module — plus one utility node for dashboard integration. + +## Platform overview + +```mermaid +flowchart TB + subgraph PC["Process Cell"] + ps[pumpingStation]:::pc + end + subgraph UN["Unit"] + mgc[machineGroupControl]:::unit + vgc[valveGroupControl]:::unit + reactor[reactor]:::unit + settler[settler]:::unit + monster[monster]:::unit + end + subgraph EM["Equipment"] + rm[rotatingMachine]:::equip + v[valve]:::equip + diff[diffuser]:::equip + end + subgraph CM["Control Module"] + meas[measurement]:::ctrl + end + subgraph UT["Utility"] + dash[dashboardAPI]:::neutral + end + ps --> mgc + ps --> vgc + mgc --> rm + vgc --> v + reactor --> diff + meas -.data.-> rm + meas -.data.-> v + meas -.data.-> reactor + meas -.data.-> settler + classDef pc fill:#0c99d9,color:#fff + classDef unit fill:#50a8d9,color:#000 + classDef equip fill:#86bbdd,color:#000 + classDef ctrl fill:#a9daee,color:#000 + classDef neutral fill:#dddddd,color:#000 +``` + +S88 colours: Process Cell `#0c99d9`, Unit `#50a8d9`, Equipment `#86bbdd`, Control Module `#a9daee`. Solid arrow = parent/child relationship. Dashed arrow = data flow (`measurement` feeds many node types). Source of truth: `.claude/rules/node-red-flow-layout.md` §14. + +## Live nodes + +| S88 | Node | One-liner | Wiki | +|---|---|---|---| +| Process Cell | **pumpingStation** | Manages a wet-well basin, hands demand to one or more group controllers. | [→](https://gitea.wbd-rd.nl/RnD/pumpingStation/wiki/Home) | +| Unit | **machineGroupControl** | Load-sharing across a group of rotatingMachines. | [→](https://gitea.wbd-rd.nl/RnD/machineGroupControl/wiki/Home) | +| Unit | **valveGroupControl** | Coordinated valve control across a group of valves. | [→](https://gitea.wbd-rd.nl/RnD/valveGroupControl/wiki/Home) | +| Unit | **reactor** | Bioreactor — couples diffuser + measurements + ASM kinetics. | [→](https://gitea.wbd-rd.nl/RnD/reactor/wiki/Home) | +| Unit | **settler** | Settler / clarifier modelling. | [→](https://gitea.wbd-rd.nl/RnD/settler/wiki/Home) | +| Unit | **monster** | Composite-sample sensor surrogate / multi-parameter monitor. | [→](https://gitea.wbd-rd.nl/RnD/monster/wiki/Home) | +| Equipment | **rotatingMachine** | Single pump / compressor — curves, state machine, prediction. | [→](https://gitea.wbd-rd.nl/RnD/rotatingMachine/wiki/Home) | +| Equipment | **valve** | Single valve actuator with FSM. | [→](https://gitea.wbd-rd.nl/RnD/valve/wiki/Home) | +| Equipment | **diffuser** | Aeration diffuser, gas-side modelling. | [→](https://gitea.wbd-rd.nl/RnD/diffuser/wiki/Home) | +| Control Module | **measurement** | Sensor signal-conditioning, scaling, calibration. | [→](https://gitea.wbd-rd.nl/RnD/measurement/wiki/Home) | +| Utility | **dashboardAPI** | Bridge between EVOLV nodes and Grafana dashboard upserts. | [→](https://gitea.wbd-rd.nl/RnD/dashboardAPI/wiki/Home) | + +Plus the shared library `generalFunctions` — not a Node-RED node itself; provides `BaseDomain`, `BaseNodeAdapter`, `ChildRouter`, `UnitPolicy`, `MeasurementContainer`, command registry, logger, and config manager. + +## Standards & conventions + +| Document | What it covers | Where | +|---|---|---| +| Node architecture (3-tier) | entry → nodeClass → specificClass | `.claude/rules/node-architecture.md` | +| Flow layout (Node-RED tabs) | Tab boundaries, lanes, S88 colours, link channels | `.claude/rules/node-red-flow-layout.md` | +| Telemetry (Port 0/1/2) | InfluxDB line protocol, cardinality, FlowFuse compatibility | `.claude/rules/telemetry.md` | +| generalFunctions stability | What's safe to change in the shared lib | `.claude/rules/general-functions.md` | +| repo-mem MCP usage | When to use `repo_search` / `repo_record_fix` instead of grep | `.claude/rules/repo-mem.md` | +| Refactor goals + tiers | Why the refactor exists, sequencing | `.claude/refactor/README.md` | +| Code conventions | Style, file size, comments, naming, imports, tests | `.claude/refactor/CONVENTIONS.md` | +| Contracts | `BaseNodeAdapter`, `BaseDomain`, commands registry, child router, unit policy, status badge, output ports | `.claude/refactor/CONTRACTS.md` | +| Module split | Per-node `src/` layout for the 4 core nodes + generic template | `.claude/refactor/MODULE_SPLIT.md` | +| Wiki per-node template | The 14-section page shape | `.claude/refactor/WIKI_TEMPLATE.md` | +| Wiki home + archive | This page's template | `.claude/refactor/WIKI_HOME_TEMPLATE.md` | + +## Refactor status + +| Tier | What | Status | +|---|---|---| +| 1 | Add infra in `generalFunctions` (additive only) | ✅ done | +| 2 | Pilot: pumpingStation end-to-end on new infra | ✅ done | +| 3 | Convert measurement, MGC, rotatingMachine | ✅ done | +| 4 | Convert valve, VGC, reactor, settler, monster, diffuser, dashboardAPI | ✅ done | +| 5 | Canonical topic names + alias deprecation map | ✅ done | +| 6 | Promote `development` → `main` | ✅ done | +| 8.5 | Remove deprecated paths in `generalFunctions` | ✅ done | +| 9 | Wiki cleanup — visual-first template + per-node Home pages | 🟡 partial (pumpingStation + dashboardAPI landed; 9 nodes to go) | +| 10 | Test-suite refactor across all nodes | ⏳ in progress | +| — | pumpingStation Docker E2E (P2.14) | ⏳ pending | + +## Archive + +Pre-refactor pages live under `Archive/`. See [Archive index](Archive).