From 4737a3ffa3951b241b150757c08835f424deeecc Mon Sep 17 00:00:00 2001 From: koenkk Date: Fri, 19 Jan 2024 20:39:53 +0100 Subject: [PATCH] fix: Fix too small frames leading to errors for Xiaomi ZNCWWSQ01LM https://github.com/Koenkk/zigbee2mqtt/issues/17148 --- src/lib/xiaomi.ts | 11 ++++++++--- test/xiaomi.test.js | 5 +++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/lib/xiaomi.ts b/src/lib/xiaomi.ts index 61ba6b76458d9..6f7ee38d8ddd7 100644 --- a/src/lib/xiaomi.ts +++ b/src/lib/xiaomi.ts @@ -1496,6 +1496,11 @@ export const fromZigbee = { Object.entries(msg.data).forEach(([key, value]) => { switch (parseInt(key)) { case 0xfff1: { + // @ts-expect-error + if (value.length < 8) { + meta.logger.debug(`zigbee-herdsman-converters:aqara_feeder: cannot handle ${value}, frame too small`); + return; + } // @ts-expect-error const attr = value.slice(3, 7); // @ts-expect-error @@ -1555,10 +1560,10 @@ export const fromZigbee = { break; case 0x080007d1: // ? 64 case 0x0d090055: // ? 00 - meta.logger.warn(`zigbee-herdsman-converters:aqara_feeder: Unhandled attribute ${attr} = ${val}`); + meta.logger.debug(`zigbee-herdsman-converters:aqara_feeder: Unhandled attribute ${attr} = ${val}`); break; default: - meta.logger.warn(`zigbee-herdsman-converters:aqara_feeder: Unknown attribute ${attr} = ${val}`); + meta.logger.debug(`zigbee-herdsman-converters:aqara_feeder: Unknown attribute ${attr} = ${val}`); } break; } @@ -1568,7 +1573,7 @@ export const fromZigbee = { meta.logger.debug(`zigbee-herdsman-converters:aqara_feeder: Unhandled key ${key} = ${value}`); break; default: - meta.logger.warn(`zigbee-herdsman-converters:aqara_feeder: Unknown key ${key} = ${value}`); + meta.logger.debug(`zigbee-herdsman-converters:aqara_feeder: Unknown key ${key} = ${value}`); } }); return result; diff --git a/test/xiaomi.test.js b/test/xiaomi.test.js index 2560ff4ed2c4a..7845f82f595e4 100644 --- a/test/xiaomi.test.js +++ b/test/xiaomi.test.js @@ -258,6 +258,11 @@ describe('lib/xiaomi', () => { const result = fromZigbee.aqara_feeder.convert(null, {data: {'65521': data}}, null, null, {logger: {warn: jest.fn(), debug: jest.fn()}}); expect(result).toStrictEqual({ schedule: [ { days: 'everyday', hour: 1, minute: 1, size: 1 } ] }); }); + it.only('Too small frame', () => { + const data = Buffer.from([128,2,2,48]); + const result = fromZigbee.aqara_feeder.convert(null, {data: {'65521': data}}, null, null, {logger: {warn: jest.fn(), debug: jest.fn()}}); + expect(result).toStrictEqual({}); + }); }); }); });