# EVOLV — Wastewater Treatment Plant Automation > **Reflects code as of `9ab9f6b` · regenerated `2026-05-11`** > Source of truth: `nodes//src/specificClass.js` `configure()` declarations. Edges below were verified against `router.onRegister(...)` calls and emitter subscriptions. EVOLV is a Node-RED node library for wastewater plant automation, developed by Waterschap Brabantse Delta's R&D team. Nodes follow ISA-88 (S88). The library exposes **11 active nodes** across four S88 levels plus **1 utility node** for Grafana dashboard provisioning, all built on a shared `generalFunctions` library. ## 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
registers with any process node"]:::ctrl end subgraph UT["Utility"] dash["dashboardAPI
any node → Grafana dashboard"]:::util end ps -->|owns| mgc ps -.->|direct child, no group| rm mgc -->|load-shares| rm vgc -->|positions| v settler -->|return pump| rm reactor ==stateChange==> settler diff -. OTR data .-> reactor 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 util fill:#dddddd,color:#000 ``` **Edges in this diagram are ground-truth** — every solid arrow is a `router.onRegister(softwareType, …)` declaration in the parent's `configure()`. Dashed arrows are emitter subscriptions (not child registrations). For full data-flow including `measurement` fan-out to every process node and `valveGroupControl`'s flow-source registrations, see **[Topology-Patterns](Topology-Patterns)**. ## Live nodes | S88 level | Node | One-liner | Per-node wiki | |---|---|---|---| | 🟦 Process Cell | **pumpingStation** | Wet-well basin model; dispatches demand to one or more pump groups. | [Home →](https://gitea.wbd-rd.nl/RnD/pumpingStation/wiki/Home) | | 🔷 Unit | **machineGroupControl** | Load-sharing across a group of `rotatingMachine` children. | [Home →](https://gitea.wbd-rd.nl/RnD/machineGroupControl/wiki/Home) | | 🔷 Unit | **valveGroupControl** | Coordinated position control across a group of `valve` children; can register pump/PS/MGC nodes as flow sources. | [Home →](https://gitea.wbd-rd.nl/RnD/valveGroupControl/wiki/Home) | | 🔷 Unit | **reactor** | Bioreactor — ASM kinetics (CSTR/PFR engines); pairs with diffuser + downstream settler. | [Home →](https://gitea.wbd-rd.nl/RnD/reactor/wiki/Home) | | 🔷 Unit | **settler** | Secondary clarifier; subscribes to upstream reactor stateChange, drives a return-pump. | [Home →](https://gitea.wbd-rd.nl/RnD/settler/wiki/Home) | | 🔷 Unit | **monster** | Composite-sample sensor surrogate / proportional sampling program. | [Home →](https://gitea.wbd-rd.nl/RnD/monster/wiki/Home) | | 🟦 Equipment | **rotatingMachine** | Single pump / compressor — characteristic curves, prediction, FSM. | [Home →](https://gitea.wbd-rd.nl/RnD/rotatingMachine/wiki/Home) | | 🟦 Equipment | **valve** | Single valve actuator with FSM (shared with rotatingMachine state model). | [Home →](https://gitea.wbd-rd.nl/RnD/valve/wiki/Home) | | 🟦 Equipment | **diffuser** | Aeration diffuser; gas-side modelling, OTR emission to reactor. | [Home →](https://gitea.wbd-rd.nl/RnD/diffuser/wiki/Home) | | 🔹 Control Module | **measurement** | Sensor signal-conditioning, scaling, smoothing, outlier detection, analog/digital/MQTT. | [Home →](https://gitea.wbd-rd.nl/RnD/measurement/wiki/Home) | | ⚪ Utility | **dashboardAPI** | Receives `child.register` for any process node → provisions Grafana dashboard via HTTP. | [Home →](https://gitea.wbd-rd.nl/RnD/dashboardAPI/wiki/Home) | | — | **generalFunctions** | Shared library — `BaseDomain`, `BaseNodeAdapter`, `ChildRouter`, `commandRegistry`, `UnitPolicy`, `MeasurementContainer`, `statusBadge`, `HealthStatus`, `logger`, `configManager`. **Not a Node-RED node.** | [Home →](https://gitea.wbd-rd.nl/RnD/generalFunctions/wiki/Home) | ## Start here | You want to… | Read | |---|---| | Stand up a local dev environment + run an example flow | [Getting-Started](Getting-Started) | | Understand the codebase layout, BaseDomain/adapter pattern, output ports | [Architecture](Architecture) | | See typical plant configurations and how nodes wire together | [Topology-Patterns](Topology-Patterns) | | Know what topic names to use, units, S88 colours | [Topic-Conventions](Topic-Conventions) | | Understand what Port 0 / Port 1 / Port 2 carry, InfluxDB layout | [Telemetry](Telemetry) | | Decode S88 / EVOLV jargon | [Glossary](Glossary) | ## Domain concepts Evergreen technical references (not affected by refactors): | Page | Topic | |---|---| | [ASM models](concepts/asm-models) | Activated Sludge Models — biological process kinetics | | [PID control theory](concepts/pid-control-theory) | Loop tuning, anti-windup, controller forms | | [Pump affinity laws](concepts/pump-affinity-laws) | Speed/flow/head/power scaling | | [Settling models](concepts/settling-models) | Takács / Vesilind / discrete settling | | [Signal processing — sensors](concepts/signal-processing-sensors) | Smoothing, outlier rejection | | [InfluxDB schema design](concepts/influxdb-schema-design) | Cardinality, tags vs fields | | [Wastewater compliance NL](concepts/wastewater-compliance-nl) | Dutch regulatory context | | [OT security — IEC 62443](concepts/ot-security-iec62443) | OT cybersecurity baseline | ## Operations findings Algorithm-level proofs and behavioural notes that are still valid: | Page | Topic | |---|---| | [BEP gravitation proof](findings/bep-gravitation-proof) | Best-efficiency-point convergence | | [Curve non-convexity](findings/curve-non-convexity) | When pump curves break local optima | | [NCog behaviour](findings/ncog-behavior) | NCog control metric notes | | [Pump switching stability](findings/pump-switching-stability) | Hysteresis design for multi-pump groups | ## Project 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` | ⏳ pending Docker E2E + human review | | 8.5 | Remove deprecated paths in `generalFunctions` | ✅ done | | 9 | Wiki refactor — visual-first per-node + master pages | ✅ landed 2026-05-11 | | 10 | Test-suite refactor across all nodes | 🟡 in progress | | — | pumpingStation Docker E2E (P2.14) | ⏳ pending | 823 platform tests pass · 0 failures · 12 submodules + parent on `development`. ## Archive Pre-refactor planning pages have been moved to the [Archive](Archive). The current Home and supporting pages are the canonical references.