From 48705c9a9eba631924ba6bbef54f7b6d884a8df0 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Sun, 21 Jun 2020 16:36:36 +0200 Subject: [PATCH] Fix not connecting to MQTT when permit join fails on startup. #3756 --- lib/controller.js | 6 +++++- test/controller.test.js | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/controller.js b/lib/controller.js index 4ea21b682..d684bb7db 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -139,7 +139,11 @@ class Controller { logger.warn('Set `permit_join` to `false` once you joined all devices.'); } - await this.zigbee.permitJoin(settings.get().permit_join); + try { + await this.zigbee.permitJoin(settings.get().permit_join); + } catch (error) { + logger.error(`Failed to set permit join to ${settings.get().permit_join}`); + } // MQTT this.mqtt.on('message', this.onMQTTMessage.bind(this)); diff --git a/test/controller.test.js b/test/controller.test.js index f30b223c1..f19f76fee 100644 --- a/test/controller.test.js +++ b/test/controller.test.js @@ -46,6 +46,13 @@ describe('Controller', () => { expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/remote', '{"brightness":255}', { retain: true, qos: 0 }, expect.any(Function)); }); + it('Start controller when permit join fails', async () => { + zigbeeHerdsman.permitJoin.mockImplementationOnce(() => {throw new Error("failed!")}); + await controller.start(); + expect(zigbeeHerdsman.permitJoin).toHaveBeenCalledTimes(1); + expect(MQTT.connect).toHaveBeenCalledTimes(1); + }); + it('Start controller with specific MQTT settings', async () => { const ca = tmp.fileSync().name; fs.writeFileSync(ca, "ca");