#pragma once #include "esphome/core/entity_base.h" #include "esphome/core/log.h" #include "esphome/core/component.h" #include "esphome/components/i2c/i2c.h" #include "esphome/components/output/float_output.h" #include "esphome/components/light/light_output.h" namespace esphome { namespace showcase_component { /* class Output: public light::LightOutput{ */ /* public: */ /* void set_output(output::FloatOutput *output) { output_ = output; } */ /* light::LightTraits get_traits() override { */ /* auto traits = light::LightTraits(); */ /* traits.set_supported_color_modes({light::ColorMode::BRIGHTNESS}); */ /* return traits; */ /* } */ /* void write_state(light::LightState *state) override { */ /* float bright; */ /* state->current_values_as_brightness(&bright); */ /* this->output_->set_level(bright); */ /* } */ /* protected: */ /* output::FloatOutput *output_; */ /* }; */ enum State{ Off, Auto, On }; static const char *TAG = "showcase_component.component"; class ShowcaseComponent : public i2c::I2CDevice, public Component, public EntityBase, public light::LightOutput { public: State s_{Off}; float b_upper_{1.0}; float b_lower_{1.0}; void turn_on(); void turn_off(); void publish_state(){ this->remote_values_callback_.call(); } void add_new_remote_values_callback(std::function &&send_callback) { this->remote_values_callback_.add(std::move(send_callback)); } 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 write_state(State s){ ESP_LOGI(TAG, "Write_state"); this->s_ = s; switch(s) { case(On): /* ESP_LOGI(TAG, "Set to On"); */ this->set_level(this->b_upper_, this->b_lower_); break; case(Off): /* ESP_LOGI(TAG, "Set to Off"); */ this->upper_->set_level(0.0); this->lower_->set_level(0.0); break; case(Auto): /* ESP_LOGI(TAG, "Set to Auto"); */ break; } } void set_level(float bright){ this->set_level(bright, bright); /* this->upper_->write_state(upper); */ /* this->lower_->write_state(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: CallbackManager remote_values_callback_{}; output::FloatOutput *upper_; output::FloatOutput *lower_; }; } // namespace empty_i2c_component } // namespace esphome