mirror of
https://github.com/Threnklyn/esphome-dev.git
synced 2026-05-22 13:48:29 +02:00
051a1e4772
The Tuya MCU keeps its own internal minimum brightness setting. This value may not match the minimum brightness setting for ESPHome, leading to some issues: 1. Dimming is limited--on some devices the default minimum is as high as 10%, meaning the dimmest ESPHome will go is still quite bright. 2. HA will allow a user to set a value below the MCU minimum, but the MCU will reject it and keep the previous setting, so the UI is confusing. This PR adds a setting to configure the datapoint for setting the MCU minimum brightness. If the setting is set, then ESPHome will synchronize the MCU's minimum brightness with the one configured for ESPHome on startup.
49 lines
2.1 KiB
Python
49 lines
2.1 KiB
Python
from esphome.components import light
|
|
import esphome.config_validation as cv
|
|
import esphome.codegen as cg
|
|
from esphome.const import CONF_OUTPUT_ID, CONF_MIN_VALUE, CONF_MAX_VALUE, CONF_GAMMA_CORRECT, \
|
|
CONF_DEFAULT_TRANSITION_LENGTH, CONF_SWITCH_DATAPOINT
|
|
from .. import tuya_ns, CONF_TUYA_ID, Tuya
|
|
|
|
DEPENDENCIES = ['tuya']
|
|
|
|
CONF_DIMMER_DATAPOINT = "dimmer_datapoint"
|
|
CONF_MIN_VALUE_DATAPOINT = "min_value_datapoint"
|
|
|
|
TuyaLight = tuya_ns.class_('TuyaLight', light.LightOutput, cg.Component)
|
|
|
|
CONFIG_SCHEMA = cv.All(light.BRIGHTNESS_ONLY_LIGHT_SCHEMA.extend({
|
|
cv.GenerateID(CONF_OUTPUT_ID): cv.declare_id(TuyaLight),
|
|
cv.GenerateID(CONF_TUYA_ID): cv.use_id(Tuya),
|
|
cv.Optional(CONF_DIMMER_DATAPOINT): cv.uint8_t,
|
|
cv.Optional(CONF_MIN_VALUE_DATAPOINT): cv.uint8_t,
|
|
cv.Optional(CONF_SWITCH_DATAPOINT): cv.uint8_t,
|
|
cv.Optional(CONF_MIN_VALUE): cv.int_,
|
|
cv.Optional(CONF_MAX_VALUE): cv.int_,
|
|
|
|
# Change the default gamma_correct and default transition length settings.
|
|
# The Tuya MCU handles transitions and gamma correction on its own.
|
|
cv.Optional(CONF_GAMMA_CORRECT, default=1.0): cv.positive_float,
|
|
cv.Optional(CONF_DEFAULT_TRANSITION_LENGTH, default='0s'): cv.positive_time_period_milliseconds,
|
|
}).extend(cv.COMPONENT_SCHEMA), cv.has_at_least_one_key(CONF_DIMMER_DATAPOINT,
|
|
CONF_SWITCH_DATAPOINT))
|
|
|
|
|
|
def to_code(config):
|
|
var = cg.new_Pvariable(config[CONF_OUTPUT_ID])
|
|
yield cg.register_component(var, config)
|
|
yield light.register_light(var, config)
|
|
|
|
if CONF_DIMMER_DATAPOINT in config:
|
|
cg.add(var.set_dimmer_id(config[CONF_DIMMER_DATAPOINT]))
|
|
if CONF_MIN_VALUE_DATAPOINT in config:
|
|
cg.add(var.set_min_value_datapoint_id(config[CONF_MIN_VALUE_DATAPOINT]))
|
|
if CONF_SWITCH_DATAPOINT in config:
|
|
cg.add(var.set_switch_id(config[CONF_SWITCH_DATAPOINT]))
|
|
if CONF_MIN_VALUE in config:
|
|
cg.add(var.set_min_value(config[CONF_MIN_VALUE]))
|
|
if CONF_MAX_VALUE in config:
|
|
cg.add(var.set_max_value(config[CONF_MAX_VALUE]))
|
|
paren = yield cg.get_variable(config[CONF_TUYA_ID])
|
|
cg.add(var.set_tuya_parent(paren))
|