diff --git a/src/commands/handlers.js b/src/commands/handlers.js index 5b1079d..57457ad 100644 --- a/src/commands/handlers.js +++ b/src/commands/handlers.js @@ -16,6 +16,16 @@ function _logger(source, ctx) { return ctx?.logger || source?.logger || null; } +// Resolve the command origin (control authority: parent | GUI | fysical). +// The shared commandRegistry stamps msg.origin (default 'parent'); legacy flows +// carried the origin as payload.source. Prefer the legacy field when present so +// existing flows keep working, otherwise use the registry-stamped msg.origin. +function _origin(msg) { + const p = msg && msg.payload; + if (p && typeof p === 'object' && typeof p.source === 'string' && p.source) return p.source; + return (typeof msg?.origin === 'string' && msg.origin) ? msg.origin : 'parent'; +} + function _send(ctx, ports) { if (typeof ctx?.send === 'function') ctx.send(ports); } @@ -28,19 +38,19 @@ exports.setMode = (source, msg) => { // forwards to these directly so behaviour is identical. exports.startup = async (source, msg) => { const p = msg.payload || {}; - await source.handleInput(p.source ?? 'parent', 'execSequence', 'startup'); + await source.handleInput(_origin(msg), 'execSequence', 'startup'); }; exports.shutdown = async (source, msg) => { const p = msg.payload || {}; - await source.handleInput(p.source ?? 'parent', 'execSequence', 'shutdown'); + await source.handleInput(_origin(msg), 'execSequence', 'shutdown'); }; exports.estop = async (source, msg) => { const p = msg.payload || {}; // Legacy emergencystop carried { source, action } — action defaults to // 'emergencystop' when only source is supplied via the canonical topic. - await source.handleInput(p.source ?? 'parent', p.action ?? 'emergencystop'); + await source.handleInput(_origin(msg), p.action ?? 'emergencystop'); }; // Content-based alias router: legacy `execSequence` carried payload.action in @@ -57,13 +67,13 @@ exports.execSequenceAlias = async (source, msg, ctx) => { exports.setSetpoint = async (source, msg) => { const p = msg.payload || {}; const action = p.action ?? 'execMovement'; - await source.handleInput(p.source ?? 'parent', action, Number(p.setpoint)); + await source.handleInput(_origin(msg), action, Number(p.setpoint)); }; exports.setFlowSetpoint = async (source, msg) => { const p = msg.payload || {}; const action = p.action ?? 'flowMovement'; - await source.handleInput(p.source ?? 'parent', action, Number(p.setpoint)); + await source.handleInput(_origin(msg), action, Number(p.setpoint)); }; exports.simulateMeasurement = (source, msg, ctx) => { diff --git a/src/commands/index.js b/src/commands/index.js index 483d3b3..75a2fd3 100644 --- a/src/commands/index.js +++ b/src/commands/index.js @@ -63,7 +63,7 @@ module.exports = [ topic: 'set.flow-setpoint', aliases: ['flowMovement'], payloadSchema: { type: 'object' }, - units: { measure: 'volumeFlowRate', default: 'm3/h' }, + unit: 'm3/h', description: 'Move the machine to a flow setpoint via flowMovement.', handler: handlers.setFlowSetpoint, },