mirror of
https://github.com/esphome/esphome.git
synced 2025-07-29 06:36:45 +00:00
[modbus_controller] Add assumed_state to switch (#8880)
Co-authored-by: Stanley Pinchak <stanley.pinchak@gmail.com> Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
parent
149f787035
commit
19e2460af2
@ -1,7 +1,7 @@
|
|||||||
import esphome.codegen as cg
|
import esphome.codegen as cg
|
||||||
from esphome.components import switch
|
from esphome.components import switch
|
||||||
import esphome.config_validation as cv
|
import esphome.config_validation as cv
|
||||||
from esphome.const import CONF_ADDRESS, CONF_ID
|
from esphome.const import CONF_ADDRESS, CONF_ASSUMED_STATE, CONF_ID
|
||||||
|
|
||||||
from .. import (
|
from .. import (
|
||||||
MODBUS_REGISTER_TYPE,
|
MODBUS_REGISTER_TYPE,
|
||||||
@ -36,6 +36,7 @@ CONFIG_SCHEMA = cv.All(
|
|||||||
.extend(ModbusItemBaseSchema)
|
.extend(ModbusItemBaseSchema)
|
||||||
.extend(
|
.extend(
|
||||||
{
|
{
|
||||||
|
cv.Optional(CONF_ASSUMED_STATE, default=False): cv.boolean,
|
||||||
cv.Optional(CONF_REGISTER_TYPE): cv.enum(MODBUS_REGISTER_TYPE),
|
cv.Optional(CONF_REGISTER_TYPE): cv.enum(MODBUS_REGISTER_TYPE),
|
||||||
cv.Optional(CONF_USE_WRITE_MULTIPLE, default=False): cv.boolean,
|
cv.Optional(CONF_USE_WRITE_MULTIPLE, default=False): cv.boolean,
|
||||||
cv.Optional(CONF_WRITE_LAMBDA): cv.returning_lambda,
|
cv.Optional(CONF_WRITE_LAMBDA): cv.returning_lambda,
|
||||||
@ -62,7 +63,10 @@ async def to_code(config):
|
|||||||
paren = await cg.get_variable(config[CONF_MODBUS_CONTROLLER_ID])
|
paren = await cg.get_variable(config[CONF_MODBUS_CONTROLLER_ID])
|
||||||
cg.add(var.set_parent(paren))
|
cg.add(var.set_parent(paren))
|
||||||
cg.add(var.set_use_write_mutiple(config[CONF_USE_WRITE_MULTIPLE]))
|
cg.add(var.set_use_write_mutiple(config[CONF_USE_WRITE_MULTIPLE]))
|
||||||
cg.add(paren.add_sensor_item(var))
|
assumed_state = config[CONF_ASSUMED_STATE]
|
||||||
|
cg.add(var.set_assumed_state(assumed_state))
|
||||||
|
if not assumed_state:
|
||||||
|
cg.add(paren.add_sensor_item(var))
|
||||||
if CONF_WRITE_LAMBDA in config:
|
if CONF_WRITE_LAMBDA in config:
|
||||||
template_ = await cg.process_lambda(
|
template_ = await cg.process_lambda(
|
||||||
config[CONF_WRITE_LAMBDA],
|
config[CONF_WRITE_LAMBDA],
|
||||||
|
@ -19,6 +19,10 @@ void ModbusSwitch::setup() {
|
|||||||
}
|
}
|
||||||
void ModbusSwitch::dump_config() { LOG_SWITCH(TAG, "Modbus Controller Switch", this); }
|
void ModbusSwitch::dump_config() { LOG_SWITCH(TAG, "Modbus Controller Switch", this); }
|
||||||
|
|
||||||
|
void ModbusSwitch::set_assumed_state(bool assumed_state) { this->assumed_state_ = assumed_state; }
|
||||||
|
|
||||||
|
bool ModbusSwitch::assumed_state() { return this->assumed_state_; }
|
||||||
|
|
||||||
void ModbusSwitch::parse_and_publish(const std::vector<uint8_t> &data) {
|
void ModbusSwitch::parse_and_publish(const std::vector<uint8_t> &data) {
|
||||||
bool value = false;
|
bool value = false;
|
||||||
switch (this->register_type) {
|
switch (this->register_type) {
|
||||||
|
@ -29,6 +29,7 @@ class ModbusSwitch : public Component, public switch_::Switch, public SensorItem
|
|||||||
void setup() override;
|
void setup() override;
|
||||||
void write_state(bool state) override;
|
void write_state(bool state) override;
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
|
void set_assumed_state(bool assumed_state);
|
||||||
void set_state(bool state) { this->state = state; }
|
void set_state(bool state) { this->state = state; }
|
||||||
void parse_and_publish(const std::vector<uint8_t> &data) override;
|
void parse_and_publish(const std::vector<uint8_t> &data) override;
|
||||||
void set_parent(ModbusController *parent) { this->parent_ = parent; }
|
void set_parent(ModbusController *parent) { this->parent_ = parent; }
|
||||||
@ -40,10 +41,12 @@ class ModbusSwitch : public Component, public switch_::Switch, public SensorItem
|
|||||||
void set_use_write_mutiple(bool use_write_multiple) { this->use_write_multiple_ = use_write_multiple; }
|
void set_use_write_mutiple(bool use_write_multiple) { this->use_write_multiple_ = use_write_multiple; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
bool assumed_state() override;
|
||||||
ModbusController *parent_{nullptr};
|
ModbusController *parent_{nullptr};
|
||||||
bool use_write_multiple_{false};
|
bool use_write_multiple_{false};
|
||||||
optional<transform_func_t> publish_transform_func_{nullopt};
|
optional<transform_func_t> publish_transform_func_{nullopt};
|
||||||
optional<write_transform_func_t> write_transform_func_{nullopt};
|
optional<write_transform_func_t> write_transform_func_{nullopt};
|
||||||
|
bool assumed_state_{false};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace modbus_controller
|
} // namespace modbus_controller
|
||||||
|
Loading…
x
Reference in New Issue
Block a user