diff --git a/esphome/components/dynamic_lamp/__init__.py b/esphome/components/dynamic_lamp/__init__.py index 0af7e635b1..53d6f71aa4 100644 --- a/esphome/components/dynamic_lamp/__init__.py +++ b/esphome/components/dynamic_lamp/__init__.py @@ -6,8 +6,10 @@ dynamic_lamp_ns = cg.esphome_ns.namespace('dynamic_lamp') DynamicLamp = dynamic_lamp_ns.class_('DynamicLamp', cg.Component) CONF_SAVE_MODE = 'save_mode' +CONF_AVAILABLE_OUTPUTS = 'available_outputs' CONFIG_SCHEMA = cv.Schema({ cv.GenerateID(): cv.declare_id(DynamicLamp), + cv.Required(CONF_AVAILABLE_OUTPUTS): cv.ensure_list(cv.string), cv.Optional(CONF_SAVE_MODE, default=0): cv.int_range(0, 1), }).extend(cv.COMPONENT_SCHEMA) @@ -15,4 +17,5 @@ CONFIG_SCHEMA = cv.Schema({ async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_component(var, config) + cg.add(var.set_available_outputs(config[CONF_AVAILABLE_OUTPUTS])) cg.add(var.set_save_mode(config[CONF_SAVE_MODE])) diff --git a/esphome/components/dynamic_lamp/dynamic_lamp.cpp b/esphome/components/dynamic_lamp/dynamic_lamp.cpp index df89a1827e..c54665b632 100644 --- a/esphome/components/dynamic_lamp/dynamic_lamp.cpp +++ b/esphome/components/dynamic_lamp/dynamic_lamp.cpp @@ -1,4 +1,5 @@ #include "esphome/core/log.h" +#include "esphome/core/helpers.h" #include "dynamic_lamp.h" namespace esphome { @@ -21,10 +22,38 @@ void DynamicLamp::setup() { } void DynamicLamp::loop() { - + uint8_t i = 0; + for (i = 0; i < this->lamp_count_; i++) { + if (this->active_lamps_[i].active) { + uint8_t j = 0; + for (j = 0; j < 16; j++) { + if (this->active_lamps_[i].used_outputs[j].active) { + if (this->active_lamps_[i].used_outputs[j].update_level) { + // Update level + switch (this->active_lamps_[i].used_outputs[j].mode) { + case MODE_EQUAL: + // Equal + break; + case MODE_STATIC: + // Static + break; + case MODE_PERCENT: + // Percent + break; + case MODE_FUNCTION: + // Function + break; + default: + break; + } + } + } + } + } + } } -void DynamicLamp::dump_config(){ +void DynamicLamp::dump_config() { ESP_LOGCONFIG(TAG, "Dynamic Lamp feature loaded"); switch(this->save_mode_) { case SAVE_MODE_NONE: @@ -37,12 +66,25 @@ void DynamicLamp::dump_config(){ ESP_LOGCONFIG(TAG, "Currently only NONE(0) && FRAM(1) save modes supported, ignoring value %" PRIu8 " and defaulting to NONE!", this->save_mode_); this->save_mode_ = 0; } + for (uint8_t i = 0; i < 16; i++) { + if (this->available_outputs_[i] != "") { + ESP_LOGCONFIG(TAG, "Using output with id %s as output number %" PRIu8 "", &this->available_outputs_[i], i); + } + } } void DynamicLamp::set_save_mode(uint8_t save_mode) { this->save_mode_ = save_mode; } +void DynamicLamp::set_available_outputs(std::list output_list) { + uint8_t i = 0; + for (std::list::iterator it = output_list.begin(); it != output_list.end(); ++it) { + this->available_outputs_[i] = *it; + i++; + } + +} void DynamicLamp::set_lamp_count(uint8_t lamp_count) { } diff --git a/esphome/components/dynamic_lamp/dynamic_lamp.h b/esphome/components/dynamic_lamp/dynamic_lamp.h index bd88b841d7..021d9669f8 100644 --- a/esphome/components/dynamic_lamp/dynamic_lamp.h +++ b/esphome/components/dynamic_lamp/dynamic_lamp.h @@ -19,6 +19,7 @@ enum LinkedOutputModeIdx : uint8_t { struct LinkedOutput { bool active = false; + char* output_id = ""; uint8_t mode = 0; optional min_value; optional max_value; @@ -36,6 +37,7 @@ class DynamicLamp : public Component { void loop() override; void dump_config() override; void set_lamp_count(uint8_t lamp_count); + void set_available_outputs(std::list output_list); void set_save_mode(uint8_t save_mode); protected: @@ -43,6 +45,7 @@ class DynamicLamp : public Component { void set_lamp_values_(uint8_t lamp_number, bool active, uint16_t selected_outputs, uint8_t mode, uint8_t mode_value); CombinedLamp active_lamps_[16]; + std::string available_outputs_[16] = { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }; uint8_t lamp_count_; uint8_t save_mode_; };