Skip to content

Commit

Permalink
fix: detect driver failed and restart (#1259)
Browse files Browse the repository at this point in the history
* fix: detect driver failed and restart

Fixes #1246

* fix: error check

Co-authored-by: AlCalzone <d.griesel@gmx.net>

* fix: emit event before destroy

Co-authored-by: AlCalzone <d.griesel@gmx.net>
  • Loading branch information
robertsLando and AlCalzone committed May 21, 2021
1 parent 1153bfd commit 2ae945e
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions lib/ZwaveClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -318,8 +318,11 @@ class ZwaveClient extends EventEmitter {

/**
* Method used to close client connection, use this before destroy
*
* @param {boolean} keepListeners Prevents to remove all ZwaveCLient listeners (used when restarting)
* @memberof ZwaveClient
*/
async close () {
async close (keepListeners) {
this.status = ZWAVE_STATUS.closed
this.closed = true

Expand Down Expand Up @@ -363,10 +366,13 @@ class ZwaveClient extends EventEmitter {

if (this.driver) {
this.driverReady = false
this.removeAllListeners()
await this.driver.destroy()
}

if (!keepListeners) {
this.removeAllListeners()
}

logger.info('Client closed')
}

Expand Down Expand Up @@ -1750,12 +1756,22 @@ class ZwaveClient extends EventEmitter {
logger.info(`Scanning network with homeid: ${homeHex}`)
}

_onDriverError (error) {
async _onDriverError (error) {
this.error = 'Driver: ' + error.message
this.status = ZWAVE_STATUS.driverFailed
this._updateControllerStatus(this.error)

this.emit('event', eventEmitter.driver, 'driver error', error)

if (error.code === ZWaveErrorCodes.Driver_Failed) {
// this cannot be recovered by zwave-js, requires a manual restart
try {
await this.close(true)
this.closed = false
await this.connect()
} catch (error) {
logger.error(`Error while restarting driver: ${error.message}`)
}
}
}

_onScanComplete () {
Expand Down

0 comments on commit 2ae945e

Please sign in to comment.