From 6b5b4ab4332343b5b42ba889c7dbfd6434bdd772 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Thu, 20 Feb 2020 20:01:26 +0100 Subject: [PATCH] Log when update is availabe. https://github.com/Koenkk/zigbee2mqtt/commit/58d987b52328a40b6ac92f343f3e8ceeae3f2a10#r37363068 --- lib/extension/otaUpdate.js | 6 ++++++ test/otaUpdate.test.js | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/lib/extension/otaUpdate.js b/lib/extension/otaUpdate.js index 92978d48d..3c19c0fb5 100644 --- a/lib/extension/otaUpdate.js +++ b/lib/extension/otaUpdate.js @@ -30,6 +30,12 @@ class OTAUpdate extends BaseExtension { this.lastChecked[data.device.ieeeAddr] = Date.now(); const available = await mappedDevice.ota.isUpdateAvailable(data.device, logger, data.data); this.publishEntityState(data.device.ieeeAddr, {update_available: available}); + + if (available) { + const message = `Update available for '${settingsDevice.friendly_name}'`; + logger.info(message); + this.mqtt.log('ota_update', message, {status: 'available', device: settingsDevice.friendly_name}); + } } async readSoftwareBuildIDAndDateCode(device, update) { diff --git a/test/otaUpdate.test.js b/test/otaUpdate.test.js index ad7ea1655..7595040f7 100644 --- a/test/otaUpdate.test.js +++ b/test/otaUpdate.test.js @@ -167,15 +167,26 @@ describe('OTA update', () => { const data = {imageType: 12382}; const mapped = zigbeeHerdsmanConverters.findByZigbeeModel(device.modelID) mockClear(mapped); + mapped.ota.isUpdateAvailable.mockReturnValueOnce(true); const payload = {data, cluster: 'genOta', device, endpoint: device.getEndpoint(1), type: 'commandQueryNextImageRequest', linkquality: 10}; + logger.info.mockClear(); await zigbeeHerdsman.events.message(payload); await flushPromises(); expect(mapped.ota.isUpdateAvailable).toHaveBeenCalledTimes(1); expect(mapped.ota.isUpdateAvailable).toHaveBeenCalledWith(device, logger, {"imageType": 12382}); + expect(logger.info).toHaveBeenCalledWith(`Update available for 'bulb'`) // Should not request again when device asks again after a short time await zigbeeHerdsman.events.message(payload); await flushPromises(); expect(mapped.ota.isUpdateAvailable).toHaveBeenCalledTimes(1); + + const extension = controller.extensions.find((e) => e.constructor.name === 'OTAUpdate'); + extension.lastChecked = {}; + logger.info.mockClear(); + mapped.ota.isUpdateAvailable.mockReturnValueOnce(false); + await zigbeeHerdsman.events.message(payload); + await flushPromises(); + expect(logger.info).not.toHaveBeenCalledWith(`Update available for 'bulb'`) }); });