Skip to content

Commit d0d18f2

Browse files
committed
fix: Disabled schedule not being persisted
* Fixed issue when disabled schedule reverts back to enabled upon reboot. That is due to `winter_mode` switch restores to OFF (apparently, when winter mode is disabled) triggering its `turn_off_action`, which turns off both controls to disable lawn and flowerbed sprinklers. The issue manifests itself only when winter mode is disabled. The fix is to introduce the internal switches (for each of user-visible controls disabling each of schedules), those aggregate state of winter mode and the corresponding user-visible switch. The intermediate entity is then controlled by `winter_mode` switch, and prevents that affecting the state of the schedule might have been set by the user.
1 parent 0f6158c commit d0d18f2

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

controllers.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,8 @@ switch:
229229
id(flowerbed_sprinklers_standby_switch).turn_on();
230230
#ifdef HAS_SCHEDULE
231231
// Disable scheduled runs
232-
lawn_sprinklers_disabled->turn_on();
233-
flowerbed_sprinklers_disabled->turn_on();
232+
lawn_sprinklers_disabled_aggregate->turn_on();
233+
flowerbed_sprinklers_disabled_aggregate->turn_on();
234234
#endif
235235
// Turn off peripherals power (water level relay and alike)
236236
id(${peripherals_power_off_relay_id}).turn_on();
@@ -240,9 +240,9 @@ switch:
240240
id(flowerbed_sprinklers_standby_switch).turn_off();
241241
id(lawn_sprinklers_standby_switch).turn_off();
242242
#ifdef HAS_SCHEDULE
243-
// Enabled scheduled runs
244-
lawn_sprinklers_disabled->turn_off();
245-
flowerbed_sprinklers_disabled->turn_off();
243+
// Enable scheduled runs
244+
lawn_sprinklers_disabled_aggregate->turn_off();
245+
flowerbed_sprinklers_disabled_aggregate->turn_off();
246246
#endif
247247
// Enable peripherals power
248248
id(${peripherals_power_off_relay_id}).turn_off();

schedule.yaml

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,20 @@ switch:
6666
optimistic: true
6767
restore_mode: RESTORE_DEFAULT_OFF
6868
entity_category: config
69+
# Internal switch that aggregates state of winter mode and the user-visible
70+
# switch above. The intermediate entity is needed to prevent winter mode from
71+
# affecting the state of the schedule might have been set by the user
72+
- platform: template
73+
id: lawn_sprinklers_disabled_aggregate
74+
internal: true
75+
optimistic: true
76+
restore_mode: DISABLED
6977
lambda: |-
7078
// Prevent enabling schedule if winter mode is active
7179
if (id(winter_mode).state)
7280
return true;
73-
return {};
81+
// Otherwise, follow the state of the switch above
82+
return id(lawn_sprinklers_disabled).state;
7483
7584
# Schedule, flowerbed sprinklers
7685
- platform: template
@@ -129,11 +138,17 @@ switch:
129138
optimistic: true
130139
restore_mode: RESTORE_DEFAULT_OFF
131140
entity_category: config
141+
# See comment above on its purpose
142+
- platform: template
143+
id: flowerbed_sprinklers_disabled_aggregate
144+
internal: true
145+
optimistic: true
146+
restore_mode: DISABLED
132147
lambda: |-
133148
// See above
134149
if (id(winter_mode).state)
135150
return true;
136-
return {};
151+
return id(flowerbed_sprinklers_disabled).state;
137152
138153
number:
139154
# Schedule, lawn sprinklers
@@ -203,7 +218,7 @@ dynamic_on_time:
203218
fri: lawn_sprinklers_fri
204219
sat: lawn_sprinklers_sat
205220
sun: lawn_sprinklers_sun
206-
disabled: lawn_sprinklers_disabled
221+
disabled: lawn_sprinklers_disabled_aggregate
207222
on_time:
208223
- logger.log:
209224
format: 'schedule: Waiting for water tank to be full'
@@ -229,7 +244,7 @@ dynamic_on_time:
229244
fri: flowerbed_sprinklers_fri
230245
sat: flowerbed_sprinklers_sat
231246
sun: flowerbed_sprinklers_sun
232-
disabled: flowerbed_sprinklers_disabled
247+
disabled: flowerbed_sprinklers_disabled_aggregate
233248
on_time:
234249
- logger.log:
235250
format: 'schedule: Waiting for water tank to be full'

0 commit comments

Comments
 (0)