mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 13:34:54 +01:00
Color brightness fixes (#2008)
This commit is contained in:
parent
7dd16df846
commit
fb8ec79a52
3 changed files with 21 additions and 12 deletions
|
@ -32,19 +32,26 @@ LightCall &LightCall::parse_color_json(JsonObject &root) {
|
||||||
|
|
||||||
if (root.containsKey("color")) {
|
if (root.containsKey("color")) {
|
||||||
JsonObject &color = root["color"];
|
JsonObject &color = root["color"];
|
||||||
|
// HA also encodes brightness information in the r, g, b values, so extract that and set it as color brightness.
|
||||||
|
float max_rgb = 0.0f;
|
||||||
if (color.containsKey("r")) {
|
if (color.containsKey("r")) {
|
||||||
this->set_red(float(color["r"]) / 255.0f);
|
float r = float(color["r"]) / 255.0f;
|
||||||
|
max_rgb = fmaxf(max_rgb, r);
|
||||||
|
this->set_red(r);
|
||||||
}
|
}
|
||||||
if (color.containsKey("g")) {
|
if (color.containsKey("g")) {
|
||||||
this->set_green(float(color["g"]) / 255.0f);
|
float g = float(color["g"]) / 255.0f;
|
||||||
|
max_rgb = fmaxf(max_rgb, g);
|
||||||
|
this->set_green(g);
|
||||||
}
|
}
|
||||||
if (color.containsKey("b")) {
|
if (color.containsKey("b")) {
|
||||||
this->set_blue(float(color["b"]) / 255.0f);
|
float b = float(color["b"]) / 255.0f;
|
||||||
|
max_rgb = fmaxf(max_rgb, b);
|
||||||
|
this->set_blue(b);
|
||||||
|
}
|
||||||
|
if (color.containsKey("r") || color.containsKey("g") || color.containsKey("b")) {
|
||||||
|
this->set_color_brightness(max_rgb);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (root.containsKey("color_brightness")) {
|
|
||||||
this->set_color_brightness(float(root["color_brightness"]) / 255.0f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (root.containsKey("white_value")) {
|
if (root.containsKey("white_value")) {
|
||||||
|
@ -418,7 +425,7 @@ LightCall &LightCall::set_brightness_if_supported(float brightness) {
|
||||||
}
|
}
|
||||||
LightCall &LightCall::set_color_brightness_if_supported(float brightness) {
|
LightCall &LightCall::set_color_brightness_if_supported(float brightness) {
|
||||||
if (this->parent_->get_traits().get_supports_rgb_white_value())
|
if (this->parent_->get_traits().get_supports_rgb_white_value())
|
||||||
this->set_brightness(brightness);
|
this->set_color_brightness(brightness);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
LightCall &LightCall::set_red_if_supported(float red) {
|
LightCall &LightCall::set_red_if_supported(float red) {
|
||||||
|
|
|
@ -135,12 +135,11 @@ class LightColorValues {
|
||||||
root["brightness"] = uint8_t(this->get_brightness() * 255);
|
root["brightness"] = uint8_t(this->get_brightness() * 255);
|
||||||
if (traits.get_supports_rgb()) {
|
if (traits.get_supports_rgb()) {
|
||||||
JsonObject &color = root.createNestedObject("color");
|
JsonObject &color = root.createNestedObject("color");
|
||||||
color["r"] = uint8_t(this->get_red() * 255);
|
color["r"] = uint8_t(this->get_color_brightness() * this->get_red() * 255);
|
||||||
color["g"] = uint8_t(this->get_green() * 255);
|
color["g"] = uint8_t(this->get_color_brightness() * this->get_green() * 255);
|
||||||
color["b"] = uint8_t(this->get_blue() * 255);
|
color["b"] = uint8_t(this->get_color_brightness() * this->get_blue() * 255);
|
||||||
}
|
}
|
||||||
if (traits.get_supports_rgb_white_value()) {
|
if (traits.get_supports_rgb_white_value()) {
|
||||||
root["color_brightness"] = uint8_t(this->get_color_brightness() * 255);
|
|
||||||
root["white_value"] = uint8_t(this->get_white() * 255);
|
root["white_value"] = uint8_t(this->get_white() * 255);
|
||||||
}
|
}
|
||||||
if (traits.get_supports_color_temperature())
|
if (traits.get_supports_color_temperature())
|
||||||
|
|
|
@ -18,6 +18,7 @@ LightCall LightState::make_call() { return LightCall(this); }
|
||||||
struct LightStateRTCState {
|
struct LightStateRTCState {
|
||||||
bool state{false};
|
bool state{false};
|
||||||
float brightness{1.0f};
|
float brightness{1.0f};
|
||||||
|
float color_brightness{1.0f};
|
||||||
float red{1.0f};
|
float red{1.0f};
|
||||||
float green{1.0f};
|
float green{1.0f};
|
||||||
float blue{1.0f};
|
float blue{1.0f};
|
||||||
|
@ -65,6 +66,7 @@ void LightState::setup() {
|
||||||
|
|
||||||
call.set_state(recovered.state);
|
call.set_state(recovered.state);
|
||||||
call.set_brightness_if_supported(recovered.brightness);
|
call.set_brightness_if_supported(recovered.brightness);
|
||||||
|
call.set_color_brightness_if_supported(recovered.color_brightness);
|
||||||
call.set_red_if_supported(recovered.red);
|
call.set_red_if_supported(recovered.red);
|
||||||
call.set_green_if_supported(recovered.green);
|
call.set_green_if_supported(recovered.green);
|
||||||
call.set_blue_if_supported(recovered.blue);
|
call.set_blue_if_supported(recovered.blue);
|
||||||
|
@ -244,6 +246,7 @@ void LightState::save_remote_values_() {
|
||||||
LightStateRTCState saved;
|
LightStateRTCState saved;
|
||||||
saved.state = this->remote_values.is_on();
|
saved.state = this->remote_values.is_on();
|
||||||
saved.brightness = this->remote_values.get_brightness();
|
saved.brightness = this->remote_values.get_brightness();
|
||||||
|
saved.color_brightness = this->remote_values.get_color_brightness();
|
||||||
saved.red = this->remote_values.get_red();
|
saved.red = this->remote_values.get_red();
|
||||||
saved.green = this->remote_values.get_green();
|
saved.green = this->remote_values.get_green();
|
||||||
saved.blue = this->remote_values.get_blue();
|
saved.blue = this->remote_values.get_blue();
|
||||||
|
|
Loading…
Reference in a new issue