@pmouli/isy-matter-server
Version:
Service to expose an ISY device as a Matter Border router
54 lines (46 loc) • 1.89 kB
text/typescript
import { ThisTypeNode } from 'ts-morph';
import { Driver, type Family } from '../Definitions/index.js';
import { writeDebugFile, type ISY } from '../ISY.js';
import { ISYNode } from '../ISYNode.js';
import type { DriverState } from '../Model/DriverState.js';
import type { NodeDef } from '../Model/NodeDef.js';
import type { NodeInfo } from '../Model/NodeInfo.js';
import { ISYDeviceNode } from './ISYDeviceNode.js';
export abstract class DynamicNode<T extends Family.ZWave | Family.ZigBee | Family.ZMatter, D extends ISYNode.DriverSignatures, C, E extends ISYNode.EventSignatures> extends ISYDeviceNode<T, D, C, E> {
nodeTypeId: string;
abstract getNodeDef(nodeDefId: string): Promise<NodeDef>;
async applyNodeDef(nodeDef?: NodeDef) {
if (!nodeDef) {
nodeDef = await this.getNodeDef(this.address);
if (this.isy.isDebugEnabled) await writeDebugFile(JSON.stringify(nodeDef), `${this.address}_NodeDef.json`, this.isy.logger, this.isy.storagePath);
}
for (let st in this.drivers) {
if (!(nodeDef?.sts?.st as Array<any>)?.find((s) => s.id === st)) {
this.logger(`Driver ${this.drivers[st].name} ${st} not found in nodeDef. Removing...`);
delete this.drivers[st];
}
}
for (let cmd in this.commands) {
if (!(nodeDef?.cmds?.accepts?.cmd as Array<any>)?.find((c) => c.id === cmd)) {
try {
//@ts-ignore
this.logger(`Command ${this.commands[cmd]?.name} (${cmd}) not found in nodeDef. Removing...`);
delete this.commands[cmd];
} catch {
this.logger(`Error removing command ${cmd}`);
}
}
}
}
constructor(isy: ISY, node: NodeInfo<T>, nodeDef?: NodeDef) {
super(isy, node);
this.nodeTypeId = node.nodeTypeId;
}
/*override handleEvent(event: { control?: any; data?: any; node?: any; action?: any; fmtAct?: any; }): boolean {
if(event.node !== this.address) {
return false;
}
if()
return false;
}*/
}