diff --git a/datasets/assetData/assetData.json b/datasets/assetData/assetData.json index 316708a..03eb639 100644 --- a/datasets/assetData/assetData.json +++ b/datasets/assetData/assetData.json @@ -83,7 +83,12 @@ { "id": "hidrostal-pump-001", "name": "hidrostal-H05K-S03R", - "units": ["m³/h", "gpm", "l/min"] + "units": ["l/s"] + }, + { + "id": "hidrostal-pump-002", + "name": "hidrostal-C5-D03R-SHN1", + "units": ["l/s"] } ] } diff --git a/datasets/assetData/curves/hidrostal-C5-D03R-SHN1.json b/datasets/assetData/curves/hidrostal-C5-D03R-SHN1.json new file mode 100644 index 0000000..2ea753b --- /dev/null +++ b/datasets/assetData/curves/hidrostal-C5-D03R-SHN1.json @@ -0,0 +1,838 @@ +{ + "np": { + "400": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5953611390998625, + 1.6935085477165994, + 3.801139124304824, + 7.367829525776738, + 12.081735423116616 + ] + }, + "500": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.8497068236812997, + 3.801139124304824, + 7.367829525776738, + 12.081735423116616 + ] + }, + "600": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.7497197821018213, + 3.801139124304824, + 7.367829525776738, + 12.081735423116616 + ] + }, + "700": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.788320579602724, + 3.9982668237045984, + 7.367829525776738, + 12.081735423116616 + ] + }, + "800": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.7824519364844427, + 3.9885060367793064, + 7.367829525776738, + 12.081735423116616 + ] + }, + "900": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6934482683506376, + 3.9879559558537054, + 7.367829525776738, + 12.081735423116616 + ] + }, + "1000": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6954385513069579, + 4.0743508382926795, + 7.422392692482345, + 12.081735423116616 + ] + }, + "1100": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 4.160745720731654, + 7.596626714476177, + 12.081735423116616 + ] + }, + "1200": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 4.302551231007837, + 7.637247864947884, + 12.081735423116616 + ] + }, + "1300": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 4.37557913990704, + 7.773442147000839, + 12.081735423116616 + ] + }, + "1400": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 4.334434337766139, + 7.940911352646818, + 12.081735423116616 + ] + }, + "1500": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 4.2327206586037995, + 8.005238800611183, + 12.254836577088351 + ] + }, + "1600": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 4.195405588464695, + 7.991827302945298, + 12.423663269044452 + ] + }, + "1700": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 14.255458319309813, + 8.096768422220196, + 12.584668380908582 + ] + }, + "1800": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 3.8742719210788685, + 31.54620347513727, + 12.637080520201405 + ] + }, + "1900": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 3.8742719210788685, + 8.148423429611098, + 12.74916725120127 + ] + }, + "2000": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 3.8742719210788685, + 8.146439484120116, + 12.905178964345618 + ] + }, + "2100": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 3.8742719210788685, + 8.149576025637684, + 13.006940917309247 + ] + }, + "2200": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 3.8742719210788685, + 8.126246430368305, + 13.107503837410825 + ] + }, + "2300": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 3.8742719210788685, + 8.104379361635342, + 13.223235973280122 + ] + }, + "2400": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 3.8742719210788685, + 8.135190080423746, + 13.36128347785936 + ] + }, + "2500": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 3.8742719210788685, + 7.981219508598527, + 13.473697427231842 + ] + }, + "2600": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 3.8742719210788685, + 7.863899404441271, + 13.50303289156837 + ] + }, + "2700": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 3.8742719210788685, + 7.658860522528131, + 13.485230880073107 + ] + }, + "2800": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 3.8742719210788685, + 7.44407948309266, + 13.446135725634615 + ] + }, + "2900": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 0.5522732775894703, + 1.6920721090317592, + 3.8742719210788685, + 7.44407948309266, + 13.413693596332184 + ] + } + }, + "nq": { + "400": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 7.6803204433986965, + 25.506609120436963, + 35.4, + 44.4, + 52.5 + ] + }, + "500": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 22.622804921188227, + 35.4, + 44.4, + 52.5 + ] + }, + "600": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 19.966301579194372, + 35.4, + 44.4, + 52.5 + ] + }, + "700": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 17.430763940163832, + 33.79508340848005, + 44.4, + 52.5 + ] + }, + "800": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 14.752921911234477, + 31.71885034449889, + 44.4, + 52.5 + ] + }, + "900": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 11.854693031181021, + 29.923046639543475, + 44.4, + 52.5 + ] + }, + "1000": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.549433913822687, + 26.734189128096668, + 43.96760750800311, + 52.5 + ] + }, + "1100": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 26.26933164936586, + 42.23523193272671, + 52.5 + ] + }, + "1200": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 24.443114637042832, + 40.57167959798151, + 52.5 + ] + }, + "1300": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 22.41596168949836, + 39.04561852479495, + 52.5 + ] + }, + "1400": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 20.276864821170303, + 37.557663261443224, + 52.252852231224054 + ] + }, + "1500": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 18.252772588147742, + 35.9974418607538, + 50.68604059588987 + ] + }, + "1600": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 16.31441663648616, + 34.51170378091407, + 49.20153034100798 + ] + }, + "1700": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 14.255458319309813, + 33.043410795291045, + 47.820213744181245 + ] + }, + "1800": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 12.7, + 31.54620347513727, + 46.51705619739449 + ] + }, + "1900": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 12.7, + 29.986013742375484, + 45.29506741639918 + ] + }, + "2000": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 12.7, + 28.432646044605782, + 44.107822395271945 + ] + }, + "2100": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 12.7, + 26.892634464336055, + 42.758175515158776 + ] + }, + "2200": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 12.7, + 25.270679127870263, + 41.467063889795895 + ] + }, + "2300": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 12.7, + 23.531132157718837, + 40.293041104955826 + ] + }, + "2400": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 12.7, + 21.815645106750623, + 39.03109248860755 + ] + }, + "2500": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 12.7, + 20.34997949463564, + 37.71320701654063 + ] + }, + "2600": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 12.7, + 18.81710568651804, + 36.35563657017404 + ] + }, + "2700": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 12.7, + 17.259072160217805, + 35.02979557646653 + ] + }, + "2800": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 12.7, + 16, + 33.74372254979665 + ] + }, + "2900": { + "x": [ + 0, + 25.510204081632654, + 51.020408163265309, + 76.530612244897952, + 100 + ], + "y": [ + 6.4, + 9.500000000000002, + 12.7, + 16, + 32.54934541379723 + ] + } + } +} diff --git a/src/measurements/MeasurementContainer.js b/src/measurements/MeasurementContainer.js index 1a3cab0..68f7ed9 100644 --- a/src/measurements/MeasurementContainer.js +++ b/src/measurements/MeasurementContainer.js @@ -325,6 +325,38 @@ class MeasurementContainer { return value; } + getLaggedSample(lag = 1,requestedUnit = null ){ + const measurement = this.get(); + if (!measurement) return null; + + let sample = measurement.getLaggedSample(lag); + if (sample === null) return null; + + // Return as-is if no unit conversion requested + if (!requestedUnit) { + return sample; + } + + // Convert if needed + if (measurement.unit && requestedUnit !== measurement.unit) { + try { + const convertedValue = convertModule(value).from(measurement.unit).to(requestedUnit); + //replace old value in sample and return obj + sample.value = convertedValue ; + sample.unit = requestedUnit; + return sample; + + } catch (error) { + if (this.logger) { + this.logger.error(`Unit conversion failed: ${error.message}`); + } + return sample; // Return original value if conversion fails + } + } + + return sample; + } + // Difference calculations between positions difference({ from = "downstream", to = "upstream", unit: requestedUnit } = {}) { diff --git a/src/measurements/examples.js b/src/measurements/examples.js index 254e61e..5cc2459 100644 --- a/src/measurements/examples.js +++ b/src/measurements/examples.js @@ -87,6 +87,7 @@ autoContainer .distance(0.5) .value(1.5, Date.now(), 'bar'); // Input: 1.5 bar → Auto-stored as ~21.76 psi + const converted = autoContainer .type('pressure') .variant('measured') @@ -274,8 +275,8 @@ console.log(` History: [${allValues.values.join(', ')}]\n`); console.log('--- Lagged sample comparison ---'); const latest = stats.getCurrentValue(); // existing helper -const prevSample = stats.getLaggedValue(2); // new helper -const prevPrevSample = stats.getLaggedValue(3); // optional +const prevSample = stats.getLaggedValue(1); // new helper +const prevPrevSample = stats.getLaggedValue(2); // optional if (prevSample) { const delta = latest - prevSample.value; diff --git a/src/predict/predict_class.js b/src/predict/predict_class.js index 486ed9c..85f30ca 100644 --- a/src/predict/predict_class.js +++ b/src/predict/predict_class.js @@ -350,6 +350,7 @@ class Predict { } buildAllFxyCurves(curve) { + let globalMinY = Infinity; let globalMaxY = -Infinity;