{ "general": { "name": { "default": "Pumping Station", "rules": { "type": "string", "description": "A human-readable name or label for this pumping station configuration." } }, "id": { "default": null, "rules": { "type": "string", "nullable": true, "description": "A unique identifier for this pumping station configuration. If not provided, defaults to null." } }, "unit": { "default": "m3/h", "rules": { "type": "string", "description": "The default flow unit used for reporting station throughput." } }, "logging": { "logLevel": { "default": "info", "rules": { "type": "enum", "values": [ { "value": "debug", "description": "Log verbose diagnostic messages that aid in troubleshooting the station." }, { "value": "info", "description": "Log general informational messages about station behavior." }, { "value": "warn", "description": "Log warnings when station behavior deviates from expected ranges." }, { "value": "error", "description": "Log only error level messages for critical failures." } ], "description": "Defines the minimum severity that will be written to the log." } }, "enabled": { "default": true, "rules": { "type": "boolean", "description": "If true, logging is active for the pumping station node." } } } }, "functionality": { "softwareType": { "default": "pumpingStation", "rules": { "type": "string", "description": "Specified software type used to locate the proper default configuration." } }, "role": { "default": "StationController", "rules": { "type": "string", "description": "Describes the station's function within the EVOLV ecosystem." } }, "positionVsParent": { "default": "atEquipment", "rules": { "type": "enum", "description": "Defines how the station is positioned relative to its parent process or site.", "values": [ { "value": "atEquipment", "description": "The station is controlled at the equipment level and represents the primary pumping asset." }, { "value": "upstream", "description": "The station governs flows entering upstream of the parent asset." }, { "value": "downstream", "description": "The station influences conditions downstream of the parent asset, such as discharge or transfer." } ] } }, "tickIntervalMs": { "default": 1000, "rules": { "type": "number", "min": 100, "description": "Interval in milliseconds between internal evaluation cycles and output refreshes." } }, "supportsSimulation": { "default": true, "rules": { "type": "boolean", "description": "Indicates whether the station can operate using simulated inflow and level data." } }, "supportedChildSoftwareTypes": { "default": [ "measurement" ], "rules": { "type": "set", "itemType": "string", "description": "List of child node software types that may register with the station." } } }, "asset": { "uuid": { "default": null, "rules": { "type": "string", "nullable": true, "description": "Asset tag number which is a universally unique identifier for this pumping station." } }, "tagCode": { "default": null, "rules": { "type": "string", "nullable": true, "description": "Asset tag code which uniquely identifies the pumping station. May be null if not assigned." } }, "category": { "default": "station", "rules": { "type": "enum", "values": [ { "value": "station", "description": "Represents a dedicated pumping station asset." } ], "description": "High level classification for asset reporting." } }, "type": { "default": "pumpingStation", "rules": { "type": "string", "description": "Specific asset type used to identify this configuration." } }, "model": { "default": "Unknown", "rules": { "type": "string", "description": "Manufacturer or integrator model designation for the station." } }, "supplier": { "default": "Unknown", "rules": { "type": "string", "description": "Primary supplier or maintainer responsible for the station." } }, "geoLocation": { "default": { "x": 0, "y": 0, "z": 0 }, "rules": { "type": "object", "description": "Coordinate reference for locating the pumping station.", "schema": { "x": { "default": 0, "rules": { "type": "number", "description": "X coordinate in meters or site units." } }, "y": { "default": 0, "rules": { "type": "number", "description": "Y coordinate in meters or site units." } }, "z": { "default": 0, "rules": { "type": "number", "description": "Z coordinate in meters or site units." } } } } } }, "basin": { "volume": { "default": "1", "rules": { "type": "number", "description": "Total volume of empty basin in m3" } }, "height": { "default": "1", "rules": { "type": "number", "description": "Total height of basin in m" } }, "levelUnit": { "default": "m", "rules": { "type": "string", "description": "Unit used for level related setpoints and thresholds." } }, "heightInlet": { "default": 2, "rules": { "type": "number", "min": 0, "description": "Height of the inlet pipe measured from the basin floor (m)." } }, "heightOutlet": { "default": 0.2, "rules": { "type": "number", "min": 0, "description": "Height of the outlet pipe measured from the basin floor (m)." } }, "heightOverflow": { "default": 2.5, "rules": { "type": "number", "min": 0, "description": "Height of the overflow point measured from the basin floor (m)." } }, "inletPipeDiameter": { "default": 0.4, "rules": { "type": "number", "min": 0, "description": "Nominal inlet pipe diameter (m)." } }, "outletPipeDiameter": { "default": 0.4, "rules": { "type": "number", "min": 0, "description": "Nominal outlet pipe diameter (m)." } } }, "hydraulics": { "maxInflowRate": { "default": 200, "rules": { "type": "number", "min": 0, "description": "Maximum expected inflow during peak events (m3/h)." } }, "refHeight": { "default": "NAP", "rules": { "type": "enum", "values": [ { "value": "NAP", "description": "NAP (Normaal Amsterdams Peil)" }, { "value": "EVRF", "description": "EVRF (European Vertical Reference Frame)" }, { "value": "EGM2008", "description": "EGM2008 / EGM96 (satellietmetingen) Geopotentieel model earth " } ], "description": "Reference height to use to identify the height vs other basins with. This will say something more about the expected pressure loss in m head" } }, "minHeightBasedOn": { "default": "outlet", "rules": { "type": "enum", "values": [ { "value": "inlet", "description": "Minimum height is based on inlet elevation." }, { "value": "outlet", "description": "Minimum height is based on outlet elevation." } ], "description": "Basis for minimum height check: inlet or outlet." } }, "staticHead": { "default": 12, "rules": { "type": "number", "min": 0, "description": "Static head between station suction and discharge point (m)." } }, "maxDischargeHead": { "default": 24, "rules": { "type": "number", "min": 0, "description": "Maximum allowable discharge head before calling for alarms (m)." } }, "pipelineLength": { "default": 80, "rules": { "type": "number", "min": 0, "description": "Length of the discharge pipeline considered in calculations (m)." } }, "defaultFluid": { "default": "wastewater", "rules": { "type": "enum", "values": [ { "value": "wastewater", "description": "The wet well is primarily cylindrical." }, { "value": "water", "description": "The wet well is rectangular or box shaped." } ] } }, "temperatureReferenceDegC": { "default": 15, "rules": { "type": "number", "description": "Reference fluid temperature for property lookups (degC)." } } }, "control": { "mode": { "default": "levelbased", "rules": { "type": "string", "values": [ { "value": "levelbased", "description": "Lead and lag pumps are controlled by basin level thresholds." }, { "value": "pressureBased", "description": "Pumps target a discharge pressure setpoint." }, { "value": "flowBased", "description": "Pumps modulate to match measured inflow or downstream demand." }, { "value": "percentageBased", "description": "Pumps operate to maintain basin volume at a target percentage." }, { "value":"powerBased", "description": "Pumps are controlled based on power consumption.For example, to limit peak power usage or operate within netcongestion limits." }, { "value": "hybrid", "description": "Combines multiple control strategies for optimized operation." }, { "value": "manual", "description": "Pumps are operated manually or by an external controller." } ], "description": "Primary control philosophy for pump actuation." } }, "allowedModes": { "default": [ "levelbased", "pressurebased", "flowbased", "percentagebased", "powerbased", "manual" ], "rules": { "type": "set", "itemType": "string", "description": "List of control modes that the station is permitted to operate in." } }, "levelbased": { "startLevel": { "default": 1, "rules": { "type": "number", "min": 0, "description": "start of pump / group when level reaches this in meters starting from bottom." } }, "stopLevel": { "default": 1, "rules": { "type": "number", "min": 0, "description": "stop of pump / group when level reaches this in meters starting from bottom" } }, "minFlowLevel": { "default": 1, "rules": { "type": "number", "min": 0, "description": "min level to scale the flow lineair" } }, "maxFlowLevel": { "default": 4, "rules": { "type": "number", "min": 0, "description": "max level to scale the flow lineair" } } }, "pressureBased": { "pressureSetpoint": { "default": 1000, "rules": { "type": "number", "min": 0, "max": 5000, "description": "Target discharge pressure when operating in pressure control (kPa)." } } }, "flowBased": { "equalizationTargetPercent": { "default": 60, "rules": { "type": "number", "min": 0, "max": 100, "description": "Target fill percentage of the basin when operating in equalization mode." } }, "flowBalanceTolerance": { "default": 5, "rules": { "type": "number", "min": 0, "description": "Allowable error between inflow and outflow before adjustments are triggered (m3/h)." } } }, "percentageBased": { "targetVolumePercent": { "default": 50, "rules": { "type": "number", "min": 0, "max": 100, "description": "Target basin volume percentage to maintain during percentage-based control." } }, "tolerancePercent": { "default": 5, "rules": { "type": "number", "min": 0, "description": "Acceptable deviation from the target volume percentage before corrective action is taken." } } }, "powerBased": { "maxPowerKW": { "default": 50, "rules": { "type": "number", "min": 0, "description": "Maximum allowable power consumption for the pumping station (kW)." } }, "powerControlMode": { "default": "limit", "rules": { "type": "enum", "values": [ { "value": "limit", "description": "Limit pump operation to stay below the max power threshold." }, { "value": "optimize", "description": "Optimize pump scheduling to minimize power usage while meeting flow demands." } ], "description": "Defines how power constraints are managed during operation." } } }, "manualOverrideTimeoutMinutes": { "default": 30, "rules": { "type": "number", "min": 0, "description": "Duration after which a manual override expires automatically (minutes)." } } }, "safety": { "enableDryRunProtection": { "default": true, "rules": { "type": "boolean", "description": "If true, pumps will be prevented from running if basin volume is too low." } }, "dryRunThresholdPercent": { "default": 2, "rules": { "type": "number", "min": 0, "max": 100, "description": "Volume percentage below which dry run protection activates." } }, "dryRunDebounceSeconds": { "default": 30, "rules": { "type": "number", "min": 0, "description": "Time the low-volume condition must persist before dry-run protection engages (seconds)." } }, "enableOverfillProtection": { "default": true, "rules": { "type": "boolean", "description": "If true, high level alarms and shutdowns will be enforced to prevent overfilling." } }, "overfillThresholdPercent": { "default": 98, "rules": { "type": "number", "min": 0, "max": 100, "description": "Volume percentage above which overfill protection activates." } }, "overfillDebounceSeconds": { "default": 30, "rules": { "type": "number", "min": 0, "description": "Time the high-volume condition must persist before overfill protection engages (seconds)." } }, "timeleftToFullOrEmptyThresholdSeconds": { "default": 0, "rules": { "type": "number", "min": 0, "description": "Time threshold (seconds) used to predict imminent full or empty conditions." } } }, "alarms": { "default": { "highLevel": { "enabled": true, "threshold": 2.3, "delaySeconds": 30, "severity": "critical", "acknowledgmentRequired": true }, "lowLevel": { "enabled": true, "threshold": 0.2, "delaySeconds": 15, "severity": "warning", "acknowledgmentRequired": false } }, "rules": { "type": "object", "description": "Alarm configuration for the pumping station.", "schema": { "highLevel": { "default": { "enabled": true, "threshold": 2.3, "delaySeconds": 30, "severity": "critical", "acknowledgmentRequired": true }, "rules": { "type": "object", "schema": { "enabled": { "default": true, "rules": { "type": "boolean", "description": "Enable or disable the high level alarm." } }, "threshold": { "default": 2.3, "rules": { "type": "number", "description": "Level threshold that triggers the high level alarm (m)." } }, "delaySeconds": { "default": 30, "rules": { "type": "number", "min": 0, "description": "Delay before issuing the high level alarm (seconds)." } }, "severity": { "default": "critical", "rules": { "type": "enum", "values": [ { "value": "info", "description": "Informational notification." }, { "value": "warning", "description": "Warning condition requiring attention." }, { "value": "critical", "description": "Critical alarm requiring immediate intervention." } ], "description": "Severity associated with the high level alarm." } }, "acknowledgmentRequired": { "default": true, "rules": { "type": "boolean", "description": "If true, this alarm must be acknowledged by an operator." } } } } }, "lowLevel": { "default": { "enabled": true, "threshold": 0.2, "delaySeconds": 15, "severity": "warning", "acknowledgmentRequired": false }, "rules": { "type": "object", "schema": { "enabled": { "default": true, "rules": { "type": "boolean", "description": "Enable or disable the low level alarm." } }, "threshold": { "default": 0.2, "rules": { "type": "number", "description": "Level threshold that triggers the low level alarm (m)." } }, "delaySeconds": { "default": 15, "rules": { "type": "number", "min": 0, "description": "Delay before issuing the low level alarm (seconds)." } }, "severity": { "default": "warning", "rules": { "type": "enum", "values": [ { "value": "info", "description": "Informational notification." }, { "value": "warning", "description": "Warning condition requiring attention." }, { "value": "critical", "description": "Critical alarm requiring immediate intervention." } ], "description": "Severity associated with the low level alarm." } }, "acknowledgmentRequired": { "default": false, "rules": { "type": "boolean", "description": "If true, this alarm must be acknowledged by an operator." } } } } } } } }, "simulation": { "enabled": { "default": false, "rules": { "type": "boolean", "description": "If true, the station operates in simulation mode using generated inflow and level data." } }, "mode": { "default": "diurnal", "rules": { "type": "enum", "values": [ { "value": "static", "description": "Use constant inflow and level conditions." }, { "value": "diurnal", "description": "Use a typical diurnal inflow curve to drive simulation." }, { "value": "storm", "description": "Use an elevated inflow profile representing a storm event." } ], "description": "Defines which synthetic profile drives the simulation." } }, "seed": { "default": 42, "rules": { "type": "number", "description": "Seed used for pseudo-random components in simulation." } }, "applyRandomNoise": { "default": true, "rules": { "type": "boolean", "description": "If true, adds small noise to simulated measurements." } }, "inflowProfile": { "default": [ 80, 110, 160, 120, 90 ], "rules": { "type": "array", "itemType": "number", "minLength": 1, "description": "Relative inflow profile used when mode is set to diurnal or storm (percentage of design inflow)." } } } }