1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-06 13:22:19 +01:00

fix: enhance dynamic_lamp to include output ID in available outputs and update mode naming

This commit is contained in:
Oliver Kleinecke
2025-02-15 12:31:50 +01:00
parent cda2f9e846
commit 41e37fcebc
3 changed files with 12 additions and 9 deletions

View File

@@ -19,6 +19,7 @@ async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID]) var = cg.new_Pvariable(config[CONF_ID])
await cg.register_component(var, config) await cg.register_component(var, config)
for outputPointer in config.get(CONF_AVAILABLE_OUTPUTS, []): for outputPointer in config.get(CONF_AVAILABLE_OUTPUTS, []):
idstr_ = str(outputPointer)
output_ = await cg.get_variable(outputPointer) output_ = await cg.get_variable(outputPointer)
cg.add(var.add_available_output(output_)) cg.add(var.add_available_output(output_, idstr_))
cg.add(var.set_save_mode(config[CONF_SAVE_MODE])) cg.add(var.set_save_mode(config[CONF_SAVE_MODE]))

View File

@@ -53,7 +53,7 @@ void DynamicLamp::loop() {
case MODE_STATIC: case MODE_STATIC:
// Static // Static
break; break;
case MODE_PERCENT: case MODE_PERCENTAGE:
// Percent // Percent
break; break;
case MODE_FUNCTION: case MODE_FUNCTION:
@@ -84,8 +84,7 @@ void DynamicLamp::dump_config() {
} }
for (uint8_t i = 0; i < 16; i++) { for (uint8_t i = 0; i < 16; i++) {
if (this->available_outputs_[i].active) { if (this->available_outputs_[i].active) {
ESP_LOGCONFIG(TAG, "Using output with id .. as output number %" PRIu8 "", i); ESP_LOGCONFIG(TAG, "Using output with id %s as output number %" PRIu8 "", this->available_outputs_[i].output_id.c_str(), i);
this->available_outputs_[i].output->set_level(0.256f);
} }
} }
} }
@@ -94,15 +93,16 @@ void DynamicLamp::set_save_mode(uint8_t save_mode) {
this->save_mode_ = save_mode; this->save_mode_ = save_mode;
} }
void DynamicLamp::add_available_output(output::FloatOutput * output) { void DynamicLamp::add_available_output(output::FloatOutput * output, std::string output_id) {
uint8_t counter = 0; uint8_t counter = 0;
while (this->available_outputs_[counter].active) { while (this->available_outputs_[counter].active) {
counter++; counter++;
} }
this->available_outputs_[counter] = LinkedOutput{ this->available_outputs_[counter] = LinkedOutput{
true, true,
output, output_id,
counter, counter,
output,
0, 0, 1.0, false 0, 0, 1.0, false
}; };
counter++; counter++;

View File

@@ -14,14 +14,16 @@ enum SupportedSaveModes : uint8_t {
enum LinkedOutputModeIdx : uint8_t { enum LinkedOutputModeIdx : uint8_t {
MODE_EQUAL = 0, MODE_EQUAL = 0,
MODE_STATIC = 1, MODE_STATIC = 1,
MODE_PERCENT = 2, MODE_PERCENTAGE = 2,
MODE_FUNCTION = 3 MODE_FUNCTION = 3
}; };
struct LinkedOutput { struct LinkedOutput {
bool active = false; bool active = false;
output::FloatOutput *output; std::string output_id;
uint8_t output_index; uint8_t output_index;
output::FloatOutput *output;
float state;
uint8_t mode = 0; uint8_t mode = 0;
optional<float> min_value; optional<float> min_value;
optional<float> max_value; optional<float> max_value;
@@ -38,7 +40,7 @@ class DynamicLamp : public Component {
void setup() override; void setup() override;
void loop() override; void loop() override;
void dump_config() override; void dump_config() override;
void add_available_output(output::FloatOutput * output); void add_available_output(output::FloatOutput * output, std::string output_id);
void set_save_mode(uint8_t save_mode); void set_save_mode(uint8_t save_mode);
protected: protected: