Editor hygiene + remove redundant idle-position clamp in predictions
- rotatingMachine.html: add default name:{value:""} to the editor
defaults block (standard Node-RED pattern; was missing).
- nodeClass.js: clear node status badge on close — matches the
pattern already in other EVOLV node close handlers.
- specificClass.js: remove the `(x <= 0) ? 0 : ...` guard in the
flow and power prediction methods. The guard was redundant:
predictions only run while the FSM is in an active state
(operational / starting / warmingup / accelerating / decelerating),
none of which produce x=0. Math.max(0, rawFlow) still clamps
negative extrapolation. Net: same behaviour in production, less
dead code.
All 10 basic tests pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
category: "EVOLV",
|
category: "EVOLV",
|
||||||
color: "#86bbdd",
|
color: "#86bbdd",
|
||||||
defaults: {
|
defaults: {
|
||||||
|
name: { value: "" },
|
||||||
|
|
||||||
// Define specific properties
|
// Define specific properties
|
||||||
speed: { value: 1, required: true },
|
speed: { value: 1, required: true },
|
||||||
|
|||||||
@@ -405,6 +405,7 @@ class nodeClass {
|
|||||||
clearTimeout(this._startupTimeout);
|
clearTimeout(this._startupTimeout);
|
||||||
clearInterval(this._tickInterval);
|
clearInterval(this._tickInterval);
|
||||||
clearInterval(this._statusInterval);
|
clearInterval(this._statusInterval);
|
||||||
|
this.node.status({}); // clear node status badge
|
||||||
|
|
||||||
// Clean up child measurement listeners
|
// Clean up child measurement listeners
|
||||||
const m = this.source;
|
const m = this.source;
|
||||||
|
|||||||
@@ -968,8 +968,7 @@ _callMeasurementHandler(measurementType, value, position, context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const rawFlow = this.predictFlow.y(x);
|
const rawFlow = this.predictFlow.y(x);
|
||||||
// Clamp: at position ≤ 0 the pump isn't rotating — physical flow is 0.
|
const cFlow = Math.max(0, rawFlow);
|
||||||
const cFlow = (x <= 0) ? 0 : Math.max(0, rawFlow);
|
|
||||||
this.measurements.type("flow").variant("predicted").position("downstream").value(cFlow,Date.now(),this.unitPolicy.canonical.flow);
|
this.measurements.type("flow").variant("predicted").position("downstream").value(cFlow,Date.now(),this.unitPolicy.canonical.flow);
|
||||||
this.measurements.type("flow").variant("predicted").position("atEquipment").value(cFlow,Date.now(),this.unitPolicy.canonical.flow);
|
this.measurements.type("flow").variant("predicted").position("atEquipment").value(cFlow,Date.now(),this.unitPolicy.canonical.flow);
|
||||||
return cFlow;
|
return cFlow;
|
||||||
@@ -993,7 +992,7 @@ _callMeasurementHandler(measurementType, value, position, context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const rawPower = this.predictPower.y(x);
|
const rawPower = this.predictPower.y(x);
|
||||||
const cPower = (x <= 0) ? 0 : Math.max(0, rawPower);
|
const cPower = Math.max(0, rawPower);
|
||||||
this.measurements.type("power").variant("predicted").position('atEquipment').value(cPower, Date.now(), this.unitPolicy.canonical.power);
|
this.measurements.type("power").variant("predicted").position('atEquipment').value(cPower, Date.now(), this.unitPolicy.canonical.power);
|
||||||
return cPower;
|
return cPower;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user