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:
@@ -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]))
|
||||||
|
@@ -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++;
|
||||||
|
@@ -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:
|
||||||
|
Reference in New Issue
Block a user