From da646ed04b0d21e9bead5185320e4457583d5f70 Mon Sep 17 00:00:00 2001 From: Stefano Semeraro Date: Mon, 15 Apr 2024 21:57:05 +0200 Subject: [PATCH] feat(add): ZDMS16-1, ZDMS16-2 (#7398) * feat(add): ZDMS16-1 and ZDMS16-2 Avatto dimmer switches * fix: removed incorrect fingerprint manufacturer from TS0601_dimmer_5. It's now correctly supported by ZDMS16-1 * fix: fixed indentation in models ZDMS16-1 and ZDMS16-2 --- src/devices/tuya.ts | 77 ++++++++++++++++++++++++++++++++++++++++++++- src/lib/tuya.ts | 1 + 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/src/devices/tuya.ts b/src/devices/tuya.ts index d375dc1c11e33..bd911fc6ed2a7 100644 --- a/src/devices/tuya.ts +++ b/src/devices/tuya.ts @@ -1656,7 +1656,7 @@ const definitions: Definition[] = [ ], }, { - fingerprint: tuya.fingerprint('TS0601', ['_TZE204_dcnsggvz', '_TZE204_5cuocqty']), + fingerprint: tuya.fingerprint('TS0601', ['_TZE204_dcnsggvz']), model: 'TS0601_dimmer_5', vendor: 'TuYa', description: '1 gang smart dimmer module', @@ -1685,6 +1685,81 @@ const definitions: Definition[] = [ {vendor: 'Moes', model: 'MS-105-M'}, ], }, + { + fingerprint: [ + { + modelID: 'TS0601', + manufacturerName: '_TZE204_5cuocqty', + }, + ], + model: 'ZDMS16-1', + vendor: 'Avatto', + description: 'Zigbee 1 channel Dimmer', + fromZigbee: [tuya.fz.datapoints], + toZigbee: [tuya.tz.datapoints], + configure: tuya.configureMagicPacket, + exposes: [ + tuya.exposes.lightBrightnessWithMinMax(), + tuya.exposes.countdown(), + tuya.exposes.switchType(), + e.power_on_behavior().withAccess(ea.STATE_SET), + ], + meta: { + tuyaDatapoints: [ + [1, 'state', tuya.valueConverter.onOff, {skip: tuya.skip.stateOnAndBrightnessPresent}], + [2, 'brightness', tuya.valueConverter.scale0_254to0_1000], + [3, 'min_brightness', tuya.valueConverter.scale0_254to0_1000], + [4, 'switch_type', tuya.valueConverter.switchType2], + [5, 'max_brightness', tuya.valueConverter.scale0_254to0_1000], + [6, 'countdown', tuya.valueConverter.countdown], + [14, 'power_on_behavior', tuya.valueConverter.powerOnBehaviorEnum], + ], + }, + }, + { + fingerprint: [ + { + modelID: 'TS0601', + manufacturerName: '_TZE204_o9gyszw2', + }, + ], + model: 'ZDMS16-2', + vendor: 'Avatto', + description: 'Zigbee 2 channels Dimmer', + fromZigbee: [tuya.fz.datapoints], + toZigbee: [tuya.tz.datapoints], + configure: tuya.configureMagicPacket, + exposes: [ + tuya.exposes.lightBrightnessWithMinMax().withEndpoint('l1'), + tuya.exposes.countdown().withEndpoint('l1'), + tuya.exposes.switchType().withEndpoint('l1'), + tuya.exposes.lightBrightnessWithMinMax().withEndpoint('l2'), + tuya.exposes.countdown().withEndpoint('l2'), + tuya.exposes.switchType().withEndpoint('l2'), + e.power_on_behavior().withAccess(ea.STATE_SET), + ], + meta: { + multiEndpoint: true, + tuyaDatapoints: [ + [1, 'state_l1', tuya.valueConverter.onOff, {skip: tuya.skip.stateOnAndBrightnessPresent}], + [2, 'brightness_l1', tuya.valueConverter.scale0_254to0_1000], + [3, 'min_brightness_l1', tuya.valueConverter.scale0_254to0_1000], + [4, 'switch_type_l1', tuya.valueConverter.switchType2], + [5, 'max_brightness_l1', tuya.valueConverter.scale0_254to0_1000], + [6, 'countdown_l1', tuya.valueConverter.countdown], + [7, 'state_l2', tuya.valueConverter.onOff, {skip: tuya.skip.stateOnAndBrightnessPresent}], + [8, 'brightness_l2', tuya.valueConverter.scale0_254to0_1000], + [9, 'min_brightness_l2', tuya.valueConverter.scale0_254to0_1000], + [10, 'switch_type_l2', tuya.valueConverter.switchType2], + [11, 'max_brightness_l2', tuya.valueConverter.scale0_254to0_1000], + [12, 'countdown_l2', tuya.valueConverter.countdown], + [14, 'power_on_behavior', tuya.valueConverter.powerOnBehaviorEnum], + ], + }, + endpoint: (device) => { + return {'l1': 1, 'l2': 1}; + }, + }, { fingerprint: tuya.fingerprint('TS0601', ['_TZE200_p0gzbqct']), model: 'TS0601_dimmer_knob', diff --git a/src/lib/tuya.ts b/src/lib/tuya.ts index 48beb6f669563..5ac98cff92afa 100644 --- a/src/lib/tuya.ts +++ b/src/lib/tuya.ts @@ -563,6 +563,7 @@ export const valueConverter = { powerOnBehavior: valueConverterBasic.lookup({'off': 0, 'on': 1, 'previous': 2}), powerOnBehaviorEnum: valueConverterBasic.lookup({'off': new Enum(0), 'on': new Enum(1), 'previous': new Enum(2)}), switchType: valueConverterBasic.lookup({'momentary': new Enum(0), 'toggle': new Enum(1), 'state': new Enum(2)}), + switchType2: valueConverterBasic.lookup({'toggle': new Enum(0), 'state': new Enum(1), 'momentary': new Enum(2)}), backlightModeOffNormalInverted: valueConverterBasic.lookup({'off': new Enum(0), 'normal': new Enum(1), 'inverted': new Enum(2)}), backlightModeOffLowMediumHigh: valueConverterBasic.lookup({'off': new Enum(0), 'low': new Enum(1), 'medium': new Enum(2), 'high': new Enum(3)}), lightType: valueConverterBasic.lookup({'led': 0, 'incandescent': 1, 'halogen': 2}),