mirror of
https://github.com/Threnklyn/esphome-dev.git
synced 2026-06-01 18:48:28 +02:00
c5dc736c53
* changed color temp from float to int Changed cold_white_temperature and warm_white temperature from a float to an integer. This makes home assisting show it correctly in the color temperature slider. If it is set to float home assistant show something like 470.8390000283847829304845 in the slider which provides an ugly ui and color temperature to as a decimal is invalid anyway. * Update esphome/components/rgbww/light.py * Update esphome/components/rgbww/light.py Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
57 lines
2.2 KiB
C++
57 lines
2.2 KiB
C++
#pragma once
|
|
|
|
#include "esphome/core/component.h"
|
|
#include "esphome/components/output/float_output.h"
|
|
#include "esphome/components/light/light_output.h"
|
|
|
|
namespace esphome {
|
|
namespace rgbww {
|
|
|
|
class RGBWWLightOutput : public light::LightOutput {
|
|
public:
|
|
void set_red(output::FloatOutput *red) { red_ = red; }
|
|
void set_green(output::FloatOutput *green) { green_ = green; }
|
|
void set_blue(output::FloatOutput *blue) { blue_ = blue; }
|
|
void set_cold_white(output::FloatOutput *cold_white) { cold_white_ = cold_white; }
|
|
void set_warm_white(output::FloatOutput *warm_white) { warm_white_ = warm_white; }
|
|
void set_cold_white_temperature(int cold_white_temperature) { cold_white_temperature_ = cold_white_temperature; }
|
|
void set_warm_white_temperature(int warm_white_temperature) { warm_white_temperature_ = warm_white_temperature; }
|
|
void set_constant_brightness(bool constant_brightness) { constant_brightness_ = constant_brightness; }
|
|
void set_color_interlock(bool color_interlock) { color_interlock_ = color_interlock; }
|
|
light::LightTraits get_traits() override {
|
|
auto traits = light::LightTraits();
|
|
traits.set_supports_brightness(true);
|
|
traits.set_supports_rgb(true);
|
|
traits.set_supports_rgb_white_value(true);
|
|
traits.set_supports_color_temperature(true);
|
|
traits.set_supports_color_interlock(this->color_interlock_);
|
|
traits.set_min_mireds(this->cold_white_temperature_);
|
|
traits.set_max_mireds(this->warm_white_temperature_);
|
|
return traits;
|
|
}
|
|
void write_state(light::LightState *state) override {
|
|
float red, green, blue, cwhite, wwhite;
|
|
state->current_values_as_rgbww(&red, &green, &blue, &cwhite, &wwhite, this->constant_brightness_,
|
|
this->color_interlock_);
|
|
this->red_->set_level(red);
|
|
this->green_->set_level(green);
|
|
this->blue_->set_level(blue);
|
|
this->cold_white_->set_level(cwhite);
|
|
this->warm_white_->set_level(wwhite);
|
|
}
|
|
|
|
protected:
|
|
output::FloatOutput *red_;
|
|
output::FloatOutput *green_;
|
|
output::FloatOutput *blue_;
|
|
output::FloatOutput *cold_white_;
|
|
output::FloatOutput *warm_white_;
|
|
int cold_white_temperature_;
|
|
int warm_white_temperature_;
|
|
bool constant_brightness_;
|
|
bool color_interlock_{false};
|
|
};
|
|
|
|
} // namespace rgbww
|
|
} // namespace esphome
|