ESPHome 2026.5.0-dev
Loading...
Searching...
No Matches
automation.h
Go to the documentation of this file.
1#pragma once
2
6
8
9template<typename... Ts> class SetDividerAction : public Action<Ts...> {
10 public:
11 explicit SetDividerAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
12
14
15 void play(const Ts &...x) override { this->sprinkler_->set_divider(this->divider_.optional_value(x...)); }
16
17 protected:
19};
20
21template<typename... Ts> class SetMultiplierAction : public Action<Ts...> {
22 public:
23 explicit SetMultiplierAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
24
25 TEMPLATABLE_VALUE(float, multiplier)
26
27 void play(const Ts &...x) override { this->sprinkler_->set_multiplier(this->multiplier_.optional_value(x...)); }
28
29 protected:
31};
32
33template<typename... Ts> class QueueValveAction : public Action<Ts...> {
34 public:
35 explicit QueueValveAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
36
37 TEMPLATABLE_VALUE(size_t, valve_number)
38 TEMPLATABLE_VALUE(uint32_t, valve_run_duration)
39
40 void play(const Ts &...x) override {
41 this->sprinkler_->queue_valve(this->valve_number_.optional_value(x...),
42 this->valve_run_duration_.optional_value(x...));
43 }
44
45 protected:
47};
48
49template<typename... Ts> class ClearQueuedValvesAction : public Action<Ts...> {
50 public:
51 explicit ClearQueuedValvesAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
52
53 void play(const Ts &...x) override { this->sprinkler_->clear_queued_valves(); }
54
55 protected:
57};
58
59template<typename... Ts> class SetRepeatAction : public Action<Ts...> {
60 public:
61 explicit SetRepeatAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
62
64
65 void play(const Ts &...x) override { this->sprinkler_->set_repeat(this->repeat_.optional_value(x...)); }
66
67 protected:
69};
70
71template<typename... Ts> class SetRunDurationAction : public Action<Ts...> {
72 public:
73 explicit SetRunDurationAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
74
75 TEMPLATABLE_VALUE(size_t, valve_number)
76 TEMPLATABLE_VALUE(uint32_t, valve_run_duration)
77
78 void play(const Ts &...x) override {
79 this->sprinkler_->set_valve_run_duration(this->valve_number_.optional_value(x...),
80 this->valve_run_duration_.optional_value(x...));
81 }
82
83 protected:
85};
86
87template<typename... Ts> class StartFromQueueAction : public Action<Ts...> {
88 public:
89 explicit StartFromQueueAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
90
91 void play(const Ts &...x) override { this->sprinkler_->start_from_queue(); }
92
93 protected:
95};
96
97template<typename... Ts> class StartFullCycleAction : public Action<Ts...> {
98 public:
99 explicit StartFullCycleAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
100
101 void play(const Ts &...x) override { this->sprinkler_->start_full_cycle(); }
102
103 protected:
105};
106
107template<typename... Ts> class StartSingleValveAction : public Action<Ts...> {
108 public:
109 explicit StartSingleValveAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
110
111 // TemplatableValue (not TemplatableFn) — also set from C++ with raw values in sprinkler.cpp
112 template<typename V> void set_valve_to_start(V valve_to_start) { this->valve_to_start_ = valve_to_start; }
113 TEMPLATABLE_VALUE(uint32_t, valve_run_duration)
114
115 void play(const Ts &...x) override {
117 this->valve_run_duration_.optional_value(x...));
118 }
119
120 protected:
123};
124
125template<typename... Ts> class ShutdownAction : public Action<Ts...> {
126 public:
127 explicit ShutdownAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
128
129 void play(const Ts &...x) override { this->sprinkler_->shutdown(); }
130
131 protected:
133};
134
135template<typename... Ts> class NextValveAction : public Action<Ts...> {
136 public:
137 explicit NextValveAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
138
139 void play(const Ts &...x) override { this->sprinkler_->next_valve(); }
140
141 protected:
143};
144
145template<typename... Ts> class PreviousValveAction : public Action<Ts...> {
146 public:
147 explicit PreviousValveAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
148
149 void play(const Ts &...x) override { this->sprinkler_->previous_valve(); }
150
151 protected:
153};
154
155template<typename... Ts> class PauseAction : public Action<Ts...> {
156 public:
157 explicit PauseAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
158
159 void play(const Ts &...x) override { this->sprinkler_->pause(); }
160
161 protected:
163};
164
165template<typename... Ts> class ResumeAction : public Action<Ts...> {
166 public:
167 explicit ResumeAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
168
169 void play(const Ts &...x) override { this->sprinkler_->resume(); }
170
171 protected:
173};
174
175template<typename... Ts> class ResumeOrStartAction : public Action<Ts...> {
176 public:
177 explicit ResumeOrStartAction(Sprinkler *a_sprinkler) : sprinkler_(a_sprinkler) {}
178
179 void play(const Ts &...x) override { this->sprinkler_->resume_or_start_full_cycle(); }
180
181 protected:
183};
184
185} // namespace esphome::sprinkler
virtual void play(const Ts &...x)=0
Primary TemplatableValue: stores either a constant value or a function pointer.
Definition automation.h:115
optional< T > optional_value(X... x) const
Definition automation.h:204
void play(const Ts &...x) override
Definition automation.h:53
ClearQueuedValvesAction(Sprinkler *a_sprinkler)
Definition automation.h:51
void play(const Ts &...x) override
Definition automation.h:139
NextValveAction(Sprinkler *a_sprinkler)
Definition automation.h:137
void play(const Ts &...x) override
Definition automation.h:159
PauseAction(Sprinkler *a_sprinkler)
Definition automation.h:157
PreviousValveAction(Sprinkler *a_sprinkler)
Definition automation.h:147
void play(const Ts &...x) override
Definition automation.h:149
valve_run_duration void play(const Ts &...x) override
Definition automation.h:40
QueueValveAction(Sprinkler *a_sprinkler)
Definition automation.h:35
TEMPLATABLE_VALUE(size_t, valve_number) TEMPLATABLE_VALUE(uint32_t
void play(const Ts &...x) override
Definition automation.h:169
ResumeAction(Sprinkler *a_sprinkler)
Definition automation.h:167
void play(const Ts &...x) override
Definition automation.h:179
ResumeOrStartAction(Sprinkler *a_sprinkler)
Definition automation.h:177
SetDividerAction(Sprinkler *a_sprinkler)
Definition automation.h:11
TEMPLATABLE_VALUE(uint32_t, divider) void play(const Ts &...x) override
Definition automation.h:13
TEMPLATABLE_VALUE(float, multiplier) void play(const Ts &...x) override
Definition automation.h:25
SetMultiplierAction(Sprinkler *a_sprinkler)
Definition automation.h:23
TEMPLATABLE_VALUE(uint32_t, repeat) void play(const Ts &...x) override
Definition automation.h:63
SetRepeatAction(Sprinkler *a_sprinkler)
Definition automation.h:61
SetRunDurationAction(Sprinkler *a_sprinkler)
Definition automation.h:73
TEMPLATABLE_VALUE(size_t, valve_number) TEMPLATABLE_VALUE(uint32_t
valve_run_duration void play(const Ts &...x) override
Definition automation.h:78
void play(const Ts &...x) override
Definition automation.h:129
ShutdownAction(Sprinkler *a_sprinkler)
Definition automation.h:127
void resume()
resumes a cycle that was suspended using pause()
void next_valve()
advances to the next valve (numerically)
void queue_valve(optional< size_t > valve_number, optional< uint32_t > run_duration)
adds a valve into the queue.
void set_valve_run_duration(optional< size_t > valve_number, optional< uint32_t > run_duration)
set how long the valve should remain on/open. run_duration is time in seconds
void set_repeat(optional< uint32_t > repeat)
set the number of times to repeat a full cycle
void start_full_cycle()
starts a full cycle of all enabled valves and enables auto_advance.
void shutdown(bool clear_queue=false)
turns off all valves, effectively shutting down the system.
void previous_valve()
advances to the previous valve (numerically)
void clear_queued_valves()
clears/removes all valves from the queue
void resume_or_start_full_cycle()
if a cycle was suspended using pause(), resumes it. otherwise calls start_full_cycle()
void start_single_valve(optional< size_t > valve_number, optional< uint32_t > run_duration=nullopt)
activates a single valve and disables auto_advance.
void set_divider(optional< uint32_t > divider)
sets the multiplier value to '1 / divider' and sets repeat value to divider
void pause()
same as shutdown(), but also stores active_valve() and time_remaining() allowing resume() to continue...
void start_from_queue()
starts the controller from the first valve in the queue and disables auto_advance.
void set_multiplier(optional< float > multiplier)
value multiplied by configured run times – used to extend or shorten the cycle
void play(const Ts &...x) override
Definition automation.h:91
StartFromQueueAction(Sprinkler *a_sprinkler)
Definition automation.h:89
StartFullCycleAction(Sprinkler *a_sprinkler)
Definition automation.h:99
void play(const Ts &...x) override
Definition automation.h:101
TEMPLATABLE_VALUE(uint32_t, valve_run_duration) void play(const Ts &...x) override
Definition automation.h:113
StartSingleValveAction(Sprinkler *a_sprinkler)
Definition automation.h:109
TemplatableValue< size_t, Ts... > valve_to_start_
Definition automation.h:122
void set_valve_to_start(V valve_to_start)
Definition automation.h:112
static void uint32_t
uint16_t x
Definition tt21100.cpp:5