refactor(units): use UnitPolicy.convert instead of hardcoded m3/h<->m3/s scalars
Replace the M3H_TO_M3S constant in control/manual.js and the `* 3600` inline conversion in the status badge with this.unitPolicy.convert calls. Expose unitPolicy on the frozen control context so manual strategies pick it up without reaching into host. Matches the contract direction in .claude/refactor/CONTRACTS.md §6. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -146,6 +146,7 @@ class PumpingStation extends BaseDomain {
|
||||
levelVariants: this.levelVariants,
|
||||
volVariants: this.volVariants,
|
||||
flowThreshold: this.flowThreshold,
|
||||
unitPolicy: this.unitPolicy,
|
||||
host: this,
|
||||
};
|
||||
Object.defineProperty(ctx, 'machines', { enumerable: true, get: () => host.machines });
|
||||
@@ -262,7 +263,7 @@ class PumpingStation extends BaseDomain {
|
||||
};
|
||||
const { arrow = '❔', fill = 'grey' } = STYLES[this.state?.direction] || {};
|
||||
const pct = this.measurements.type('volumePercent').variant('predicted').position('atequipment').getCurrentValue() ?? 0;
|
||||
const netFlowM3h = (this.state?.netFlow ?? 0) * 3600;
|
||||
const netFlowM3h = this.unitPolicy.convert(this.state?.netFlow ?? 0, 'm3/s', 'm3/h', 'status badge netFlow');
|
||||
const mode = this.mode || '?';
|
||||
const manualPart = this.mode === 'manual' && Number.isFinite(this._manualDemand)
|
||||
? `Qd=${this._manualDemand.toFixed(0)} m³/h` : null;
|
||||
@@ -289,6 +290,10 @@ class PumpingStation extends BaseDomain {
|
||||
this.logger.debug(
|
||||
`Measurement update ${eventName} <- ${eventData.childName || child.config.general.name}: ${eventData.value} ${eventData.unit}`
|
||||
);
|
||||
if (measurementType === 'level') {
|
||||
this.measurementRouter.route(measurementType, eventData.value, position, eventData);
|
||||
return;
|
||||
}
|
||||
this.measurements.type(measurementType).variant('measured').position(position)
|
||||
.value(eventData.value, eventData.timestamp, eventData.unit);
|
||||
this.measurementRouter.route(measurementType, eventData.value, position, eventData);
|
||||
|
||||
Reference in New Issue
Block a user