From 838cb6e7021ff24bb3bdeaee5e13afaaf4d28e05 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Mon, 13 Apr 2020 21:15:08 +0200 Subject: [PATCH] Update converters. --- lib/extension/availability.js | 2 +- lib/extension/entityPublish.js | 2 +- lib/extension/homeassistant.js | 6 ++++-- lib/extension/legacy/bridgeLegacy.js | 2 +- lib/extension/networkMap.js | 2 +- lib/util/utils.js | 3 ++- lib/zigbee.js | 4 ++-- npm-shrinkwrap.json | 26 +++++++++++++------------- package.json | 2 +- test/onEvent.test.js | 2 +- test/otaUpdate.test.js | 14 +++++++------- 11 files changed, 34 insertions(+), 31 deletions(-) diff --git a/lib/extension/availability.js b/lib/extension/availability.js index e9059909..460a3cd0 100644 --- a/lib/extension/availability.js +++ b/lib/extension/availability.js @@ -47,7 +47,7 @@ class Availability extends Extension { } isPingable(device) { - if (pingableEndDevices.find((d) => d.zigbeeModel.includes(device.modelID))) { + if (pingableEndDevices.find((d) => d.hasOwnProperty('zigbeeModel') && d.zigbeeModel.includes(device.modelID))) { return true; } diff --git a/lib/extension/entityPublish.js b/lib/extension/entityPublish.js index 76160e3b..0e5d945a 100644 --- a/lib/extension/entityPublish.js +++ b/lib/extension/entityPublish.js @@ -97,7 +97,7 @@ class EntityPublish extends Extension { converters = groupConverters; target = entity.group; options = entity.settings; - mapped = entity.group.members.map((e) => zigbeeHerdsmanConverters.findByZigbeeModel(e.getDevice().modelID)); + mapped = entity.group.members.map((e) => zigbeeHerdsmanConverters.findByDevice(e.getDevice())); } // Convert the MQTT message to a Zigbee message. diff --git a/lib/extension/homeassistant.js b/lib/extension/homeassistant.js index 2bcbad6a..392d374a 100644 --- a/lib/extension/homeassistant.js +++ b/lib/extension/homeassistant.js @@ -1518,7 +1518,7 @@ const mapping = { '511.040': [cfg.light_brightness_colortemp_colorxy], '511.344': [cfg.sensor_battery, cfg.sensor_action, cfg.sensor_action_color], 'SMSZB-120': [cfg.binary_sensor_smoke, cfg.sensor_temperature, cfg.sensor_battery], - 'HALIGHTDIMWWE14': [cfg.light_brightness], + 'HALIGHTDIMWWE14': [cfg.light_brightness], 'GreenPower_On_Off_Switch': [cfg.sensor_action], 'GreenPower_7': [cfg.sensor_action], '3RSL011Z': [cfg.light_brightness_colortemp], @@ -1542,6 +1542,8 @@ const mapping = { 'MCLH-03': [cfg.switch, cfg.sensor_voltage, cfg.sensor_power, cfg.sensor_current], '752189': [cfg.sensor_action, cfg.sensor_battery], '676-00301024955Z': [cfg.light_brightness], + '1743030P7': [cfg.light_brightness_colortemp_colorxy], + 'XBee': [], }; /** @@ -1572,7 +1574,7 @@ class HomeAssistant extends Extension { } onDeviceRemoved(device) { - const definition = zigbeeHerdsmanConverters.findByZigbeeModel(device.modelID); + const definition = zigbeeHerdsmanConverters.findByDevice(device); if (definition) { logger.info(`Clearing Home Assistant discovery topic for '${device.ieeeAddr}'`); this.getConfigs(definition).forEach((config) => { diff --git a/lib/extension/legacy/bridgeLegacy.js b/lib/extension/legacy/bridgeLegacy.js index bd53baee..e9a26045 100644 --- a/lib/extension/legacy/bridgeLegacy.js +++ b/lib/extension/legacy/bridgeLegacy.js @@ -150,7 +150,7 @@ class BridgeLegacy extends Extension { }; if (device.type !== 'Coordinator') { - const definition = zigbeeHerdsmanConverters.findByZigbeeModel(device.modelID); + const definition = zigbeeHerdsmanConverters.findByDevice(device); const friendlyDevice = settings.getDevice(device.ieeeAddr); payload.model = definition ? definition.model : device.modelID; payload.vendor = definition ? definition.vendor : '-'; diff --git a/lib/extension/networkMap.js b/lib/extension/networkMap.js index dd36b880..07374b60 100644 --- a/lib/extension/networkMap.js +++ b/lib/extension/networkMap.js @@ -71,7 +71,7 @@ class NetworkMap extends Extension { // Add the device model if (device.type !== 'Coordinator') { - const definition = zigbeeHerdsmanConverters.findByZigbeeModel(device.modelID); + const definition = zigbeeHerdsmanConverters.findByDevice(device); if (definition) { labels.push(`${definition.vendor} ${definition.description} (${definition.model})`); } else { diff --git a/lib/util/utils.js b/lib/util/utils.js index f702c4bb..e2f86df3 100644 --- a/lib/util/utils.js +++ b/lib/util/utils.js @@ -43,7 +43,8 @@ function flatten(arr) { const forceEndDevice = flatten( ['QBKG03LM', 'QBKG04LM', 'ZNMS13LM', 'ZNMS12LM'] .map((model) => zigbeeHerdsmanConverters.devices.find((d) => d.model === model)) - .map((mappedModel) => mappedModel.zigbeeModel)); + .filter((definition) => definition.hasOwnProperty('zigbeeModel')) + .map((definition) => definition.zigbeeModel)); async function getZigbee2mqttVersion() { return new Promise((resolve, reject) => { diff --git a/lib/zigbee.js b/lib/zigbee.js index 33d27074..c2f8e92f 100644 --- a/lib/zigbee.js +++ b/lib/zigbee.js @@ -182,7 +182,7 @@ class Zigbee extends events.EventEmitter { return null; } - const definition = zigbeeHerdsmanConverters.findByZigbeeModel(device.modelID); + const definition = zigbeeHerdsmanConverters.findByDevice(device); const endpoints = definition && definition.endpoint ? definition.endpoint(device) : null; let endpoint; if (endpointKey) { @@ -217,7 +217,7 @@ class Zigbee extends events.EventEmitter { endpoint: key.endpoints[0], settings: setting, name: setting ? setting.friendlyName : (key.type === 'Coordinator' ? 'Coordinator' : key.ieeeAddr), - definition: zigbeeHerdsmanConverters.findByZigbeeModel(key.modelID), + definition: zigbeeHerdsmanConverters.findByDevice(key), }; } } diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 5d290086..1aa41549 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -942,13 +942,13 @@ "dev": true }, "@typescript-eslint/experimental-utils": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.27.0.tgz", - "integrity": "sha512-vOsYzjwJlY6E0NJRXPTeCGqjv5OHgRU1kzxHKWJVPjDYGbPgLudBXjIlc+OD1hDBZ4l1DLbOc5VjofKahsu9Jw==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.28.0.tgz", + "integrity": "sha512-4SL9OWjvFbHumM/Zh/ZeEjUFxrYKtdCi7At4GyKTbQlrj1HcphIDXlje4Uu4cY+qzszR5NdVin4CCm6AXCjd6w==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.27.0", + "@typescript-eslint/typescript-estree": "2.28.0", "eslint-scope": "^5.0.0", "eslint-utils": "^2.0.0" }, @@ -965,9 +965,9 @@ } }, "@typescript-eslint/typescript-estree": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.27.0.tgz", - "integrity": "sha512-t2miCCJIb/FU8yArjAvxllxbTiyNqaXJag7UOpB5DVoM3+xnjeOngtqlJkLRnMtzaRcJhe3CIR9RmL40omubhg==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.28.0.tgz", + "integrity": "sha512-HDr8MP9wfwkiuqzRVkuM3BeDrOC4cKbO5a6BymZBHUt5y/2pL0BXD6I/C/ceq2IZoHWhcASk+5/zo+dwgu9V8Q==", "dev": true, "requires": { "debug": "^4.1.1", @@ -5749,9 +5749,9 @@ } }, "semver": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.2.2.tgz", - "integrity": "sha512-Zo84u6o2PebMSK3zjJ6Zp5wi8VnQZnEaCP13Ul/lt1ANsLACxnJxq4EEm1PY94/por1Hm9+7xpIswdS5AkieMA==" + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.2.3.tgz", + "integrity": "sha512-utbW9Z7ZxVvwiIWkdOMLOR9G/NFXh2aRucghkVrEMJWuC++r3lCkBC3LwqBinyHzGMAJxY5tn6VakZGHObq5ig==" }, "set-blocking": { "version": "2.0.0", @@ -14996,9 +14996,9 @@ } }, "zigbee-herdsman-converters": { - "version": "12.0.74", - "resolved": "https://registry.npmjs.org/zigbee-herdsman-converters/-/zigbee-herdsman-converters-12.0.74.tgz", - "integrity": "sha512-bQXEbCN9THlgeOjKM7IteOxVkl1vo/ho+9iTuZx98AferjF+l3zhDyEPGT6W8Ebh1KjECY2l+hkVyHewjxvPlA==", + "version": "12.0.75", + "resolved": "https://registry.npmjs.org/zigbee-herdsman-converters/-/zigbee-herdsman-converters-12.0.75.tgz", + "integrity": "sha512-zSQhR4FaHUBn1iDJX/xuuD4KB46BfuDoO1uMSY5ztQCB6bUOdoPuFCE/XmM/emfhC8zqKUYFX4d7Cz7bzTg0/g==", "requires": { "axios": "*", "tar-stream": "*" diff --git a/package.json b/package.json index ca9a2916..188b6894 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "semver": "*", "winston": "*", "zigbee-herdsman": "0.12.81", - "zigbee-herdsman-converters": "12.0.74" + "zigbee-herdsman-converters": "12.0.75" }, "devDependencies": { "eslint": "*", diff --git a/test/onEvent.test.js b/test/onEvent.test.js index 96de1aa1..8f0e1105 100644 --- a/test/onEvent.test.js +++ b/test/onEvent.test.js @@ -13,7 +13,7 @@ const mocksClear = [MQTT.publish, logger.warn, logger.debug]; const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters'); const mockOnEvent = jest.fn(); -const mappedLivolo = zigbeeHerdsmanConverters.findByZigbeeModel(zigbeeHerdsman.devices.LIVOLO.modelID); +const mappedLivolo = zigbeeHerdsmanConverters.findByDevice(zigbeeHerdsman.devices.LIVOLO); mappedLivolo.onEvent = mockOnEvent; zigbeeHerdsmanConverters.onEvent = jest.fn(); diff --git a/test/otaUpdate.test.js b/test/otaUpdate.test.js index 0b7668e6..60c7a32f 100644 --- a/test/otaUpdate.test.js +++ b/test/otaUpdate.test.js @@ -38,7 +38,7 @@ describe('OTA update', () => { count++; return {swBuildId: count, dateCode: '2019010' + count} }); - const mapped = zigbeeHerdsmanConverters.findByZigbeeModel(device.modelID) + const mapped = zigbeeHerdsmanConverters.findByDevice(device) mockClear(mapped); logger.info.mockClear(); logger.error.mockClear(); @@ -67,7 +67,7 @@ describe('OTA update', () => { const device = zigbeeHerdsman.devices.bulb; const endpoint = device.endpoints[0]; endpoint.read.mockImplementation(() => {return {swBuildId: 1, dateCode: '2019010'}}); - const mapped = zigbeeHerdsmanConverters.findByZigbeeModel(device.modelID) + const mapped = zigbeeHerdsmanConverters.findByDevice(device) mockClear(mapped); logger.info.mockClear(); logger.error.mockClear(); @@ -84,7 +84,7 @@ describe('OTA update', () => { it('Should be able to check if OTA update is available', async () => { const device = zigbeeHerdsman.devices.bulb; - const mapped = zigbeeHerdsmanConverters.findByZigbeeModel(device.modelID) + const mapped = zigbeeHerdsmanConverters.findByDevice(device) mockClear(mapped); logger.info.mockClear(); @@ -106,7 +106,7 @@ describe('OTA update', () => { it('Should handle if OTA update check fails', async () => { const device = zigbeeHerdsman.devices.bulb; - const mapped = zigbeeHerdsmanConverters.findByZigbeeModel(device.modelID) + const mapped = zigbeeHerdsmanConverters.findByDevice(device) mockClear(mapped); logger.error.mockClear(); mapped.ota.isUpdateAvailable.mockImplementationOnce(() => {throw new Error('RF singals disturbed because of dogs barking')}); @@ -127,7 +127,7 @@ describe('OTA update', () => { it('Should refuse to check/update when already in progress', async () => { jest.useFakeTimers(); const device = zigbeeHerdsman.devices.bulb; - const mapped = zigbeeHerdsmanConverters.findByZigbeeModel(device.modelID) + const mapped = zigbeeHerdsmanConverters.findByDevice(device) mockClear(mapped); logger.info.mockClear(); @@ -154,7 +154,7 @@ describe('OTA update', () => { return {swBuildId: 1, dateCode: '2019010'} }); - const mapped = zigbeeHerdsmanConverters.findByZigbeeModel(device.modelID) + const mapped = zigbeeHerdsmanConverters.findByDevice(device) mockClear(mapped); logger.info.mockClear(); MQTT.events.message('zigbee2mqtt/bridge/ota_update/update', 'bulb'); @@ -165,7 +165,7 @@ describe('OTA update', () => { it('Should check for update when device requests it', async () => { const device = zigbeeHerdsman.devices.bulb; const data = {imageType: 12382}; - const mapped = zigbeeHerdsmanConverters.findByZigbeeModel(device.modelID) + const mapped = zigbeeHerdsmanConverters.findByDevice(device) mockClear(mapped); mapped.ota.isUpdateAvailable.mockReturnValueOnce(true); const payload = {data, cluster: 'genOta', device, endpoint: device.getEndpoint(1), type: 'commandQueryNextImageRequest', linkquality: 10};