Add constant_brightness property to CWWW/RGBWW lights (#1007)

Fixes https://github.com/esphome/feature-requests/issues/460

Co-authored-by: Otto Winter <otto@otto-winter.com>
This commit is contained in:
kroimon
2020-04-08 14:31:23 +02:00
committed by GitHub
parent dea6675c21
commit 8613c02d5c
8 changed files with 41 additions and 16 deletions
+4
View File
@@ -8,6 +8,8 @@ from esphome.const import CONF_BLUE, CONF_GREEN, CONF_RED, CONF_OUTPUT_ID, CONF_
rgbww_ns = cg.esphome_ns.namespace('rgbww')
RGBWWLightOutput = rgbww_ns.class_('RGBWWLightOutput', light.LightOutput)
CONF_CONSTANT_BRIGHTNESS = 'constant_brightness'
CONFIG_SCHEMA = light.RGB_LIGHT_SCHEMA.extend({
cv.GenerateID(CONF_OUTPUT_ID): cv.declare_id(RGBWWLightOutput),
cv.Required(CONF_RED): cv.use_id(output.FloatOutput),
@@ -17,6 +19,7 @@ CONFIG_SCHEMA = light.RGB_LIGHT_SCHEMA.extend({
cv.Required(CONF_WARM_WHITE): cv.use_id(output.FloatOutput),
cv.Required(CONF_COLD_WHITE_COLOR_TEMPERATURE): cv.color_temperature,
cv.Required(CONF_WARM_WHITE_COLOR_TEMPERATURE): cv.color_temperature,
cv.Optional(CONF_CONSTANT_BRIGHTNESS, default=False): cv.boolean,
})
@@ -38,3 +41,4 @@ def to_code(config):
wwhite = yield cg.get_variable(config[CONF_WARM_WHITE])
cg.add(var.set_warm_white(wwhite))
cg.add(var.set_warm_white_temperature(config[CONF_WARM_WHITE_COLOR_TEMPERATURE]))
cg.add(var.set_constant_brightness(config[CONF_CONSTANT_BRIGHTNESS]))
@@ -16,6 +16,7 @@ class RGBWWLightOutput : public light::LightOutput {
void set_warm_white(output::FloatOutput *warm_white) { warm_white_ = warm_white; }
void set_cold_white_temperature(float cold_white_temperature) { cold_white_temperature_ = cold_white_temperature; }
void set_warm_white_temperature(float warm_white_temperature) { warm_white_temperature_ = warm_white_temperature; }
void set_constant_brightness(bool constant_brightness) { constant_brightness_ = constant_brightness; }
light::LightTraits get_traits() override {
auto traits = light::LightTraits();
traits.set_supports_brightness(true);
@@ -28,7 +29,7 @@ class RGBWWLightOutput : public light::LightOutput {
}
void write_state(light::LightState *state) override {
float red, green, blue, cwhite, wwhite;
state->current_values_as_rgbww(&red, &green, &blue, &cwhite, &wwhite);
state->current_values_as_rgbww(&red, &green, &blue, &cwhite, &wwhite, this->constant_brightness_);
this->red_->set_level(red);
this->green_->set_level(green);
this->blue_->set_level(blue);
@@ -44,6 +45,7 @@ class RGBWWLightOutput : public light::LightOutput {
output::FloatOutput *warm_white_;
float cold_white_temperature_;
float warm_white_temperature_;
bool constant_brightness_;
};
} // namespace rgbww