feat: level-based control now reaches machine groups + manual Qd forwarding
Two additions to pumpingStation: 1. _controlLevelBased now calls _applyMachineGroupLevelControl in addition to _applyMachineLevelControl when the basin is filling above startLevel. Previously only direct-child machines received the level-based percent-control signal; in a hierarchical topology (PS → MGC → pumps) the machines sit under MGC and PS.machines is empty, so the level control never reached them. 2. New 'Qd' input topic + forwardDemandToChildren() method. When PS is in 'manual' mode (matching the pattern from rotatingMachine's virtualControl), operator demand from a dashboard slider is forwarded to all child machine groups and direct machines. When PS is in any other mode (levelbased, flowbased, etc.), the Qd msg is silently dropped with a debug log so the automatic control isn't overridden. No breaking changes — existing flows that don't send 'Qd' are unaffected, and _controlLevelBased's additional call to machineGroupLevelControl is a no-op when no machine groups are registered. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -221,6 +221,27 @@ class nodeClass {
|
||||
this.source.setManualInflow(val, ts, unit);
|
||||
break;
|
||||
}
|
||||
case 'Qd': {
|
||||
// Manual demand: operator sets the target output via a
|
||||
// dashboard slider. Only accepted when PS is in 'manual'
|
||||
// mode — mirrors how rotatingMachine gates commands by
|
||||
// mode (virtualControl vs auto).
|
||||
const demand = Number(msg.payload);
|
||||
if (!Number.isFinite(demand)) {
|
||||
this.source.logger.warn(`Invalid Qd value: ${msg.payload}`);
|
||||
break;
|
||||
}
|
||||
if (this.source.mode === 'manual') {
|
||||
this.source.forwardDemandToChildren(demand).catch((err) =>
|
||||
this.source.logger.error(`Failed to forward demand: ${err.message}`)
|
||||
);
|
||||
} else {
|
||||
this.source.logger.debug(
|
||||
`Qd ignored in ${this.source.mode} mode. Switch to manual to use the demand slider.`
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
done();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user