diff --git a/src/lib/endpoint/command.ts b/src/lib/endpoint/command.ts index e2136b03f..a6b216ec0 100644 --- a/src/lib/endpoint/command.ts +++ b/src/lib/endpoint/command.ts @@ -6,6 +6,7 @@ export enum EndpointCommand { isCCSecure = "endpoint.is_cc_secure", getCCVersion = "endpoint.get_cc_version", getNodeUnsafe = "endpoint.get_node_unsafe", + tryGetNode = "endpoint.try_get_node", setRawConfigParameterValue = "endpoint.set_raw_config_parameter_value", getRawConfigParameterValue = "endpoint.get_raw_config_parameter_value", } diff --git a/src/lib/endpoint/incoming_message.ts b/src/lib/endpoint/incoming_message.ts index 577b7f527..1f01478e5 100644 --- a/src/lib/endpoint/incoming_message.ts +++ b/src/lib/endpoint/incoming_message.ts @@ -50,6 +50,11 @@ export interface IncomingCommandEndpointGetNodeUnsafe command: EndpointCommand.getNodeUnsafe; } +export interface IncomingCommandEndpointTryGetNode + extends IncomingCommandEndpointBase { + command: EndpointCommand.tryGetNode; +} + export interface IncomingCommandEndpointSetRawConfigParameterValue extends IncomingCommandEndpointBase { command: EndpointCommand.setRawConfigParameterValue; @@ -75,5 +80,6 @@ export type IncomingMessageEndpoint = | IncomingCommandEndpointIsCCSecure | IncomingCommandEndpointGetCCVersion | IncomingCommandEndpointGetNodeUnsafe + | IncomingCommandEndpointTryGetNode | IncomingCommandEndpointSetRawConfigParameterValue | IncomingCommandEndpointGetRawConfigParameterValue; diff --git a/src/lib/endpoint/message_handler.ts b/src/lib/endpoint/message_handler.ts index 88b40e95b..284642f00 100644 --- a/src/lib/endpoint/message_handler.ts +++ b/src/lib/endpoint/message_handler.ts @@ -92,8 +92,9 @@ export class EndpointMessageHandler implements MessageHandler { const version = endpoint.getCCVersion(message.commandClass); return { version }; } - case EndpointCommand.getNodeUnsafe: { - const node = endpoint.getNodeUnsafe(); + case EndpointCommand.getNodeUnsafe: + case EndpointCommand.tryGetNode: { + const node = endpoint.tryGetNode(); return { node: node === undefined diff --git a/src/lib/endpoint/outgoing_message.ts b/src/lib/endpoint/outgoing_message.ts index 59e4947c3..1746c0f1d 100644 --- a/src/lib/endpoint/outgoing_message.ts +++ b/src/lib/endpoint/outgoing_message.ts @@ -10,6 +10,7 @@ export interface EndpointResultTypes { [EndpointCommand.isCCSecure]: { secure: boolean }; [EndpointCommand.getCCVersion]: { version: number }; [EndpointCommand.getNodeUnsafe]: { node: NodeState | undefined }; + [EndpointCommand.tryGetNode]: { node: NodeState | undefined }; [EndpointCommand.setRawConfigParameterValue]: { result?: SupervisionResult }; [EndpointCommand.getRawConfigParameterValue]: { value: MaybeNotKnown; diff --git a/src/lib/forward.ts b/src/lib/forward.ts index 3797ff892..8b002c66f 100644 --- a/src/lib/forward.ts +++ b/src/lib/forward.ts @@ -362,7 +362,7 @@ export class EventForwarder { "notification", (endpoint: Endpoint, ccId: CommandClasses, args: any) => { // only forward value events for ready nodes - const changedNode = endpoint.getNodeUnsafe(); + const changedNode = endpoint.tryGetNode(); if (!changedNode) { throw new NodeNotFoundError(endpoint.nodeId); } diff --git a/src/lib/state.ts b/src/lib/state.ts index c59c3ebbb..0865188e6 100644 --- a/src/lib/state.ts +++ b/src/lib/state.ts @@ -809,7 +809,7 @@ export const dumpCommandClass = ( ): CommandClassState => ({ id: commandClass.ccId, name: CommandClasses[commandClass.ccId], - version: commandClass.version, + version: endpoint.getCCVersion(commandClass.ccId), isSecure: endpoint.isCCSecure(commandClass.ccId), });