mirror of
https://github.com/esphome/esphome.git
synced 2025-11-03 08:31:47 +00:00
Compare commits
3 Commits
power-supp
...
jesserockz
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
385d5c018b | ||
|
|
460ce5991c | ||
|
|
03b2d3f9d3 |
@@ -23,6 +23,7 @@ CHANNELS = {
|
|||||||
|
|
||||||
CONF_UNIVERSE = "universe"
|
CONF_UNIVERSE = "universe"
|
||||||
CONF_E131_ID = "e131_id"
|
CONF_E131_ID = "e131_id"
|
||||||
|
CONF_CHANNEL_OFFSET = "channel_offset"
|
||||||
|
|
||||||
CONFIG_SCHEMA = cv.Schema(
|
CONFIG_SCHEMA = cv.Schema(
|
||||||
{
|
{
|
||||||
@@ -46,6 +47,7 @@ async def to_code(config):
|
|||||||
cv.GenerateID(CONF_E131_ID): cv.use_id(E131Component),
|
cv.GenerateID(CONF_E131_ID): cv.use_id(E131Component),
|
||||||
cv.Required(CONF_UNIVERSE): cv.int_range(min=1, max=512),
|
cv.Required(CONF_UNIVERSE): cv.int_range(min=1, max=512),
|
||||||
cv.Optional(CONF_CHANNELS, default="RGB"): cv.one_of(*CHANNELS, upper=True),
|
cv.Optional(CONF_CHANNELS, default="RGB"): cv.one_of(*CHANNELS, upper=True),
|
||||||
|
cv.Optional(CONF_CHANNEL_OFFSET, default=0): cv.int_range(min=0, max=512),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
async def e131_light_effect_to_code(config, effect_id):
|
async def e131_light_effect_to_code(config, effect_id):
|
||||||
@@ -54,5 +56,6 @@ async def e131_light_effect_to_code(config, effect_id):
|
|||||||
effect = cg.new_Pvariable(effect_id, config[CONF_NAME])
|
effect = cg.new_Pvariable(effect_id, config[CONF_NAME])
|
||||||
cg.add(effect.set_first_universe(config[CONF_UNIVERSE]))
|
cg.add(effect.set_first_universe(config[CONF_UNIVERSE]))
|
||||||
cg.add(effect.set_channels(CHANNELS[config[CONF_CHANNELS]]))
|
cg.add(effect.set_channels(CHANNELS[config[CONF_CHANNELS]]))
|
||||||
|
cg.add(effect.set_channel_offset(config[CONF_CHANNEL_OFFSET]))
|
||||||
cg.add(effect.set_e131(parent))
|
cg.add(effect.set_e131(parent))
|
||||||
return effect
|
return effect
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ bool E131AddressableLightEffect::process_(int universe, const E131Packet &packet
|
|||||||
// limit amount of lights per universe and received
|
// limit amount of lights per universe and received
|
||||||
int output_end =
|
int output_end =
|
||||||
std::min(it->size(), std::min(output_offset + get_lights_per_universe(), output_offset + packet.count - 1));
|
std::min(it->size(), std::min(output_offset + get_lights_per_universe(), output_offset + packet.count - 1));
|
||||||
auto *input_data = packet.values + 1;
|
auto *input_data = packet.values + 1 + (this->channel_offset_ * this->channels_);
|
||||||
|
|
||||||
ESP_LOGV(TAG, "Applying data for '%s' on %d universe, for %" PRId32 "-%d.", get_name().c_str(), universe,
|
ESP_LOGV(TAG, "Applying data for '%s' on %d universe, for %" PRId32 "-%d.", get_name().c_str(), universe,
|
||||||
output_offset, output_end);
|
output_offset, output_end);
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ class E131AddressableLightEffect : public light::AddressableLightEffect {
|
|||||||
|
|
||||||
void set_first_universe(int universe) { this->first_universe_ = universe; }
|
void set_first_universe(int universe) { this->first_universe_ = universe; }
|
||||||
void set_channels(E131LightChannels channels) { this->channels_ = channels; }
|
void set_channels(E131LightChannels channels) { this->channels_ = channels; }
|
||||||
|
void set_channel_offset(int offset) { this->channel_offset_ = offset; }
|
||||||
void set_e131(E131Component *e131) { this->e131_ = e131; }
|
void set_e131(E131Component *e131) { this->e131_ = e131; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -34,6 +35,7 @@ class E131AddressableLightEffect : public light::AddressableLightEffect {
|
|||||||
|
|
||||||
int first_universe_{0};
|
int first_universe_{0};
|
||||||
int last_universe_{0};
|
int last_universe_{0};
|
||||||
|
int channel_offset_{0};
|
||||||
E131LightChannels channels_{E131_RGB};
|
E131LightChannels channels_{E131_RGB};
|
||||||
E131Component *e131_{nullptr};
|
E131Component *e131_{nullptr};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user