diff --git a/components/showcase_component/__init__.py b/components/showcase_component/__init__.py index f3ace6e..441448d 100644 --- a/components/showcase_component/__init__.py +++ b/components/showcase_component/__init__.py @@ -1,6 +1,6 @@ import esphome.codegen as cg import esphome.config_validation as cv -from esphome.components import i2c, sensor, output +from esphome.components import i2c, sensor, monochromatic, output from esphome.const import CONF_ID DEPENDENCIES = ['i2c'] @@ -16,6 +16,8 @@ CONFIG_SCHEMA = cv.Schema( cv.Required("upper"): cv.use_id(output.FloatOutput), cv.Required("lower"): cv.use_id(output.FloatOutput) + # cv.Required("upper"): cv.use_id(monochromatic.MonochromaticLightOutput), + # cv.Required("lower"): cv.use_id(monochromatic.MonochromaticLightOutput) } ).extend(cv.COMPONENT_SCHEMA).extend(i2c.i2c_device_schema(CONF_I2C_ADDR)) diff --git a/components/showcase_component/showcase_component.cpp b/components/showcase_component/showcase_component.cpp index 32dcc4a..e34e028 100644 --- a/components/showcase_component/showcase_component.cpp +++ b/components/showcase_component/showcase_component.cpp @@ -16,17 +16,23 @@ void ShowcaseComponent::loop() { /* ESP_LOGI(TAG, "READ value: %d", data); */ if(data != 0){ if(data & 1){ - this->s = Off; - // TODO: turn off leds + this->write_state(Off); } else if ( data & 2 ){ - this->s = Auto; + this->write_state(Auto); } else if ( data & 4 ){ - this->s = On; - // TODO: turn on led + this->write_state(On); } - if(this->s == Auto && data & 8){ - // TODO: turn on led + if(this->s_ == Auto) { + if(data & 8){ + // TODO: turn on led + this->upper_->set_level(this->b_upper_); + this->lower_->set_level(this->b_lower_); + } + else{ + this->upper_->set_level(0.0); + this->lower_->set_level(0.0); + } } } } diff --git a/components/showcase_component/showcase_component.h b/components/showcase_component/showcase_component.h index 79ce5d1..522f2bc 100644 --- a/components/showcase_component/showcase_component.h +++ b/components/showcase_component/showcase_component.h @@ -13,25 +13,57 @@ enum state{ Off, Auto, On }; class ShowcaseComponent : public i2c::I2CDevice, public Component { public: - state s; - void setup() override; void loop() override; void dump_config() override; void set_upper(output::FloatOutput *upper) {this->upper_ = upper;} void set_lower(output::FloatOutput *lower) {this->lower_ = lower;} + /* void set_upper(monochromatic::MonochromaticLightOutput *upper) {this->upper_ = upper;} */ + /* void set_lower(monochromatic::MonochromaticLightOutput *lower) {this->lower_ = lower;} */ + + void write_state(state s){ + switch(s) { + On: + this->set_level(this->b_upper_, this->b_lower_); + break; + Off: + this->upper_->set_level(0.0); + this->lower_->set_level(0.0); + break; + Auto: + break; + } + } + + void set_level(float bright){ + this->set_level(bright, bright); + /* this->upper_->write_state(upper); */ + /* this->lower_->write_state(lower); */ + } - void write_state(float upper, float lower){ - this->upper_->set_level(upper); - this->lower_->set_level(lower); + void set_level(float upper, float lower){ + this->set_level_upper(upper); + this->set_level_lower(lower); /* this->upper_->write_state(upper); */ /* this->lower_->write_state(lower); */ } + void set_level_upper(float bright){ + this->b_upper_ = bright; + this->upper_->set_level(bright); + } + + void set_level_lower(float bright){ + this->b_lower_ = bright; + this->lower_->set_level(bright); + } protected: output::FloatOutput *upper_; output::FloatOutput *lower_; + state s_; + float b_upper_ = 1.0; + float b_lower_ = 1.0; /* monochromatic::MonochromaticLightOutput *upper_; */ /* monochromatic::MonochromaticLightOutput *lower_; */ };