wiki/Home.md (new) — platform landing page per WIKI_HOME_TEMPLATE.md. Mermaid block of 11 active EVOLV nodes coloured by S88 level, navigation grouped by level, standards-pointer table, live refactor-status table. wiki/Archive.md (new) — empty archive table for retired wiki pages. Submodule pointer bumps (all wiki/Home.md + wiki:* npm scripts): measurement 42a0333 → 2aa8021 machineGroupControl bb2f3be → 045a941 rotatingMachine e058fe9 → 9e8463b valve e27135b → 8aa5b5e valveGroupControl e02cd1a → c44d595 diffuser 15cfb22 → 9122b14 monster 2a6a0bc → 2a82b7d settler b8247fc → 6953d64 reactor 7bf464b → d931bea dashboardAPI 92d7eba → 67a374f Every node now has a visual-first wiki Home page with auto-generated topic contract + data model. Per-node `npm run wiki:all` re-generates the AUTOGEN blocks from src/commands/ + src/specificClass.js. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.7 KiB
EVOLV — Wastewater treatment plant automation
Reflects code as of
afc304b· regenerated2026-05-11vianpm 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
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. | → |
| Unit | machineGroupControl | Load-sharing across a group of rotatingMachines. | → |
| Unit | valveGroupControl | Coordinated valve control across a group of valves. | → |
| Unit | reactor | Bioreactor — couples diffuser + measurements + ASM kinetics. | → |
| Unit | settler | Settler / clarifier modelling. | → |
| Unit | monster | Composite-sample sensor surrogate / multi-parameter monitor. | → |
| Equipment | rotatingMachine | Single pump / compressor — curves, state machine, prediction. | → |
| Equipment | valve | Single valve actuator with FSM. | → |
| Equipment | diffuser | Aeration diffuser, gas-side modelling. | → |
| Control Module | measurement | Sensor signal-conditioning, scaling, calibration. | → |
| Utility | dashboardAPI | Bridge between EVOLV nodes and Grafana dashboard upserts. | → |
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.