Align machineGroupControl with current architecture

This commit is contained in:
Rene De Ren
2026-03-12 16:43:29 +01:00
parent c0e4539b50
commit 85797b5b8b
3 changed files with 112 additions and 123 deletions

View File

@@ -38,21 +38,9 @@ class nodeClass {
const cfgMgr = new configManager();
this.defaultConfig = cfgMgr.getConfig(this.name);
// Merge UI config over defaults
this.config = {
general: {
name: uiConfig.name,
id: node.id, // node.id is for the child registration process
unit: uiConfig.unit, // add converter options later to convert to default units (need like a model that defines this which units we are going to use and then conver to those standards)
logging: {
enabled: uiConfig.enableLog,
logLevel: uiConfig.logLevel,
},
},
functionality: {
positionVsParent: uiConfig.positionVsParent || "atEquipment", // Default to 'atEquipment' if not set
},
};
// Build config: base sections (no domain-specific config for group controller)
this.config = cfgMgr.buildConfig(this.name, uiConfig, node.id);
// Utility for formatting outputs
this._output = new outputUtils();
}
@@ -80,7 +68,7 @@ class nodeClass {
const availableMachines = Object.values(mg.machines || {}).filter((machine) => {
// Safety check: ensure machine and machine.state exist
if (!machine || !machine.state || typeof machine.state.getCurrentState !== 'function') {
console.warn(`Machine missing or invalid:`, machine?.config?.general?.id || 'unknown');
mg.logger.warn(`Machine missing or invalid: ${machine?.config?.general?.id || 'unknown'}`);
return false;
}
@@ -198,40 +186,35 @@ class nodeClass {
const mg = this.source;
const RED = this.RED;
switch (msg.topic) {
case "registerChild":
console.log(`Registering child in mgc: ${msg.payload}`);
case "registerChild": {
const childId = msg.payload;
const childObj = RED.nodes.getNode(childId);
// Debug: Check what we're getting
console.log(`Child object:`, childObj ? 'found' : 'NOT FOUND');
console.log(`Child source:`, childObj?.source ? 'exists' : 'MISSING');
if (childObj?.source) {
console.log(`Child source type:`, childObj.source.constructor.name);
console.log(`Child has state:`, !!childObj.source.state);
}
mg.logger.debug(`Registering child: ${childId}, found: ${!!childObj}, source: ${!!childObj?.source}`);
mg.childRegistrationUtils.registerChild(
childObj.source,
msg.positionVsParent
);
// Debug: Check machines after registration
console.log(`Total machines after registration:`, Object.keys(mg.machines || {}).length);
break;
case "setMode":
mg.logger.debug(`Total machines after registration: ${Object.keys(mg.machines || {}).length}`);
break;
}
case "setMode": {
const mode = msg.payload;
mg.setMode(mode);
break;
}
case "setScaling":
case "setScaling": {
const scaling = msg.payload;
mg.setScaling(scaling);
break;
}
case "Qd":
case "Qd": {
const Qd = parseFloat(msg.payload);
const sourceQd = "parent";
@@ -245,9 +228,10 @@ class nodeClass {
msg.payload = "done";
send(msg);
} catch (e) {
console.log(e);
mg.logger.error(`Demand handling failed: ${e.message}`);
}
break;
}
default:
// Handle unknown topics if needed