From 855c0548175389e2c3a12d985c70a2b05b02a54b Mon Sep 17 00:00:00 2001 From: Kirov Ilya Date: Thu, 9 Feb 2023 07:48:57 +0300 Subject: [PATCH 1/3] Optional RETRY --- src/adapter/ezsp/adapter/ezspAdapter.ts | 9 +++------ src/adapter/ezsp/driver/driver.ts | 11 ++++++----- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/adapter/ezsp/adapter/ezspAdapter.ts b/src/adapter/ezsp/adapter/ezspAdapter.ts index ea60aa27e2..1881fe5301 100644 --- a/src/adapter/ezsp/adapter/ezspAdapter.ts +++ b/src/adapter/ezsp/adapter/ezspAdapter.ts @@ -449,12 +449,11 @@ class EZSPAdapter extends Adapter { ); } - const frame = this.driver.makeApsFrame(zclFrame.Cluster.ID); + const frame = this.driver.makeApsFrame(zclFrame.Cluster.ID, disableResponse || zclFrame.Header.frameControl.disableDefaultResponse); frame.profileId = 0x0104; frame.sourceEndpoint = sourceEndpoint || 0x01; frame.destinationEndpoint = endpoint; frame.groupId = 0; - frame.options = EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY | EmberApsOption.APS_OPTION_RETRY; this.driver.setNode(networkAddress, new EmberEUI64(ieeeAddr)); const dataConfirmResult = await this.driver.request(networkAddress, frame, zclFrame.toBuffer()); @@ -488,12 +487,11 @@ class EZSPAdapter extends Adapter { public async sendZclFrameToGroup(groupID: number, zclFrame: ZclFrame): Promise { return this.driver.queue.execute(async () => { this.checkInterpanLock(); - const frame = this.driver.makeApsFrame(zclFrame.Cluster.ID); + const frame = this.driver.makeApsFrame(zclFrame.Cluster.ID, false); frame.profileId = 0x0104; frame.sourceEndpoint = 0x01; frame.destinationEndpoint = 0x01; frame.groupId = groupID; - frame.options = EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY | EmberApsOption.APS_OPTION_RETRY; const dataConfirmResult = await this.driver.mrequest(frame, zclFrame.toBuffer()); /** * As a group command is not confirmed and thus immidiately returns @@ -507,12 +505,11 @@ class EZSPAdapter extends Adapter { public async sendZclFrameToAll(endpoint: number, zclFrame: ZclFrame, sourceEndpoint: number): Promise { return this.driver.queue.execute(async () => { this.checkInterpanLock(); - const frame = this.driver.makeApsFrame(zclFrame.Cluster.ID); + const frame = this.driver.makeApsFrame(zclFrame.Cluster.ID, false); frame.profileId = sourceEndpoint === 242 && endpoint === 242 ? 0xA1E0 : 0x0104; frame.sourceEndpoint = sourceEndpoint; frame.destinationEndpoint = endpoint; frame.groupId = 0xFFFD; - frame.options = EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY | EmberApsOption.APS_OPTION_RETRY; const dataConfirmResult = await this.driver.mrequest(frame, zclFrame.toBuffer()); /** diff --git a/src/adapter/ezsp/driver/driver.ts b/src/adapter/ezsp/driver/driver.ts index 9a1172081f..d7790a6c25 100644 --- a/src/adapter/ezsp/driver/driver.ts +++ b/src/adapter/ezsp/driver/driver.ts @@ -530,7 +530,7 @@ export class Driver extends EventEmitter { return this.transactionID; } - public makeApsFrame(clusterId: number): EmberApsFrame { + public makeApsFrame(clusterId: number, disableResponse: boolean): EmberApsFrame { const frame = new EmberApsFrame(); frame.clusterId = clusterId; frame.profileId = 0; @@ -538,9 +538,10 @@ export class Driver extends EventEmitter { frame.sourceEndpoint = 0; frame.destinationEndpoint = 0; frame.groupId = 0; - //frame.options = EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY; - frame.options = EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY | EmberApsOption.APS_OPTION_RETRY; - //frame.options = EmberApsOption.APS_OPTION_NONE; + frame.options = EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY; + if (!disableResponse) { + frame.options ||= EmberApsOption.APS_OPTION_RETRY; + } return frame; } @@ -561,7 +562,7 @@ export class Driver extends EventEmitter { const requestName = EmberZDOCmd.valueName(EmberZDOCmd, requestCmd); const responseName = EmberZDOCmd.valueName(EmberZDOCmd, responseCmd); debug.log(`ZDO ${requestName} params: ${JSON.stringify(params)}`); - const frame = this.makeApsFrame(requestCmd as number); + const frame = this.makeApsFrame(requestCmd as number, false); const payload = this.makeZDOframe(requestCmd as number, {transId: frame.sequence, ...params}); const waiter = this.waitFor(networkAddress, responseCmd as number, frame.sequence).start(); const res = await this.request(networkAddress, frame, payload); From 5185d192fe511e6db5dc74d932452b94d74921e3 Mon Sep 17 00:00:00 2001 From: Kirov Ilya Date: Thu, 9 Feb 2023 20:33:58 +0300 Subject: [PATCH 2/3] fixed work on reconnect, until new connection is initialized --- src/adapter/ezsp/driver/driver.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/adapter/ezsp/driver/driver.ts b/src/adapter/ezsp/driver/driver.ts index d7790a6c25..29d72e5447 100644 --- a/src/adapter/ezsp/driver/driver.ts +++ b/src/adapter/ezsp/driver/driver.ts @@ -108,7 +108,6 @@ export class Driver extends EventEmitter { debug.log(`Reset connection. Try ${attempts}`); try { await this.stop(); - this.ezsp = undefined; await Wait(1000); await this.startup(this.port, this.serialOpt, this.nwkOpt, this.greenPowerGroup); break; @@ -133,6 +132,7 @@ export class Driver extends EventEmitter { this.serialOpt = serialOpt; this.greenPowerGroup = greenPowerGroup; this.transactionID = 1; + this.ezsp = undefined; this.ezsp = new Ezsp(); this.ezsp.on('reset', this.onReset.bind(this)); this.ezsp.on('close', this.onClose.bind(this)); From aa7f364a897cfeb925ba43cfd98e97ccfaa65fe7 Mon Sep 17 00:00:00 2001 From: Kirov Ilya Date: Fri, 10 Feb 2023 14:21:22 +0300 Subject: [PATCH 3/3] Disabled handle childJoinHandler --- src/adapter/ezsp/driver/driver.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/adapter/ezsp/driver/driver.ts b/src/adapter/ezsp/driver/driver.ts index 29d72e5447..4ef4e41f33 100644 --- a/src/adapter/ezsp/driver/driver.ts +++ b/src/adapter/ezsp/driver/driver.ts @@ -350,14 +350,14 @@ export class Driver extends EventEmitter { debug.log(`stackStatusHandler: ${EmberStatus.valueToName(EmberStatus, frame.status)}`); break; } - case (frameName === 'childJoinHandler'): { - if (!frame.joining) { - this.handleNodeLeft(frame.childId, frame.childEui64); - } else { - this.handleNodeJoined(frame.childId, frame.childEui64); - } - break; - } + // case (frameName === 'childJoinHandler'): { + // if (!frame.joining) { + // this.handleNodeLeft(frame.childId, frame.childEui64); + // } else { + // this.handleNodeJoined(frame.childId, frame.childEui64); + // } + // break; + // } case (frameName == 'gpepIncomingMessageHandler'): { this.handleGPMessage(frame); break;