0cbd6a40778abda7b9379e70177750555d84ad45
Some checks failed
CI / lint-and-test (push) Has been cancelled
Architecture change: demo is now driven by a sinusoidal inflow into the pumping station basin, rather than a random demand generator. The basin fills from the sinus, and PS's levelbased control should start/stop pumps via MGC when level crosses start/stop thresholds. Changes: - Demo Drivers tab: sinus generator (period 120s, base 0.005 + amp 0.03 m³/s) replaces the random demand. Sends q_in to PS via link channel. - PS config: levelbased mode, 10 m³ basin, startLevel 1.2 m / stopLevel 0.6 m. Volume-based safeties on, time-based off. - MGC scaling = normalized (was absolute) so PS's percent-based level control maps correctly. - Dashboard mode toggle now drives PS mode (levelbased ↔ manual) instead of per-pump setMode. Slider sends Qd to PS (only effective in manual). - PS code (committed separately): _controlLevelBased now calls _applyMachineGroupLevelControl + new Qd topic + forwardDemandToChildren. KNOWN ISSUE: Basin fills correctly (visible on dashboard), but pumps don't start when level exceeds startLevel. Likely cause: _pickVariant for 'level' in _controlLevelBased may not be resolving the predicted level correctly, or the safetyController is interfering despite time-threshold being 0. Needs source-level tracing of the PS tick → _safetyController → _controlLogic → _controlLevelBased path with logging enabled. To be debugged in the next session. Co-Authored-By: Claude Opus 4.6 (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
HTML
59.5%
Shell
16.6%
JavaScript
13.1%
Python
9%
Dockerfile
1.8%