3c7d54e9c38e6f8f52ee02a780354e6000c5dc7f
Some checks failed
CI / lint-and-test (push) Has been cancelled
- ps-mgc-flow-contract: asserts PS's view of MGC outflow equals the live per-pump aggregate at every tick. Currently FAILS — exposes that MGC's flow.predicted.downstream reverts to optimalControl's bestFlow target after handlePressureChange writes the correct flow.act, leaving PS with stale outflow values. The mirror added in dc27a56 is necessary but not sufficient. - dead-zone-signal: asserts the Schmitt-trigger transitions (engaged 100% → keep-alive 1% → off 0%) across startLevel↓/stopLevel↓ with proper rising-edge re-arm. Currently PASSES. - inflow-overcapacity-stability: 45 s sim at 2× station capacity; asserts pumps don't thrash or park in accelerating residue. Currently FAILS — pumps end up at ctrl=0 in 'accelerating' state, suggesting the residue-unpark fix doesn't fully cover steady-state over-capacity. - realistic-startup-timing: re-runs the varying-demand-during-startup scenario with PRODUCTION-default state.time (starting=10s, warm=5s) instead of the 1-2 s used elsewhere. Currently PASSES — confirms the dispatch-reorder fix holds under realistic transition windows. Honest summary: 2 pass, 2 fail. The two failures expose genuine remaining defects in the PS↔MGC measurement contract and the residue-unpark policy. They're committed FAILING so the bugs are captured under version control until the underlying fixes land. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EVOLV — Edge-Layer Evolution for Optimized Virtualization
Node-RED custom nodes package voor de automatisering van afvalwaterzuiveringsinstallaties. Ontwikkeld door het R&D-team van Waterschap Brabantse Delta. Volgt de ISA-88 (S88) batch control standaard.
Nodes
| Node | Functie | S88-niveau |
|---|---|---|
| rotatingMachine | Individuele pomp/compressor/blower aansturing | Equipment |
| machineGroupControl | Multi-pomp optimalisatie (BEP-Gravitation) | Unit |
| pumpingStation | Pompgemaal met hydraulische context | Unit |
| valve | Individuele klep modellering | Equipment |
| valveGroupControl | Klep groep coordinatie | Unit |
| reactor | Biologische reactor (ASM kinetiek) | Unit |
| settler | Nabezinker / slibscheiding | Unit |
| monster | Multi-parameter biologische monitoring | Equipment |
| measurement | Sensor signaalconditionering | Control Module |
| diffuser | Beluchting aansturing | Equipment |
| dashboardAPI | InfluxDB telemetrie + FlowFuse dashboards | — |
| generalFunctions | Gedeelde bibliotheek (predict, PID, convert, etc.) | — |
Architectuur
Elke node volgt een drie-lagen patroon:
- Entry file (
<naam>.js) — registratie bij Node-RED, admin endpoints - nodeClass (
src/nodeClass.js) — Node-RED adapter (tick loop, routing, status) - specificClass (
src/specificClass.js) — pure domeinlogica (fysica, toestandsmachines)
Drie output-poorten per node: Port 0 = procesdata, Port 1 = InfluxDB telemetrie, Port 2 = registratie/besturing.
Installatie
git clone --recurse-submodules https://gitea.wbd-rd.nl/RnD/EVOLV.git
cd EVOLV
npm install
Submodules updaten:
git submodule update --remote --merge
Enkel bouwblok installeren in Node-RED:
mkdir -p ~/.node-red/nodes
cp -r nodes/<bouwblok-naam> ~/.node-red/nodes/
Testen
# Alle nodes
bash scripts/test-all.sh
# Specifieke node
node --test nodes/<nodeName>/test/basic/*.test.js
node --test nodes/<nodeName>/test/integration/*.test.js
node --test nodes/<nodeName>/test/edge/*.test.js
Documentatie
wiki/— Projectwiki met architectuur, bevindingen en metrics (index)CLAUDE.md— Claude Code projectgidsmanuals/node-red/— FlowFuse en Node-RED referentiedocumentatie.agents/— Agent skills, beslissingen en function-anchors
Licentie
Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)
Gebruik, aanpassing en verspreiding is toegestaan voor niet-commerciele doeleinden, mits naamsvermelding naar Waterschap Brabantse Delta. Voor commercieel gebruik is voorafgaande toestemming vereist.
Contact
Description
Languages
JavaScript
40%
HTML
39.4%
Shell
13.4%
Python
6%
Dockerfile
1.2%