Editor + schema defaults - pumpingStation.html: drag-in defaults now reflect a realistic basin (volume=50 m³, height=4 m, inflowLevel=1.5, outflowLevel=0.2, overflowLevel=3.8, startLevel=1, stopLevel=0.5, minLevel=0.3, maxLevel=3.8). Old defaults left every level field null. Visual bug fix - src/editor/mode-preview.js: the level-based ramp curve in the editor was being drawn with foot=startLevel via buildPath(start, start, max). The runtime in control/levelBased.js has always used inflowLevel as the ramp foot. Pass buildPath(start, upFoot, max) where upFoot falls back to start when inflowLevel is missing, matching the runtime. Manual mode observability - src/specificClass.js: store last forwarded demand on this._manualDemand; surface as `mode` and `manualDemand` in getOutput(); call notifyOutputChanged() on forwardDemandToChildren and on changeMode so Port 0/1 emit even with no children registered. Status badge compacted to `mode | dir% | net m³/h` + `Qd=X m³/h` in manual mode. Examples cleanup - Drop stale 02-Integration.json, 03-Dashboard.json, basic-dashboard.flow.json, standalone-demo.js. - 01-Basic.json: numbered driver groups (1. Control mode … 4. Calibration), Debug-outputs group, fixed typos and HOW-TO-USE; Port 1 debug now active. - New 02-Dashboard.json: FlowFuse Dashboard 2.0 with Controls (7 buttons), Status (7 ui-text rows), Trends (4 ui-charts: level / volume / volume% / flow in-out-net), Raw output (ui-template dumping every Port 0 field). Fan-out function pattern-matches the 4-segment measurement keys by prefix instead of hardcoding childId, converts flow m³/s → m³/h, and caches last-known values so deltas never blank a row. - examples/README.md realigned to the two-file set. Wiki - Home.md: 5 image placeholders replaced with the provided screenshots (01-node-and-editor, 02-basic-flow, 03-wiring-standalone, 04-wiring-integrated) and the demo GIF (01-basic-demo). - Reference-Examples.md: shipped-files table reduced to 01-Basic + 02-Dashboard, Example-01 section uses the screenshot + GIF, Example-02 rewritten as Dashboard (kept screenshot/GIF callouts open for those captures), Example-03/Integration sections + their debug-recipes row removed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.6 KiB
Reference — Examples
Note
Every example flow shipped under
nodes/pumpingStation/examples/, plus how to load them, what they show, and the debug recipes that go with them. Live source:nodes/pumpingStation/examples/.
Shipped examples
| File | Tier | What it shows |
|---|---|---|
examples/01-Basic.json |
1 | Single pumpingStation driven by inject nodes — no parent, no dashboard. Numbered driver groups for Mode / Flow signals / Operator demand / Calibration. |
examples/02-Dashboard.json |
2 | Same command surface as Basic, driven by a FlowFuse Dashboard 2.0 page (Controls + live Status rows + 4 trend charts + raw-output table). |
Loading a flow
Via the editor
- Open the Node-RED editor at
http://localhost:1880. - Menu → Import.
- Drag-and-drop the JSON file, or paste its contents.
- Click Deploy.
Via the Admin API
curl -X POST -H 'Content-Type: application/json' \
--data @nodes/pumpingStation/examples/01-Basic.json \
http://localhost:1880/flow
Example 01 — Basic standalone
Nodes on the tab
| Type | Purpose |
|---|---|
comment |
Tab header / instructions |
inject × 7 |
Buttons to send set.mode (manual / levelbased), set.inflow, set.outflow, set.demand, cmd.calibrate.volume, cmd.calibrate.level |
pumpingStation |
The unit under test |
debug × 3 |
Port 0 (process), Port 1 (InfluxDB), Port 2 (parent reg) |
Driver injects are wrapped in four numbered groups: 1. Control mode, 2. Flow signals (inflow / outflow), 3. Operator demand (manual mode only), 4. Calibration. Debug nodes sit in a separate Debug outputs (sidebar) group on the right.
What to do after deploy
- (optional) Click
set.mode = manualif you wantset.demandto forward; otherwise leave it on the defaultlevelbasedand the ramp drives demand from level. - Click
set.inflow = 60 m³/h— the basin starts filling. Watch Port 0 in the debug pane:directionflips tofilling,levelrises, predicted volume integrates. - In manual mode: click
set.demand = 40— the value surfaces asmanualDemandon Port 0/1 and in the node status badge. - Click
cmd.calibrate.volume = 25 m³(orcmd.calibrate.level = 1.5 m) to snap the predicted-volume integrator.
Example 02 — Dashboard
Important
Screenshot needed. Two captures from
02-Dashboard.json:
- The editor tab (left controls column + pumpingStation + Live-status group on the right).
- The rendered dashboard at
http://localhost:1880/dashboard/pumpingstation-basic.Save as
wiki/_partial-screenshots/pumpingStation/05-ex02-editor.pngand06-ex02-dashboard.png. Replace this callout with both image links.
What it adds vs Example 01
| Addition | Why |
|---|---|
FlowFuse ui-base + ui-theme + ui-page setup |
One dashboard page hosting four widget groups |
ui-button × 7 (Controls group) |
Replace the inject buttons one-for-one — each carries the canonical msg.topic directly |
ui-text × 7 (Status group) |
Live readouts: Mode, Direction, Level, Volume, Volume %, percControl, Manual demand |
ui-chart × 4 (Trends group) |
Level (m), Volume (m³), Volume % (0–100), Flow (m³/h, multi-series Inflow / Outflow / Net) |
ui-template (Raw output group) |
Full key/value table of the latest Port 0 cache — every field the node emits, sorted |
| Fan-out function | Caches last-known values so delta-only Port 0 updates never blank a status row, and forwards numeric values to the charts |
The buttons fire the same canonical msg.topic as the inject nodes in Example 01 — there is no separate dashboard command surface to learn.
Required: @flowfuse/node-red-dashboard (Dashboard 2.0) installed in the Node-RED instance.
What to do after deploy
- Open
http://localhost:1880/dashboard/pumpingstation-basic. - Click
Mode: ManualorMode: Levelbased. - Click
Inflow 60 m³/h— Status panel level / volume / vol% rise; the Level / Volume / Flow charts plot the trends. - In manual mode click
Demand 40 m³/h—Manual demandrow updates, node badge appendsQd=40 m³/h. - Inspect the Raw output table at the bottom of the page for the full Port 0 surface (basin geometry, dryRunLevel, highVolumeSafetyLevel, predictedOverflowVolume, …).
Important
GIF needed. Capture clicking through Mode → Inflow → Demand and the charts reacting. 20–30 s is enough.
Save as
wiki/_partial-gifs/pumpingStation/02-ex02-dashboard.gif. Replace this callout with the image link.
Docker compose snippet
To bring up Node-RED + InfluxDB with EVOLV nodes pre-loaded:
# docker-compose.yml (extract)
services:
nodered:
build: ./docker/nodered
ports: ['1880:1880']
volumes:
- ./docker/nodered/data:/data/evolv
influxdb:
image: influxdb:2.7
ports: ['8086:8086']
Full file: EVOLV/docker-compose.yml.
Debug recipes
| Symptom | First thing to check |
|---|---|
Status badge stuck on no data |
Did the level measurement child register? Tap Port 2 of the measurement with a debug node and confirm a child.register msg fires once at init. |
Level rises but volume stays at minVol |
Volume integrator hasn't been calibrated. Send cmd.calibrate.level = <real level> once. |
| Demand stays at 0 % even though level is high | Mode might be manual — check set.mode. Or the safety layer is blocking (look at safety.blocked on Port 0). |
| Predicted volume drifts | Net-flow source is wrong. Look at flowSource on Port 0; it should match the highest-level aggregator you have wired in. |
enableLog: 'debug' floods the container log |
Toggle it off in the node's config. Never ship a demo with debug logging enabled. |
Related pages
| Page | Why |
|---|---|
| Home | Intuitive overview |
| Reference — Contracts | Topic + config + child filters |
| Reference — Architecture | Code map, state chart, lifecycle |
| Reference — Limitations | Known limitations and open questions |
| EVOLV — Topology Patterns | Where this node fits in a larger plant |

