1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-16 10:12:21 +01:00

refactor: rename DynamicLamp to DynamicLampComponent for improved clarity and consistency

This commit is contained in:
Oliver Kleinecke
2025-02-15 15:14:30 +01:00
parent c1b5139f01
commit 60c270476f
6 changed files with 136 additions and 17 deletions

View File

@@ -3,13 +3,17 @@ from esphome.components import output
import esphome.config_validation as cv
from esphome.const import CONF_ID
CODEOWNERS = ["@p1ngb4ck"]
MULTI_CONF = False
dynamic_lamp_ns = cg.esphome_ns.namespace('dynamic_lamp')
DynamicLamp = dynamic_lamp_ns.class_('DynamicLamp', cg.Component)
DynamicLampComponent = dynamic_lamp_ns.class_('DynamicLampComponent', cg.Component)
CONF_DYNAMIC_LAMP_ID = "dynamic_lamp_id"
CONF_SAVE_MODE = 'save_mode'
CONF_AVAILABLE_OUTPUTS = 'available_outputs'
CONFIG_SCHEMA = cv.Schema({
cv.GenerateID(): cv.declare_id(DynamicLamp),
cv.GenerateID(): cv.declare_id(DynamicLampComponent),
cv.Required(CONF_AVAILABLE_OUTPUTS): [cv.use_id(output.FloatOutput)],
cv.Optional(CONF_SAVE_MODE, default=0): cv.int_range(0, 1),
}).extend(cv.COMPONENT_SCHEMA)

View File

@@ -16,11 +16,11 @@ namespace dynamic_lamp {
static const char *TAG = "dynamic_lamp";
void DynamicLamp::setup() {
void DynamicLampComponent::setup() {
this->begin();
}
void DynamicLamp::begin() {
void DynamicLampComponent::begin() {
uint8_t i = 0;
bool valid = true;
if(this->save_mode_ == 0) {
@@ -41,7 +41,7 @@ void DynamicLamp::begin() {
*/
}
void DynamicLamp::loop() {
void DynamicLampComponent::loop() {
uint8_t i = 0;
for (i = 0; i < this->lamp_count_; i++) {
if (this->active_lamps_[i].active) {
@@ -73,7 +73,7 @@ void DynamicLamp::loop() {
}
}
void DynamicLamp::dump_config() {
void DynamicLampComponent::dump_config() {
ESP_LOGCONFIG(TAG, "Dynamic Lamp feature loaded");
switch(this->save_mode_) {
case SAVE_MODE_NONE:
@@ -93,11 +93,11 @@ void DynamicLamp::dump_config() {
}
}
void DynamicLamp::set_save_mode(uint8_t save_mode) {
void DynamicLampComponent::set_save_mode(uint8_t save_mode) {
this->save_mode_ = save_mode;
}
void DynamicLamp::add_available_output(output::FloatOutput * output, std::string output_id) {
void DynamicLampComponent::add_available_output(output::FloatOutput * output, std::string output_id) {
uint8_t counter = 0;
while (this->available_outputs_[counter].available) {
counter++;
@@ -113,7 +113,7 @@ void DynamicLamp::add_available_output(output::FloatOutput * output, std::string
counter++;
}
void DynamicLamp::add_lamp(std::string name) {
void DynamicLampComponent::add_lamp(std::string name) {
if (this->lamp_count_ < 15) {
this->lamp_count_++;
this->active_lamps_[this->lamp_count_].active = true;
@@ -128,7 +128,7 @@ void DynamicLamp::add_lamp(std::string name) {
this->status_set_warning();
}
void DynamicLamp::remove_lamp(std::string lamp_name) {
void DynamicLampComponent::remove_lamp(std::string lamp_name) {
uint8_t i = 0;
while (i < this->lamp_count_) {
if (this->active_lamps_[i].name == lamp_name) {
@@ -144,7 +144,7 @@ void DynamicLamp::remove_lamp(std::string lamp_name) {
ESP_LOGW(TAG, "No lamp with name %s defined !", lamp_name.c_str());
}
void DynamicLamp::add_output_to_lamp(std::string lamp_name, LinkedOutput *output) {
void DynamicLampComponent::add_output_to_lamp(std::string lamp_name, LinkedOutput *output) {
uint8_t i = 0;
while (i < 16) {
if (this->active_lamps_[i].name == lamp_name) {
@@ -159,7 +159,7 @@ void DynamicLamp::add_output_to_lamp(std::string lamp_name, LinkedOutput *output
ESP_LOGW(TAG, "No lamp with name %s defined !", lamp_name.c_str());
}
void DynamicLamp::remove_output_from_lamp(std::string lamp_name, LinkedOutput *output) {
void DynamicLampComponent::remove_output_from_lamp(std::string lamp_name, LinkedOutput *output) {
uint8_t i = 0;
while (i < 16) {
if (this->active_lamps_[i].name == lamp_name) {
@@ -174,7 +174,7 @@ void DynamicLamp::remove_output_from_lamp(std::string lamp_name, LinkedOutput *o
ESP_LOGW(TAG, "No lamp with name %s defined !", lamp_name.c_str());
}
std::array<bool, 16> DynamicLamp::get_lamp_outputs(uint8_t lamp_number) {
std::array<bool, 16> DynamicLampComponent::get_lamp_outputs(uint8_t lamp_number) {
std::array<bool, 16> bool_array;
for (uint8_t i = 0; i < 16; i++) {
bool_array[i] = this->active_lamps_[lamp_number].used_outputs[i];
@@ -182,7 +182,7 @@ std::array<bool, 16> DynamicLamp::get_lamp_outputs(uint8_t lamp_number) {
return bool_array;
}
std::array<bool, 16> DynamicLamp::get_lamp_outputs_by_name(std::string lamp_name) {
std::array<bool, 16> DynamicLampComponent::get_lamp_outputs_by_name(std::string lamp_name) {
uint8_t i = 0;
std::array<bool, 16> bool_array;
for (i = 0; i < this->lamp_count_; i++) {
@@ -195,11 +195,15 @@ std::array<bool, 16> DynamicLamp::get_lamp_outputs_by_name(std::string lamp_name
return bool_array;
}
void DynamicLamp::set_lamp_values_(uint8_t lamp_number, bool active, uint16_t selected_outputs, uint8_t mode, uint8_t mode_value) {
void DynamicLampComponent::set_lamp_level(std::string lamp_name, float state) {
}
void DynamicLampComponent::set_lamp_values_(uint8_t lamp_number, bool active, uint16_t selected_outputs, uint8_t mode, uint8_t mode_value) {
}
void DynamicLamp::restore_lamp_values_(uint8_t lamp_number) {
void DynamicLampComponent::restore_lamp_values_(uint8_t lamp_number) {
this->active_lamps_[lamp_number].active = false;
}

View File

@@ -31,14 +31,36 @@ struct LinkedOutput {
bool update_level = false;
};
enum DynamicLampIdx : uint8_t {
LAMP_1 = 0,
LAMP_2 = 1,
LAMP_3 = 2,
LAMP_4 = 3,
LAMP_5 = 4,
LAMP_6 = 5,
LAMP_7 = 6,
LAMP_8 = 7,
LAMP_9 = 8,
LAMP_10 = 9,
LAMP_11 = 10,
LAMP_12 = 11,
LAMP_13 = 12,
LAMP_14 = 13,
LAMP_15 = 14,
LAMP_16 = 15,
};
struct CombinedLamp {
bool active = false;
std::string name = "";
uint8_t lamp_index;
float state;
bool used_outputs[16];
};
class DynamicLamp : public Component {
class DynamicLamp;
class DynamicLampComponent : public Component {
public:
void setup() override;
void loop() override;
@@ -54,6 +76,8 @@ class DynamicLamp : public Component {
std::array<bool, 16> get_lamp_outputs_by_name(std::string lamp_name);
protected:
friend class DynamicLamp;
void set_lamp_level(std::string lamp_name, float state);
void restore_lamp_values_(uint8_t lamp_number);
void set_lamp_values_(uint8_t lamp_number, bool active, uint16_t selected_outputs, uint8_t mode, uint8_t mode_value);

View File

@@ -0,0 +1,50 @@
import esphome.codegen as cg # noqa: I001
from esphome.components import output
import esphome.config_validation as cv
from esphome.const import CONF_CHANNEL, CONF_ID
from .. import CONF_DYNAMIC_LAMP_ID, DynamicLampComponent, dynamic_lamp_ns
DEPENDENCIES = ["dynamic_lamp"]
DynamicLamp = dynamic_lamp_ns.class_(
"DynamicLamp", output.FloatOutput, cg.Parented.template(DynamicLampComponent)
)
DynamicLampIdx = dynamic_lamp_ns.enum("DynamicLampIdx")
CHANNEL_OPTIONS = {
"A": DynamicLampIdx.LAMP_1,
"B": DynamicLampIdx.LAMP_2,
"C": DynamicLampIdx.LAMP_3,
"D": DynamicLampIdx.LAMP_4,
"E": DynamicLampIdx.LAMP_5,
"F": DynamicLampIdx.LAMP_6,
"G": DynamicLampIdx.LAMP_7,
"H": DynamicLampIdx.LAMP_8,
"I": DynamicLampIdx.LAMP_9,
"J": DynamicLampIdx.LAMP_10,
"K": DynamicLampIdx.LAMP_11,
"L": DynamicLampIdx.LAMP_12,
"M": DynamicLampIdx.LAMP_13,
"N": DynamicLampIdx.LAMP_14,
"O": DynamicLampIdx.LAMP_15,
"P": DynamicLampIdx.LAMP_16,
}
CONFIG_SCHEMA = output.FLOAT_OUTPUT_SCHEMA.extend(
{
cv.Required(CONF_ID): cv.declare_id(DynamicLamp),
cv.GenerateID(CONF_DYNAMIC_LAMP_ID): cv.use_id(DynamicLampComponent),
cv.Required(CONF_CHANNEL): cv.enum(CHANNEL_OPTIONS, upper=True),
}
)
async def to_code(config):
parent = await cg.get_variable(config[CONF_DYNAMIC_LAMP_ID])
var = cg.new_Pvariable(
config[CONF_ID],
parent,
config[CONF_CHANNEL],
)
await output.register_output(var, config)
await cg.register_parented(var, config[CONF_DYNAMIC_LAMP_ID])

View File

@@ -0,0 +1,15 @@
#include "dynamic_lamp_output.h"
#include "esphome/core/helpers.h"
#include "esphome/core/log.h"
namespace esphome {
namespace dynamic_lamp {
static const char *const TAG = "dynamic_lamp.output";
void DynamicLamp::write_state(float state) {
this->state_ = state;
}
} // namespace dynamic_lamp
} // namespace esphome

View File

@@ -0,0 +1,22 @@
#pragma once
#include "../dynamic_lamp.h"
#include "esphome/core/component.h"
#include "esphome/components/output/float_output.h"
namespace esphome {
namespace dnamic_lamp {
class DynamicLamp : public output::FloatOutput, public Parented<DynamicLampComponent> {
public:
DynamicLamp(DynamicLampComponent *parent, DynamicLampIdx lamp) : parent_(parent), lamp_(lamp) {}
protected:
void write_state(float state) override;
DynamicLampComponent *parent_;
DynamicLampIdx lamp_;
float state_;
};
} // namespace dynamic_lamp
} // namespace esphome