diff --git a/drivers/light/device.ts b/drivers/light/device.ts index ad1128ea..8730e3a2 100644 --- a/drivers/light/device.ts +++ b/drivers/light/device.ts @@ -340,7 +340,7 @@ export default class TuyaOAuth2DeviceLight extends TuyaOAuth2Device { light_saturation = this.getCapabilityValue('light_saturation'), light_temperature = this.getCapabilityValue('light_temperature'), }): Promise { - const commands = []; + const commands: TuyaCommand[] = []; // Light mode is not available when a light only has temperature or color if (!this.hasCapability('light_mode')) { @@ -351,6 +351,13 @@ export default class TuyaOAuth2DeviceLight extends TuyaOAuth2Device { } } + if (this.hasTuyaCapability('work_mode')) { + commands.push({ + code: 'work_mode', + value: light_mode === 'color' ? 'colour' : 'white', + }); + } + if (light_mode === 'color') { if (this.hasTuyaCapability('colour_data')) { commands.push({ diff --git a/drivers/light/driver.ts b/drivers/light/driver.ts index 7257235b..8d060369 100644 --- a/drivers/light/driver.ts +++ b/drivers/light/driver.ts @@ -247,17 +247,27 @@ module.exports = class TuyaOAuth2DriverLight extends TuyaOAuth2Driver { const values = JSON.parse(functionSpecification.values); if (tuyaCapability === 'bright_value') { - props.store.tuya_brightness = values; + props.store.tuya_brightness = { ...props.store.tuya_brightness, ...values }; } else if (tuyaCapability === 'bright_value_v2') { - props.store.tuya_brightness_v2 = values; + props.store.tuya_brightness_v2 = { ...props.store.tuya_brightness_v2, ...values }; } else if (tuyaCapability === 'temp_value') { - props.store.tuya_temperature = values; + props.store.tuya_temperature = { ...props.store.tuya_temperature, ...values }; } else if (tuyaCapability === 'temp_value_v2') { - props.store.tuya_temperature_v2 = values; + props.store.tuya_temperature_v2 = { ...props.store.tuya_temperature_v2, ...values }; } else if (tuyaCapability === 'colour_data') { - props.store.tuya_colour = values; + for (const index of ['h', 's', 'v']) { + props.store.tuya_colour[index] = { + ...props.store.tuya_colour[index], + ...values?.[index], + }; + } } else if (tuyaCapability === 'colour_data_v2') { - props.store.tuya_colour_v2 = values; + for (const index of ['h', 's', 'v']) { + props.store.tuya_colour_v2[index] = { + ...props.store.tuya_colour_v2[index], + ...values?.[index], + }; + } } }