Fix sprinkler switch restore_mode (#4756)

This commit is contained in:
Keith Burzinski 2023-04-30 14:52:05 -05:00 committed by GitHub
parent 568e65a6ab
commit c2a43c733a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 6 deletions

View file

@ -286,7 +286,9 @@ SPRINKLER_VALVE_SCHEMA = cv.Schema(
{ {
cv.Optional(CONF_ENABLE_SWITCH): cv.maybe_simple_value( cv.Optional(CONF_ENABLE_SWITCH): cv.maybe_simple_value(
switch.switch_schema( switch.switch_schema(
SprinklerControllerSwitch, entity_category=ENTITY_CATEGORY_CONFIG SprinklerControllerSwitch,
entity_category=ENTITY_CATEGORY_CONFIG,
default_restore_mode="RESTORE_DEFAULT_OFF",
), ),
key=CONF_NAME, key=CONF_NAME,
), ),
@ -333,7 +335,9 @@ SPRINKLER_CONTROLLER_SCHEMA = cv.Schema(
cv.Optional(CONF_NAME): cv.string, cv.Optional(CONF_NAME): cv.string,
cv.Optional(CONF_AUTO_ADVANCE_SWITCH): cv.maybe_simple_value( cv.Optional(CONF_AUTO_ADVANCE_SWITCH): cv.maybe_simple_value(
switch.switch_schema( switch.switch_schema(
SprinklerControllerSwitch, entity_category=ENTITY_CATEGORY_CONFIG SprinklerControllerSwitch,
entity_category=ENTITY_CATEGORY_CONFIG,
default_restore_mode="RESTORE_DEFAULT_OFF",
), ),
key=CONF_NAME, key=CONF_NAME,
), ),
@ -343,19 +347,25 @@ SPRINKLER_CONTROLLER_SCHEMA = cv.Schema(
), ),
cv.Optional(CONF_QUEUE_ENABLE_SWITCH): cv.maybe_simple_value( cv.Optional(CONF_QUEUE_ENABLE_SWITCH): cv.maybe_simple_value(
switch.switch_schema( switch.switch_schema(
SprinklerControllerSwitch, entity_category=ENTITY_CATEGORY_CONFIG SprinklerControllerSwitch,
entity_category=ENTITY_CATEGORY_CONFIG,
default_restore_mode="RESTORE_DEFAULT_OFF",
), ),
key=CONF_NAME, key=CONF_NAME,
), ),
cv.Optional(CONF_REVERSE_SWITCH): cv.maybe_simple_value( cv.Optional(CONF_REVERSE_SWITCH): cv.maybe_simple_value(
switch.switch_schema( switch.switch_schema(
SprinklerControllerSwitch, entity_category=ENTITY_CATEGORY_CONFIG SprinklerControllerSwitch,
entity_category=ENTITY_CATEGORY_CONFIG,
default_restore_mode="RESTORE_DEFAULT_OFF",
), ),
key=CONF_NAME, key=CONF_NAME,
), ),
cv.Optional(CONF_STANDBY_SWITCH): cv.maybe_simple_value( cv.Optional(CONF_STANDBY_SWITCH): cv.maybe_simple_value(
switch.switch_schema( switch.switch_schema(
SprinklerControllerSwitch, entity_category=ENTITY_CATEGORY_CONFIG SprinklerControllerSwitch,
entity_category=ENTITY_CATEGORY_CONFIG,
default_restore_mode="RESTORE_DEFAULT_OFF",
), ),
key=CONF_NAME, key=CONF_NAME,
), ),

View file

@ -1176,6 +1176,21 @@ optional<uint32_t> Sprinkler::time_remaining_current_operation() {
return nullopt; return nullopt;
} }
bool Sprinkler::any_controller_is_active() {
if (this->state_ != IDLE) {
return true;
}
for (auto &controller : this->other_controllers_) {
if (controller != this) { // dummy check
if (controller->controller_state() != IDLE) {
return true;
}
}
}
return false;
}
SprinklerControllerSwitch *Sprinkler::control_switch(size_t valve_number) { SprinklerControllerSwitch *Sprinkler::control_switch(size_t valve_number) {
if (this->is_a_valid_valve(valve_number)) { if (this->is_a_valid_valve(valve_number)) {
return this->valve_[valve_number].controller_switch; return this->valve_[valve_number].controller_switch;

View file

@ -406,6 +406,12 @@ class Sprinkler : public Component {
/// returns the amount of time remaining in seconds for all valves remaining, including the active valve, if any /// returns the amount of time remaining in seconds for all valves remaining, including the active valve, if any
optional<uint32_t> time_remaining_current_operation(); optional<uint32_t> time_remaining_current_operation();
/// returns true if this or any sprinkler controller this controller knows about is active
bool any_controller_is_active();
/// returns the current state of the sprinkler controller
SprinklerState controller_state() { return this->state_; };
/// returns a pointer to a valve's control switch object /// returns a pointer to a valve's control switch object
SprinklerControllerSwitch *control_switch(size_t valve_number); SprinklerControllerSwitch *control_switch(size_t valve_number);
@ -503,7 +509,6 @@ class Sprinkler : public Component {
/// callback functions for timers /// callback functions for timers
void valve_selection_callback_(); void valve_selection_callback_();
void sm_timer_callback_(); void sm_timer_callback_();
void pump_stop_delay_callback_();
/// Maximum allowed queue size /// Maximum allowed queue size
const uint8_t max_queue_size_{100}; const uint8_t max_queue_size_{100};