diff --git a/src/devices/neo.ts b/src/devices/neo.ts index 7182e193821d2..d756637673de1 100644 --- a/src/devices/neo.ts +++ b/src/devices/neo.ts @@ -36,7 +36,7 @@ const definitions: Definition[] = [ }, }, { - fingerprint: tuya.fingerprint('TS0601', ['_TZE200_t1blo2bj', '_TZE204_t1blo2bj', '_TZE200_nlrfgpny']), + fingerprint: tuya.fingerprint('TS0601', ['_TZE200_t1blo2bj', '_TZE204_t1blo2bj']), zigbeeModel: ['1blo2bj', 'lrfgpny'], model: 'NAS-AB02B2', vendor: 'Neo', @@ -51,7 +51,6 @@ const definitions: Definition[] = [ e.enum('volume', ea.STATE_SET, ['low', 'medium', 'high']), e.numeric('battpercentage', ea.STATE).withUnit('%'), ], - whiteLabel: [tuya.whitelabel('Neo', 'NAS-AB06B2', 'Outdoor solar alarm', ['_TZE200_nlrfgpny'])], onEvent: tuya.onEventSetLocalTime, configure: async (device, coordinatorEndpoint, logger) => { const endpoint = device.getEndpoint(1); @@ -85,6 +84,40 @@ const definitions: Definition[] = [ await endpoint.command('manuSpecificTuya', 'mcuVersionRequest', {'seq': 0x0002}); }, }, + { + fingerprint: tuya.fingerprint('TS0601', ['_TZE200_nlrfgpny']), + model: 'NAS-AB06B2', + vendor: 'Neo', + description: 'Outdoor solar alarm', + fromZigbee: [tuya.fz.datapoints], + toZigbee: [tuya.tz.datapoints], + configure: tuya.configureMagicPacket, + exposes: [ + e.enum('alarm_state', ea.STATE, ['alarm_sound', 'alarm_light', 'alarm_sound_light', 'normal']).withDescription('Alarm status'), + e.binary('alarm_switch', ea.STATE_SET, 'ON', 'OFF').withDescription('Enable alarm'), + e.binary('tamper_alarm_switch', ea.STATE_SET, 'ON', 'OFF').withDescription('Enable tamper alarm'), + e.binary('tamper_alarm', ea.STATE, 'ON', 'OFF').withDescription('Indicates whether the device is tampered'), + e.enum('alarm_melody', ea.STATE_SET, ['melody_1', 'melody_2', 'melody_3']).withDescription('Alarm sound effect'), + e.enum('alarm_mode', ea.STATE_SET, ['alarm_sound', 'alarm_light', 'alarm_sound_light']).withDescription('Alarm mode'), + e.numeric('alarm_time', ea.STATE_SET).withValueMin(1).withValueMax(60).withValueStep(1).withUnit('min') + .withDescription('Alarm duration in minutes'), + e.binary('charging', ea.STATE, true, false).withDescription('Charging status'), + e.battery(), + ], + meta: { + tuyaDatapoints: [ + [1, 'alarm_state', tuya.valueConverterBasic.lookup({'alarm_sound': 0, 'alarm_light': 1, 'alarm_sound_light': 2, 'normal': 3})], + [13, 'alarm_switch', tuya.valueConverter.onOff], + [101, 'tamper_alarm_switch', tuya.valueConverter.onOff], + [20, 'tamper_alarm', tuya.valueConverter.onOff], + [21, 'alarm_melody', tuya.valueConverterBasic.lookup({'melody_1': 0, 'melody_2': 1, 'melody_3': 2})], + [102, 'alarm_mode', tuya.valueConverterBasic.lookup({'alarm_sound': 0, 'alarm_light': 1, 'alarm_sound_light': 2})], + [7, 'alarm_time', tuya.valueConverter.raw], + [6, 'charging', tuya.valueConverter.raw], + [15, 'battery', tuya.valueConverter.raw], + ], + }, + }, ]; module.exports = definitions; diff --git a/src/lib/tuya.ts b/src/lib/tuya.ts index 1eb58e19173f0..7612890357512 100644 --- a/src/lib/tuya.ts +++ b/src/lib/tuya.ts @@ -836,8 +836,8 @@ const tuyaTz = { } as Tz.Converter, datapoints: { key: [ - 'temperature_unit', 'temperature_calibration', 'humidity_calibration', 'alarm_switch', - 'state', 'brightness', 'min_brightness', 'max_brightness', 'power_on_behavior', 'position', + 'temperature_unit', 'temperature_calibration', 'humidity_calibration', 'alarm_switch', 'tamper_alarm_switch', + 'state', 'brightness', 'min_brightness', 'max_brightness', 'power_on_behavior', 'position', 'alarm_melody', 'alarm_mode', 'countdown', 'light_type', 'silence', 'self_test', 'child_lock', 'open_window', 'open_window_temperature', 'frost_protection', 'system_mode', 'heating_stop', 'current_heating_setpoint', 'local_temperature_calibration', 'preset', 'boost_timeset_countdown', 'holiday_start_stop', 'holiday_temperature', 'comfort_temperature', 'eco_temperature', 'working_day',