From f9d1348fd06740a714ac7e3c701e4a3b793a0b17 Mon Sep 17 00:00:00 2001 From: znetsixe <73483679+znetsixe@users.noreply.github.com> Date: Wed, 15 Oct 2025 14:09:37 +0200 Subject: [PATCH] added pumpingStation config, expanded functionality for difference in measurement container --- src/configs/pumpingStation.json | 48 +++++++++++++------ src/measurements/MeasurementContainer.js | 59 +++++++++++++----------- src/measurements/examples.js | 4 ++ 3 files changed, 69 insertions(+), 42 deletions(-) diff --git a/src/configs/pumpingStation.json b/src/configs/pumpingStation.json index 7ac735c..d6a0668 100644 --- a/src/configs/pumpingStation.json +++ b/src/configs/pumpingStation.json @@ -206,21 +206,18 @@ } }, "basin": { - "shape": { - "default": "cylindrical", + "volume": { + "default": "1", "rules": { - "type": "enum", - "values": [ - { - "value": "cylindrical", - "description": "The wet well is primarily cylindrical." - }, - { - "value": "rectangular", - "description": "The wet well is rectangular or box shaped." - } - ], - "description": "General geometry of the basin or wet well." + "type": "number", + "description": "Total volume of empty basin in m3" + } + }, + "height": { + "default": "1", + "rules": { + "type": "number", + "description": "Total height of basin in m" } }, "levelUnit": { @@ -272,7 +269,6 @@ } }, "hydraulics": { - "maxInflowRate": { "default": 200, "rules": { @@ -281,6 +277,28 @@ "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" + } + }, "staticHead": { "default": 12, "rules": { diff --git a/src/measurements/MeasurementContainer.js b/src/measurements/MeasurementContainer.js index 73f2abb..ea95e46 100644 --- a/src/measurements/MeasurementContainer.js +++ b/src/measurements/MeasurementContainer.js @@ -248,37 +248,42 @@ class MeasurementContainer { } + differenceUpDown(){ + + } + // Difference calculations between positions - difference(requestedUnit = null) { - - if (!this._currentType || !this._currentVariant) { - throw new Error('Type and variant must be specified for difference calculation'); - } - const upstream = this.measurements?.[this._currentType]?.[this._currentVariant]?.['upstream'] || null; - const downstream = this.measurements?.[this._currentType]?.[this._currentVariant]?.['downstream'] || null; - - if (!upstream || !downstream || upstream.values.length === 0 || downstream.values.length === 0) { - return null; - } - - // Get target unit for conversion - const targetUnit = requestedUnit || upstream.unit || downstream.unit; - - // Get values in the same unit - const upstreamValue = this._convertValueToUnit(upstream.getCurrentValue(), upstream.unit, targetUnit); - const downstreamValue = this._convertValueToUnit(downstream.getCurrentValue(), downstream.unit, targetUnit); - - const upstreamAvg = this._convertValueToUnit(upstream.getAverage(), upstream.unit, targetUnit); - const downstreamAvg = this._convertValueToUnit(downstream.getAverage(), downstream.unit, targetUnit); - - return { - value: downstreamValue - upstreamValue, - avgDiff: downstreamAvg - upstreamAvg, - unit: targetUnit - }; +difference({ from = "downstream", to = "upstream", unit: requestedUnit } = {}) { + if (!this._currentType || !this._currentVariant) { + throw new Error("Type and variant must be specified for difference calculation"); } + const get = pos => + this.measurements?.[this._currentType]?.[this._currentVariant]?.[pos] || null; + + const a = get(from); + const b = get(to); + if (!a || !b || a.values.length === 0 || b.values.length === 0) { + return null; + } + + const targetUnit = requestedUnit || a.unit || b.unit; + const aVal = this._convertValueToUnit(a.getCurrentValue(), a.unit, targetUnit); + const bVal = this._convertValueToUnit(b.getCurrentValue(), b.unit, targetUnit); + + const aAvg = this._convertValueToUnit(a.getAverage(), a.unit, targetUnit); + const bAvg = this._convertValueToUnit(b.getAverage(), b.unit, targetUnit); + + return { + value: aVal - bVal, + avgDiff: aAvg - bAvg, + unit: targetUnit, + from, + to, + }; +} + // Helper methods _ensureChainIsValid() { if (!this._currentType || !this._currentVariant || !this._currentPosition) { diff --git a/src/measurements/examples.js b/src/measurements/examples.js index bc756f5..4f66759 100644 --- a/src/measurements/examples.js +++ b/src/measurements/examples.js @@ -213,6 +213,10 @@ const pressureDiff = basicContainer console.log(`Pressure difference: ${pressureDiff.value} ${pressureDiff.unit}\n`); +//reversable difference +const deltaP = measurements.type("pressure").variant("measured").difference(); // defaults to downstream - upstream +const netFlow = measurements.type("flow").variant("measured").difference({ from: "upstream", to: "downstream" }); + // ==================================== // ADVANCED STATISTICS & HISTORY // ====================================