diff --git a/src/configs/pumpingStation.json b/src/configs/pumpingStation.json index 9de7d67..b596adc 100644 --- a/src/configs/pumpingStation.json +++ b/src/configs/pumpingStation.json @@ -22,6 +22,14 @@ "description": "The default flow unit used for reporting station throughput." } }, + "flowThreshold": { + "default": 0.0001, + "rules": { + "type": "number", + "min": 0, + "description": "Flow dead-band in m3/s below which the station treats net flow as steady." + } + }, "logging": { "logLevel": { "default": "info", @@ -127,6 +135,50 @@ } } }, + "output": { + "process": { + "default": "process", + "rules": { + "type": "enum", + "values": [ + { + "value": "process", + "description": "Delta-compressed process message." + }, + { + "value": "json", + "description": "JSON payload." + }, + { + "value": "csv", + "description": "CSV-formatted payload." + } + ], + "description": "Format of the process payload emitted on output port 0." + } + }, + "dbase": { + "default": "influxdb", + "rules": { + "type": "enum", + "values": [ + { + "value": "influxdb", + "description": "InfluxDB telemetry payload." + }, + { + "value": "json", + "description": "JSON payload." + }, + { + "value": "csv", + "description": "CSV-formatted payload." + } + ], + "description": "Format of the telemetry payload emitted on output port 1." + } + } + }, "asset": { "uuid": { "default": null, @@ -240,7 +292,7 @@ "rules": { "type": "number", "min": 0, - "description": "Height of the inlet pipe measured from the basin floor (m)." + "description": "Bottom/invert height of the inlet pipe measured from the basin floor (m)." } }, "outflowLevel": { @@ -248,7 +300,7 @@ "rules": { "type": "number", "min": 0, - "description": "Height of the outlet pipe measured from the basin floor (m)." + "description": "Top height of the outlet or pump-suction pipe measured from the basin floor (m)." } }, "overflowLevel": { @@ -438,7 +490,7 @@ "rules": { "type": "number", "min": 0, - "description": "Below this level the MGC shuts down all pumps (unconditional stop). Above dryRunLevel (safety), below startLevel (DEAD ZONE)." + "description": "Below this level the MGC shuts down all pumps (unconditional stop). Between minLevel and the active ramp start, demand is held at 0 %." } }, "startLevel": { @@ -446,7 +498,7 @@ "rules": { "type": "number", "min": 0, - "description": "Level at which the pump demand ramp begins at 0 %. Demand scales linearly from startLevel (0 %) to maxLevel (100 %)." + "description": "Lower shifted ramp point used while draining. While filling, demand is held at 0 % from startLevel through inletLevel, then scales from inletLevel to maxLevel." } }, "maxLevel": { @@ -456,6 +508,46 @@ "min": 0, "description": "Level at which the pump demand saturates at 100 %. Above this, demand stays clamped." } + }, + "curveType": { + "default": "linear", + "rules": { + "type": "enum", + "values": [ + { + "value": "linear", + "description": "Linear demand scaling between the active lower ramp level and maxLevel." + }, + { + "value": "log", + "description": "Logarithmic demand scaling with fast response early in the ramp." + } + ], + "description": "Demand curve used by levelbased control." + } + }, + "logCurveFactor": { + "default": 9, + "rules": { + "type": "number", + "min": 0.001, + "description": "Shape factor for the levelbased log curve; higher values increase early response." + } + }, + "enableShiftedRamp": { + "default": false, + "rules": { + "type": "boolean", + "description": "When true, arm a hysteresis shift: once level rises past shiftLevel the ramp foot moves left from inflowLevel to startLevel until level falls back below startLevel." + } + }, + "shiftLevel": { + "default": 0, + "rules": { + "type": "number", + "min": 0, + "description": "Level (m) that arms the shifted ramp when crossed going up. Should be ≤ maxLevel. Ignored when enableShiftedRamp is false." + } } }, "pressureBased": { @@ -634,7 +726,14 @@ "default": true, "rules": { "type": "boolean", - "description": "If true, high level alarms and shutdowns will be enforced to prevent overfilling." + "description": "Deprecated alias for enableHighVolumeSafety. If true, high level alarms and shutdowns will be enforced to preserve overflow margin." + } + }, + "enableHighVolumeSafety": { + "default": true, + "rules": { + "type": "boolean", + "description": "If true, high-volume safety actions run before the basin reaches physical overflow." } }, "overfillThresholdPercent": { @@ -643,7 +742,16 @@ "type": "number", "min": 0, "max": 100, - "description": "Volume percentage above which overfill protection activates." + "description": "Deprecated alias for highVolumeSafetyThresholdPercent." + } + }, + "highVolumeSafetyThresholdPercent": { + "default": 98, + "rules": { + "type": "number", + "min": 0, + "max": 100, + "description": "Percentage of maxVolAtOverflow where high-volume safety activates before actual overflow." } }, "timeleftToFullOrEmptyThresholdSeconds": {