@matter-server/ws-controller 0.2.3 → 0.2.4-alpha.0-20260116-d0b21f3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/controller/CustomClusterPoller.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { NodeId, Observable } from "@matter/main";
7
- import { AttributeResponseStatus, AttributesData, InvokeRequest, MatterNodeData, NodeCommandHandler, ReadAttributeRequest, ReadAttributeResponse, WriteAttributeRequest } from "../types/CommandHandler.js";
7
+ import { AttributeResponseStatus, AttributesData, InvokeRequest, MatterNodeData, NodeCommandHandler, WriteAttributeRequest } from "../types/CommandHandler.js";
8
8
  import { MatterNode } from "../types/WebSocketMessageTypes.js";
9
9
  /**
10
10
  * Command handler for test nodes (imported diagnostic dumps).
@@ -51,11 +51,6 @@ export declare class TestNodeCommandHandler implements NodeCommandHandler {
51
51
  * @returns Array of imported node IDs
52
52
  */
53
53
  importTestNodes(dump: string): NodeId[];
54
- /**
55
- * Read attributes from a test node.
56
- * Returns values from the stored attributes map.
57
- */
58
- handleReadAttribute(data: ReadAttributeRequest): Promise<ReadAttributeResponse>;
59
54
  /**
60
55
  * Write an attribute to a test node.
61
56
  * Logs the write and returns success (no actual write occurs).
@@ -1 +1 @@
1
- {"version":3,"file":"TestNodeCommandHandler.d.ts","sourceRoot":"","sources":["../../../src/controller/TestNodeCommandHandler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAU,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EACH,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,UAAU,EAAmB,MAAM,mCAAmC,CAAC;AAIhF;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;;IAG7D,uCAAuC;IACvC,QAAQ,CAAC,SAAS,uDAAwD;IAE1E,yCAAyC;IACzC,QAAQ,CAAC,WAAW,qCAAsC;IAE1D;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAKrD;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIhC;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,QAAQ,IAAI,UAAU,EAAE;IAIxB;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI/C;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQ7D;;;OAGG;IACG,oBAAoB,CACtB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EAAE,EACxB,eAAe,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,cAAc,CAAC;IA6B1B;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IA6DvC;;;OAGG;IACG,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAkDrF;;;OAGG;IACG,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAezF;;;OAGG;IACG,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAWzD;;;OAGG;IACG,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIpF;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIrF;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAYlD"}
1
+ {"version":3,"file":"TestNodeCommandHandler.d.ts","sourceRoot":"","sources":["../../../src/controller/TestNodeCommandHandler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAU,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EACH,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,UAAU,EAAmB,MAAM,mCAAmC,CAAC;AAIhF;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;;IAG7D,uCAAuC;IACvC,QAAQ,CAAC,SAAS,uDAAwD;IAE1E,yCAAyC;IACzC,QAAQ,CAAC,WAAW,qCAAsC;IAE1D;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAKrD;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIhC;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,QAAQ,IAAI,UAAU,EAAE;IAIxB;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI/C;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQ7D;;;OAGG;IACG,oBAAoB,CACtB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EAAE,EACxB,eAAe,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,cAAc,CAAC;IA6B1B;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IA6DvC;;;OAGG;IACG,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAezF;;;OAGG;IACG,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAWzD;;;OAGG;IACG,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIpF;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIrF;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAYlD"}
@@ -123,47 +123,6 @@ class TestNodeCommandHandler {
123
123
  }
124
124
  return importedNodeIds;
125
125
  }
126
- /**
127
- * Read attributes from a test node.
128
- * Returns values from the stored attributes map.
129
- */
130
- async handleReadAttribute(data) {
131
- const { nodeId, endpointId, clusterId, attributeId } = data;
132
- const testNode = this.#testNodes.get(BigInt(nodeId));
133
- if (testNode === void 0) {
134
- throw new Error(`Test node ${nodeId} not found`);
135
- }
136
- const values = [];
137
- const hasWildcards = endpointId === void 0 || clusterId === void 0 || attributeId === void 0;
138
- if (hasWildcards) {
139
- for (const [attrPath, value] of Object.entries(testNode.attributes)) {
140
- const parts = attrPath.split("/").map(Number);
141
- if ((endpointId === void 0 || parts[0] === endpointId) && (clusterId === void 0 || parts[1] === clusterId) && (attributeId === void 0 || parts[2] === attributeId)) {
142
- values.push({
143
- endpointId: parts[0],
144
- clusterId: parts[1],
145
- attributeId: parts[2],
146
- dataVersion: 0,
147
- value
148
- });
149
- }
150
- }
151
- } else {
152
- const path = `${endpointId}/${clusterId}/${attributeId}`;
153
- const value = testNode.attributes[path];
154
- if (value !== void 0) {
155
- values.push({
156
- endpointId,
157
- clusterId,
158
- attributeId,
159
- dataVersion: 0,
160
- value
161
- });
162
- }
163
- }
164
- logger.debug(`read_attribute for test node ${nodeId}: ${values.length} values`);
165
- return { values };
166
- }
167
126
  /**
168
127
  * Write an attribute to a test node.
169
128
  * Logs the write and returns success (no actual write occurs).
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/controller/TestNodeCommandHandler.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -230,10 +230,6 @@ export interface NodeCommandHandler {
230
230
  * Handles wildcards in paths (e.g., asterisk/29/asterisk for all descriptor attributes).
231
231
  */
232
232
  handleReadAttributes(nodeId: NodeId, attributePaths: string[], fabricFiltered?: boolean): Promise<AttributesData>;
233
- /**
234
- * Read attributes from a node.
235
- */
236
- handleReadAttribute(data: ReadAttributeRequest): Promise<ReadAttributeResponse>;
237
233
  /**
238
234
  * Write an attribute to a node.
239
235
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CommandHandler.d.ts","sourceRoot":"","sources":["../../../src/types/CommandHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CommandHandler.d.ts","sourceRoot":"","sources":["../../../src/types/CommandHandler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter-server/ws-controller",
3
- "version": "0.2.3",
3
+ "version": "0.2.4-alpha.0-20260116-d0b21f3",
4
4
  "type": "module",
5
5
  "description": "matter.js based Matter controller library",
6
6
  "bugs": {
@@ -87,6 +87,9 @@ export class AttributeDataCache {
87
87
  clusterData?.attributes[attributeId],
88
88
  clusterData?.model,
89
89
  );
90
+ if (convertedValue === undefined) {
91
+ return;
92
+ }
90
93
  clusterCache.set(attributeId, convertedValue);
91
94
  }
92
95
 
@@ -174,6 +177,9 @@ export class AttributeDataCache {
174
177
  clusterData?.attributes[attribute.id],
175
178
  clusterData?.model,
176
179
  );
180
+ if (convertedValue === undefined) {
181
+ continue;
182
+ }
177
183
  clusterCache.set(attribute.id, convertedValue);
178
184
  }
179
185
 
@@ -8,7 +8,6 @@ import { AsyncObservable, isObject } from "@matter/general";
8
8
  import {
9
9
  Bytes,
10
10
  ClientNodeInteraction,
11
- ClusterBehavior,
12
11
  FabricId,
13
12
  FabricIndex,
14
13
  ipv4BytesToString,
@@ -40,6 +39,7 @@ import {
40
39
  } from "@matter/main/protocol";
41
40
  import {
42
41
  Attribute,
42
+ AttributeId,
43
43
  ClusterId,
44
44
  Command,
45
45
  DeviceTypeId,
@@ -62,7 +62,7 @@ import {
62
62
  VendorId,
63
63
  } from "@matter/main/types";
64
64
  import { CommissioningController, NodeCommissioningOptions } from "@project-chip/matter.js";
65
- import { Endpoint, NodeStates } from "@project-chip/matter.js/device";
65
+ import { NodeStates } from "@project-chip/matter.js/device";
66
66
  import { ClusterMap, ClusterMapEntry } from "../model/ModelMapper.js";
67
67
  import {
68
68
  buildAttributePath,
@@ -83,8 +83,6 @@ import {
83
83
  MatterNodeData,
84
84
  OpenCommissioningWindowRequest,
85
85
  OpenCommissioningWindowResponse,
86
- ReadAttributeRequest,
87
- ReadAttributeResponse,
88
86
  ReadEventRequest,
89
87
  ReadEventResponse,
90
88
  SubscribeAttributeRequest,
@@ -104,6 +102,7 @@ import {
104
102
  UpdateSource,
105
103
  } from "../types/WebSocketMessageTypes.js";
106
104
  import { pingIp } from "../util/network.js";
105
+ import { CustomClusterPoller } from "./CustomClusterPoller.js";
107
106
  import { Nodes } from "./Nodes.js";
108
107
 
109
108
  const logger = Logger.get("ControllerCommandHandler");
@@ -118,6 +117,8 @@ export class ControllerCommandHandler {
118
117
  #nodes = new Nodes();
119
118
  /** Cache of available updates keyed by nodeId */
120
119
  #availableUpdates = new Map<NodeId, SoftwareUpdateInfo>();
120
+ /** Poller for custom cluster attributes (Eve energy, etc.) */
121
+ #customClusterPoller: CustomClusterPoller;
121
122
  events = {
122
123
  started: new AsyncObservable(),
123
124
  attributeChanged: new Observable<[nodeId: NodeId, data: DecodedAttributeReportValue<any>]>(),
@@ -135,6 +136,13 @@ export class ControllerCommandHandler {
135
136
 
136
137
  this.#bleEnabled = bleEnabled;
137
138
  this.#otaEnabled = otaEnabled;
139
+
140
+ // Initialize custom cluster poller for Eve energy attributes etc.
141
+ // Reads automatically trigger change events through the normal attribute flow
142
+ this.#customClusterPoller = new CustomClusterPoller({
143
+ handleReadAttributes: (nodeId, paths, fabricFiltered) =>
144
+ this.handleReadAttributes(nodeId, paths, fabricFiltered),
145
+ });
138
146
  }
139
147
 
140
148
  get started() {
@@ -206,6 +214,7 @@ export class ControllerCommandHandler {
206
214
 
207
215
  close() {
208
216
  if (!this.#started) return;
217
+ this.#customClusterPoller.stop();
209
218
  return this.#controller.close();
210
219
  }
211
220
 
@@ -225,6 +234,11 @@ export class ControllerCommandHandler {
225
234
  // Only refresh cache on Connected state (not Reconnecting, WaitingForDiscovery, etc.)
226
235
  if (state === NodeStates.Connected) {
227
236
  attributeCache.update(node);
237
+ // Register for custom cluster polling (e.g., Eve energy) after cache is updated
238
+ const attributes = attributeCache.get(nodeId);
239
+ if (attributes) {
240
+ this.#customClusterPoller.registerNode(nodeId, attributes);
241
+ }
228
242
  }
229
243
  this.events.nodeStateChanged.emit(nodeId, state);
230
244
  });
@@ -245,6 +259,11 @@ export class ControllerCommandHandler {
245
259
  // Initialize attribute cache if node is already initialized
246
260
  if (node.initialized) {
247
261
  attributeCache.add(node);
262
+ // Register for custom cluster polling (e.g., Eve energy)
263
+ const attributes = attributeCache.get(nodeId);
264
+ if (attributes) {
265
+ this.#customClusterPoller.registerNode(nodeId, attributes);
266
+ }
248
267
  }
249
268
 
250
269
  return node;
@@ -359,114 +378,55 @@ export class ControllerCommandHandler {
359
378
 
360
379
  /**
361
380
  * Read multiple attributes from a node by path strings.
362
- * Handles wildcards in paths.
381
+ * Supports wildcards in paths. Batches up to 9 paths per read call.
363
382
  */
364
383
  async handleReadAttributes(
365
384
  nodeId: NodeId,
366
385
  attributePaths: string[],
367
386
  fabricFiltered = false,
368
387
  ): Promise<AttributesData> {
369
- const node = this.#nodes.get(nodeId);
370
-
371
388
  const result: AttributesData = {};
372
-
373
- // Check if any path contains wildcards - if so, we need to collect all attributes from node
374
- const hasWildcards = attributePaths.some(path => path.includes("*"));
375
- let allAttributes: AttributesData | undefined;
376
-
377
- if (hasWildcards) {
378
- if (!node.initialized) {
379
- throw new Error(`Node ${nodeId} not ready`);
380
- }
381
- const rootEndpoint = node.getRootEndpoint();
382
- if (rootEndpoint === undefined) {
383
- throw new Error(`Node ${nodeId} not ready`);
384
- }
385
- allAttributes = {};
386
- this.#collectAttributesFromEndpoint(rootEndpoint, allAttributes);
387
- }
388
-
389
- // Process each attribute path
390
- for (const path of attributePaths) {
391
- const { endpointId, clusterId, attributeId } = splitAttributePath(path);
392
-
393
- // For wildcard paths, filter from collected attributes
394
- if (path.includes("*") && allAttributes !== undefined) {
395
- for (const [attrPath, value] of Object.entries(allAttributes)) {
396
- const parts = attrPath.split("/").map(Number);
397
- if (
398
- (endpointId === undefined || parts[0] === endpointId) &&
399
- (clusterId === undefined || parts[1] === clusterId) &&
400
- (attributeId === undefined || parts[2] === attributeId)
401
- ) {
402
- result[attrPath] = value;
403
- }
404
- }
405
- continue;
406
- }
407
-
408
- // For non-wildcard paths, use the SDK to read the specific attribute
409
- const { values, status } = await this.handleReadAttribute({
410
- nodeId,
411
- endpointId,
412
- clusterId,
413
- attributeId,
414
- fabricFiltered,
389
+ const client = await this.#nodes.interactionClientFor(nodeId);
390
+ const batchSize = 9;
391
+
392
+ // Parse all paths (wildcards become undefined for that component)
393
+ const parsedPaths = attributePaths.map(path => splitAttributePath(path));
394
+
395
+ // Process in batches of up to 9
396
+ for (let i = 0; i < parsedPaths.length; i += batchSize) {
397
+ const batch = parsedPaths.slice(i, i + batchSize);
398
+ const attributes = batch.map(({ endpointId, clusterId, attributeId }) => ({
399
+ endpointId: endpointId !== undefined ? EndpointNumber(endpointId) : undefined,
400
+ clusterId: clusterId !== undefined ? ClusterId(clusterId) : undefined,
401
+ attributeId: attributeId !== undefined ? AttributeId(attributeId) : undefined,
402
+ }));
403
+
404
+ const { attributeData, attributeStatus } = await client.getMultipleAttributesAndStatus({
405
+ attributes,
406
+ isFabricFiltered: fabricFiltered,
415
407
  });
416
408
 
417
- if (values.length) {
418
- for (const valueData of values) {
419
- const { pathStr, value } = this.#convertAttributeToWebSocket(
420
- {
421
- endpointId: EndpointNumber(valueData.endpointId),
422
- clusterId: ClusterId(valueData.clusterId),
423
- attributeId: valueData.attributeId,
424
- },
425
- valueData.value,
426
- );
427
- result[pathStr] = value;
428
- }
429
- } else if (status && status.length > 0) {
430
- logger.warn(`Failed to read attribute ${path}: status=${JSON.stringify(status)}`);
409
+ for (const { path: attrPath, value } of attributeData) {
410
+ const { pathStr, value: wsValue } = this.#convertAttributeToWebSocket(
411
+ {
412
+ endpointId: EndpointNumber(attrPath.endpointId),
413
+ clusterId: ClusterId(attrPath.clusterId),
414
+ attributeId: attrPath.attributeId,
415
+ },
416
+ value,
417
+ );
418
+ result[pathStr] = wsValue;
431
419
  }
432
- }
433
-
434
- return result;
435
- }
436
420
 
437
- /**
438
- * Collect all attributes from an endpoint and its children into WebSocket format.
439
- */
440
- #collectAttributesFromEndpoint(endpoint: Endpoint, attributesData: AttributesData) {
441
- const endpointId = endpoint.number!;
442
- for (const behavior of endpoint.endpoint.behaviors.active) {
443
- if (!ClusterBehavior.is(behavior)) {
444
- continue;
445
- }
446
- const cluster = behavior.cluster;
447
- const clusterId = cluster.id;
448
- const clusterData = ClusterMap[cluster.name.toLowerCase()];
449
- const clusterState = endpoint.endpoint.stateOf(behavior);
450
-
451
- for (const attributeName in cluster.attributes) {
452
- const attribute = cluster.attributes[attributeName];
453
- if (attribute === undefined) {
454
- continue;
421
+ if (attributeStatus && attributeStatus.length > 0) {
422
+ for (const { path: attrPath, status } of attributeStatus) {
423
+ const pathStr = buildAttributePath(attrPath.endpointId, attrPath.clusterId, attrPath.attributeId);
424
+ logger.warn(`Failed to read attribute ${pathStr}: status=${status}`);
455
425
  }
456
- const attributeValue = (clusterState as Record<string, unknown>)[attributeName];
457
- const { pathStr, value } = this.#convertAttributeToWebSocket(
458
- { endpointId, clusterId, attributeId: attribute.id },
459
- attributeValue,
460
- clusterData,
461
- );
462
- attributesData[pathStr] = value;
463
426
  }
464
427
  }
465
428
 
466
- // Recursively collect from child endpoints
467
- for (const childEndpoint of endpoint.getChildEndpoints()) {
468
- this.#collectAttributesFromEndpoint(childEndpoint, attributesData);
469
- }
429
+ return result;
470
430
  }
471
431
 
472
432
  /**
@@ -501,37 +461,6 @@ export class ControllerCommandHandler {
501
461
  return this.#controller.disconnectNode(nodeId, true);
502
462
  }
503
463
 
504
- async handleReadAttribute(data: ReadAttributeRequest): Promise<ReadAttributeResponse> {
505
- const { nodeId, endpointId, clusterId, attributeId, fabricFiltered = true } = data;
506
- const client = await this.#nodes.interactionClientFor(nodeId);
507
-
508
- // Note: This method is for direct SDK reads with explicit paths.
509
- // Wildcard handling is done at the WebSocket layer before calling this method.
510
- const { attributeData, attributeStatus } = await client.getMultipleAttributesAndStatus({
511
- attributes: [{ endpointId, clusterId, attributeId }],
512
- isFabricFiltered: fabricFiltered,
513
- });
514
-
515
- return {
516
- values: attributeData.map(
517
- ({ path: { endpointId, clusterId, attributeId }, value, version: dataVersion }) => ({
518
- attributeId,
519
- clusterId,
520
- dataVersion,
521
- endpointId,
522
- value,
523
- }),
524
- ),
525
- status: attributeStatus?.map(({ path: { endpointId, clusterId, attributeId }, status, clusterStatus }) => ({
526
- attributeId,
527
- clusterId,
528
- endpointId,
529
- status,
530
- clusterStatus,
531
- })),
532
- };
533
- }
534
-
535
464
  async handleReadEvent(data: ReadEventRequest): Promise<ReadEventResponse> {
536
465
  const { nodeId, endpointId, clusterId, eventId, eventMin } = data;
537
466
  const client = await this.#nodes.interactionClientFor(nodeId);
@@ -999,6 +928,8 @@ export class ControllerCommandHandler {
999
928
  await this.#controller.removeNode(nodeId, !!node?.isConnected);
1000
929
  // Remove node from storage (also clears attribute cache)
1001
930
  this.#nodes.delete(nodeId);
931
+ // Unregister from custom cluster polling
932
+ this.#customClusterPoller.unregisterNode(nodeId);
1002
933
  // Emit nodeDecommissioned event after successful removal
1003
934
  this.events.nodeDecommissioned.emit(nodeId);
1004
935
  }