diff --git a/esphome/components/api/homeassistant_service.h b/esphome/components/api/homeassistant_service.h index d68dac3b61..0877efbf26 100644 --- a/esphome/components/api/homeassistant_service.h +++ b/esphome/components/api/homeassistant_service.h @@ -29,7 +29,9 @@ template class HomeAssistantServiceCallAction : public Action void add_variable(std::string key, T value) { this->variables_.push_back(TemplatableKeyValuePair(key, value)); } - void play(Ts... x) override { + + protected: + void play_(Ts... x) override { HomeassistantServiceResponse resp; resp.service = this->service_.value(x...); resp.is_event = this->is_event_; @@ -54,7 +56,6 @@ template class HomeAssistantServiceCallAction : public Actionparent_->send_homeassistant_service_call(resp); } - protected: APIServer *parent_; bool is_event_; std::vector> data_; diff --git a/esphome/components/binary_sensor/automation.h b/esphome/components/binary_sensor/automation.h index e9ff37446d..b76fbdae0c 100644 --- a/esphome/components/binary_sensor/automation.h +++ b/esphome/components/binary_sensor/automation.h @@ -137,12 +137,13 @@ template class BinarySensorPublishAction : public Action public: explicit BinarySensorPublishAction(BinarySensor *sensor) : sensor_(sensor) {} TEMPLATABLE_VALUE(bool, state) - void play(Ts... x) override { + + protected: + void play_(Ts... x) override { auto val = this->state_.value(x...); this->sensor_->publish_state(val); } - protected: BinarySensor *sensor_; }; diff --git a/esphome/components/climate/automation.h b/esphome/components/climate/automation.h index 0cd52b1036..2fd9d81e6b 100644 --- a/esphome/components/climate/automation.h +++ b/esphome/components/climate/automation.h @@ -18,7 +18,8 @@ template class ControlAction : public Action { TEMPLATABLE_VALUE(ClimateFanMode, fan_mode) TEMPLATABLE_VALUE(ClimateSwingMode, swing_mode) - void play(Ts... x) override { + protected: + void play_(Ts... x) override { auto call = this->climate_->make_call(); call.set_mode(this->mode_.optional_value(x...)); call.set_target_temperature(this->target_temperature_.optional_value(x...)); @@ -30,7 +31,6 @@ template class ControlAction : public Action { call.perform(); } - protected: Climate *climate_; }; diff --git a/esphome/components/cover/automation.h b/esphome/components/cover/automation.h index a8eb0cdf99..bad641c150 100644 --- a/esphome/components/cover/automation.h +++ b/esphome/components/cover/automation.h @@ -11,9 +11,9 @@ template class OpenAction : public Action { public: explicit OpenAction(Cover *cover) : cover_(cover) {} - void play(Ts... x) override { this->cover_->open(); } - protected: + void play_(Ts... x) override { this->cover_->open(); } + Cover *cover_; }; @@ -21,9 +21,9 @@ template class CloseAction : public Action { public: explicit CloseAction(Cover *cover) : cover_(cover) {} - void play(Ts... x) override { this->cover_->close(); } - protected: + void play_(Ts... x) override { this->cover_->close(); } + Cover *cover_; }; @@ -31,9 +31,9 @@ template class StopAction : public Action { public: explicit StopAction(Cover *cover) : cover_(cover) {} - void play(Ts... x) override { this->cover_->stop(); } - protected: + void play_(Ts... x) override { this->cover_->stop(); } + Cover *cover_; }; @@ -41,7 +41,12 @@ template class ControlAction : public Action { public: explicit ControlAction(Cover *cover) : cover_(cover) {} - void play(Ts... x) override { + TEMPLATABLE_VALUE(bool, stop) + TEMPLATABLE_VALUE(float, position) + TEMPLATABLE_VALUE(float, tilt) + + protected: + void play_(Ts... x) override { auto call = this->cover_->make_call(); if (this->stop_.has_value()) call.set_stop(this->stop_.value(x...)); @@ -52,18 +57,18 @@ template class ControlAction : public Action { call.perform(); } - TEMPLATABLE_VALUE(bool, stop) - TEMPLATABLE_VALUE(float, position) - TEMPLATABLE_VALUE(float, tilt) - - protected: Cover *cover_; }; template class CoverPublishAction : public Action { public: CoverPublishAction(Cover *cover) : cover_(cover) {} - void play(Ts... x) override { + TEMPLATABLE_VALUE(float, position) + TEMPLATABLE_VALUE(float, tilt) + TEMPLATABLE_VALUE(CoverOperation, current_operation) + + protected: + void play_(Ts... x) override { if (this->position_.has_value()) this->cover_->position = this->position_.value(x...); if (this->tilt_.has_value()) @@ -73,11 +78,6 @@ template class CoverPublishAction : public Action { this->cover_->publish_state(); } - TEMPLATABLE_VALUE(float, position) - TEMPLATABLE_VALUE(float, tilt) - TEMPLATABLE_VALUE(CoverOperation, current_operation) - - protected: Cover *cover_; }; diff --git a/esphome/components/deep_sleep/deep_sleep_component.h b/esphome/components/deep_sleep/deep_sleep_component.h index 4372a3f66c..6287a2259a 100644 --- a/esphome/components/deep_sleep/deep_sleep_component.h +++ b/esphome/components/deep_sleep/deep_sleep_component.h @@ -85,9 +85,9 @@ template class EnterDeepSleepAction : public Action { public: EnterDeepSleepAction(DeepSleepComponent *deep_sleep) : deep_sleep_(deep_sleep) {} - void play(Ts... x) override { this->deep_sleep_->begin_sleep(true); } - protected: + void play_(Ts... x) override { this->deep_sleep_->begin_sleep(true); } + DeepSleepComponent *deep_sleep_; }; @@ -95,9 +95,9 @@ template class PreventDeepSleepAction : public Action { public: PreventDeepSleepAction(DeepSleepComponent *deep_sleep) : deep_sleep_(deep_sleep) {} - void play(Ts... x) override { this->deep_sleep_->prevent_deep_sleep(); } - protected: + void play_(Ts... x) override { this->deep_sleep_->prevent_deep_sleep(); } + DeepSleepComponent *deep_sleep_; }; diff --git a/esphome/components/dfplayer/dfplayer.h b/esphome/components/dfplayer/dfplayer.h index 22ca11c3be..89f0fb691c 100644 --- a/esphome/components/dfplayer/dfplayer.h +++ b/esphome/components/dfplayer/dfplayer.h @@ -104,8 +104,8 @@ class DFPlayer : public uart::UARTDevice, public Component { #define DFPLAYER_SIMPLE_ACTION(ACTION_CLASS, ACTION_METHOD) \ template class ACTION_CLASS : public Action, public Parented { \ - public: \ - void play(Ts... x) override { this->parent_->ACTION_METHOD(); } \ + protected: \ + void play_(Ts... x) override { this->parent_->ACTION_METHOD(); } \ }; DFPLAYER_SIMPLE_ACTION(NextAction, next) @@ -115,7 +115,9 @@ template class PlayFileAction : public Action, public Par public: TEMPLATABLE_VALUE(uint16_t, file) TEMPLATABLE_VALUE(boolean, loop) - void play(Ts... x) override { + + protected: + void play_(Ts... x) override { auto file = this->file_.value(x...); auto loop = this->loop_.value(x...); if (loop) { @@ -131,7 +133,9 @@ template class PlayFolderAction : public Action, public P TEMPLATABLE_VALUE(uint16_t, folder) TEMPLATABLE_VALUE(uint16_t, file) TEMPLATABLE_VALUE(boolean, loop) - void play(Ts... x) override { + + protected: + void play_(Ts... x) override { auto folder = this->folder_.value(x...); auto file = this->file_.value(x...); auto loop = this->loop_.value(x...); @@ -146,7 +150,9 @@ template class PlayFolderAction : public Action, public P template class SetDeviceAction : public Action, public Parented { public: TEMPLATABLE_VALUE(Device, device) - void play(Ts... x) override { + + protected: + void play_(Ts... x) override { auto device = this->device_.value(x...); this->parent_->set_device(device); } @@ -155,7 +161,9 @@ template class SetDeviceAction : public Action, public Pa template class SetVolumeAction : public Action, public Parented { public: TEMPLATABLE_VALUE(uint8_t, volume) - void play(Ts... x) override { + + protected: + void play_(Ts... x) override { auto volume = this->volume_.value(x...); this->parent_->set_volume(volume); } @@ -164,7 +172,9 @@ template class SetVolumeAction : public Action, public Pa template class SetEqAction : public Action, public Parented { public: TEMPLATABLE_VALUE(EqPreset, eq) - void play(Ts... x) override { + + protected: + void play_(Ts... x) override { auto eq = this->eq_.value(x...); this->parent_->set_eq(eq); } diff --git a/esphome/components/display/display_buffer.h b/esphome/components/display/display_buffer.h index b12fad8c8a..2a6ead3306 100644 --- a/esphome/components/display/display_buffer.h +++ b/esphome/components/display/display_buffer.h @@ -391,7 +391,9 @@ class Image { template class DisplayPageShowAction : public Action { public: TEMPLATABLE_VALUE(DisplayPage *, page) - void play(Ts... x) override { + + protected: + void play_(Ts... x) override { auto *page = this->page_.value(x...); if (page != nullptr) { page->show(); @@ -402,18 +404,20 @@ template class DisplayPageShowAction : public Action { template class DisplayPageShowNextAction : public Action { public: DisplayPageShowNextAction(DisplayBuffer *buffer) : buffer_(buffer) {} - void play(Ts... x) override { this->buffer_->show_next_page(); } protected: + void play_(Ts... x) override { this->buffer_->show_next_page(); } + DisplayBuffer *buffer_; }; template class DisplayPageShowPrevAction : public Action { public: DisplayPageShowPrevAction(DisplayBuffer *buffer) : buffer_(buffer) {} - void play(Ts... x) override { this->buffer_->show_prev_page(); } protected: + void play_(Ts... x) override { this->buffer_->show_prev_page(); } + DisplayBuffer *buffer_; }; diff --git a/esphome/components/esp8266_pwm/esp8266_pwm.h b/esphome/components/esp8266_pwm/esp8266_pwm.h index b6839985b0..5871b0dcbc 100644 --- a/esphome/components/esp8266_pwm/esp8266_pwm.h +++ b/esphome/components/esp8266_pwm/esp8266_pwm.h @@ -38,12 +38,12 @@ template class SetFrequencyAction : public Action { SetFrequencyAction(ESP8266PWM *parent) : parent_(parent) {} TEMPLATABLE_VALUE(float, frequency); - void play(Ts... x) { + protected: + void play_(Ts... x) { float freq = this->frequency_.value(x...); this->parent_->update_frequency(freq); } - protected: ESP8266PWM *parent_; }; diff --git a/esphome/components/fan/automation.h b/esphome/components/fan/automation.h index dfa72a3ea6..f2435a220f 100644 --- a/esphome/components/fan/automation.h +++ b/esphome/components/fan/automation.h @@ -14,7 +14,8 @@ template class TurnOnAction : public Action { TEMPLATABLE_VALUE(bool, oscillating) TEMPLATABLE_VALUE(FanSpeed, speed) - void play(Ts... x) override { + protected: + void play_(Ts... x) override { auto call = this->state_->turn_on(); if (this->oscillating_.has_value()) { call.set_oscillating(this->oscillating_.value(x...)); @@ -25,7 +26,6 @@ template class TurnOnAction : public Action { call.perform(); } - protected: FanState *state_; }; @@ -33,9 +33,9 @@ template class TurnOffAction : public Action { public: explicit TurnOffAction(FanState *state) : state_(state) {} - void play(Ts... x) override { this->state_->turn_off().perform(); } - protected: + void play_(Ts... x) override { this->state_->turn_off().perform(); } + FanState *state_; }; @@ -43,9 +43,9 @@ template class ToggleAction : public Action { public: explicit ToggleAction(FanState *state) : state_(state) {} - void play(Ts... x) override { this->state_->toggle().perform(); } - protected: + void play_(Ts... x) override { this->state_->toggle().perform(); } + FanState *state_; }; diff --git a/esphome/components/globals/globals_component.h b/esphome/components/globals/globals_component.h index 397c55f6c4..bf839b4256 100644 --- a/esphome/components/globals/globals_component.h +++ b/esphome/components/globals/globals_component.h @@ -59,9 +59,9 @@ template class GlobalVarSetAction : public Actionparent_->value() = this->value_.value(x...); } - protected: + void play_(Ts... x) override { this->parent_->value() = this->value_.value(x...); } + C *parent_; }; diff --git a/esphome/components/http_request/http_request.h b/esphome/components/http_request/http_request.h index e6c0510b32..4f164f3409 100644 --- a/esphome/components/http_request/http_request.h +++ b/esphome/components/http_request/http_request.h @@ -71,7 +71,8 @@ template class HttpRequestSendAction : public Action { void set_json(std::function json_func) { this->json_func_ = json_func; } - void play(Ts... x) override { + protected: + void play_(Ts... x) override { this->parent_->set_url(this->url_.value(x...)); this->parent_->set_method(this->method_.value(x...)); if (this->body_.has_value()) { @@ -106,7 +107,6 @@ template class HttpRequestSendAction : public Action { this->parent_->close(); } - protected: void encode_json_(Ts... x, JsonObject &root) { for (const auto &item : this->json_) { auto val = item.second; diff --git a/esphome/components/integration/integration_sensor.h b/esphome/components/integration/integration_sensor.h index 2fcec069b2..85a89f6e43 100644 --- a/esphome/components/integration/integration_sensor.h +++ b/esphome/components/integration/integration_sensor.h @@ -76,9 +76,9 @@ template class ResetAction : public Action { public: explicit ResetAction(IntegrationSensor *parent) : parent_(parent) {} - void play(Ts... x) override { this->parent_->reset(); } - protected: + void play_(Ts... x) override { this->parent_->reset(); } + IntegrationSensor *parent_; }; diff --git a/esphome/components/ledc/ledc_output.h b/esphome/components/ledc/ledc_output.h index 3f56f502b0..7ff0987e0e 100644 --- a/esphome/components/ledc/ledc_output.h +++ b/esphome/components/ledc/ledc_output.h @@ -43,12 +43,12 @@ template class SetFrequencyAction : public Action { SetFrequencyAction(LEDCOutput *parent) : parent_(parent) {} TEMPLATABLE_VALUE(float, frequency); - void play(Ts... x) { + protected: + void play_(Ts... x) { float freq = this->frequency_.value(x...); this->parent_->apply_frequency(freq); } - protected: LEDCOutput *parent_; }; diff --git a/esphome/components/light/automation.h b/esphome/components/light/automation.h index dfab780658..1c641562d4 100644 --- a/esphome/components/light/automation.h +++ b/esphome/components/light/automation.h @@ -13,13 +13,13 @@ template class ToggleAction : public Action { TEMPLATABLE_VALUE(uint32_t, transition_length) - void play(Ts... x) override { + protected: + void play_(Ts... x) override { auto call = this->state_->toggle(); call.set_transition_length(this->transition_length_.optional_value(x...)); call.perform(); } - protected: LightState *state_; }; @@ -38,7 +38,8 @@ template class LightControlAction : public Action { TEMPLATABLE_VALUE(float, color_temperature) TEMPLATABLE_VALUE(std::string, effect) - void play(Ts... x) override { + protected: + void play_(Ts... x) override { auto call = this->parent_->make_call(); call.set_state(this->state_.optional_value(x...)); call.set_brightness(this->brightness_.optional_value(x...)); @@ -53,7 +54,6 @@ template class LightControlAction : public Action { call.perform(); } - protected: LightState *parent_; }; @@ -64,7 +64,8 @@ template class DimRelativeAction : public Action { TEMPLATABLE_VALUE(float, relative_brightness) TEMPLATABLE_VALUE(uint32_t, transition_length) - void play(Ts... x) override { + protected: + void play_(Ts... x) override { auto call = this->parent_->make_call(); float rel = this->relative_brightness_.value(x...); float cur; @@ -77,7 +78,6 @@ template class DimRelativeAction : public Action { call.perform(); } - protected: LightState *parent_; }; @@ -143,7 +143,8 @@ template class AddressableSet : public Action { TEMPLATABLE_VALUE(uint8_t, blue) TEMPLATABLE_VALUE(uint8_t, white) - void play(Ts... x) override { + protected: + void play_(Ts... x) override { auto *out = (AddressableLight *) this->parent_->get_output(); int32_t range_from = this->range_from_.value_or(x..., 0); int32_t range_to = this->range_to_.value_or(x..., out->size() - 1) + 1; @@ -159,7 +160,6 @@ template class AddressableSet : public Action { out->schedule_show(); } - protected: LightState *parent_; }; diff --git a/esphome/components/mhz19/mhz19.h b/esphome/components/mhz19/mhz19.h index 2201fc87f0..bdb2c50d19 100644 --- a/esphome/components/mhz19/mhz19.h +++ b/esphome/components/mhz19/mhz19.h @@ -37,27 +37,30 @@ class MHZ19Component : public PollingComponent, public uart::UARTDevice { template class MHZ19CalibrateZeroAction : public Action { public: MHZ19CalibrateZeroAction(MHZ19Component *mhz19) : mhz19_(mhz19) {} - void play(Ts... x) override { this->mhz19_->calibrate_zero(); } protected: + void play_(Ts... x) override { this->mhz19_->calibrate_zero(); } + MHZ19Component *mhz19_; }; template class MHZ19ABCEnableAction : public Action { public: MHZ19ABCEnableAction(MHZ19Component *mhz19) : mhz19_(mhz19) {} - void play(Ts... x) override { this->mhz19_->abc_enable(); } protected: + void play_(Ts... x) override { this->mhz19_->abc_enable(); } + MHZ19Component *mhz19_; }; template class MHZ19ABCDisableAction : public Action { public: MHZ19ABCDisableAction(MHZ19Component *mhz19) : mhz19_(mhz19) {} - void play(Ts... x) override { this->mhz19_->abc_disable(); } protected: + void play_(Ts... x) override { this->mhz19_->abc_disable(); } + MHZ19Component *mhz19_; }; diff --git a/esphome/components/mqtt/mqtt_client.h b/esphome/components/mqtt/mqtt_client.h index 6f14b0c92c..fbd2435bfc 100644 --- a/esphome/components/mqtt/mqtt_client.h +++ b/esphome/components/mqtt/mqtt_client.h @@ -299,12 +299,12 @@ template class MQTTPublishAction : public Action { TEMPLATABLE_VALUE(uint8_t, qos) TEMPLATABLE_VALUE(bool, retain) - void play(Ts... x) override { + protected: + void play_(Ts... x) override { this->parent_->publish(this->topic_.value(x...), this->payload_.value(x...), this->qos_.value(x...), this->retain_.value(x...)); } - protected: MQTTClientComponent *parent_; }; @@ -316,15 +316,15 @@ template class MQTTPublishJsonAction : public Action { TEMPLATABLE_VALUE(bool, retain) void set_payload(std::function payload) { this->payload_ = payload; } - void play(Ts... x) override { + + protected: + void play_(Ts... x) override { auto f = std::bind(&MQTTPublishJsonAction::encode_, this, x..., std::placeholders::_1); auto topic = this->topic_.value(x...); auto qos = this->qos_.value(x...); auto retain = this->retain_.value(x...); this->parent_->publish_json(topic, f, qos, retain); } - - protected: void encode_(Ts... x, JsonObject &root) { this->payload_(x..., root); } std::function payload_; MQTTClientComponent *parent_; diff --git a/esphome/components/output/automation.h b/esphome/components/output/automation.h index 8c8a5ab61b..c65b0d3f6e 100644 --- a/esphome/components/output/automation.h +++ b/esphome/components/output/automation.h @@ -12,9 +12,9 @@ template class TurnOffAction : public Action { public: TurnOffAction(BinaryOutput *output) : output_(output) {} - void play(Ts... x) override { this->output_->turn_off(); } - protected: + void play_(Ts... x) override { this->output_->turn_off(); } + BinaryOutput *output_; }; @@ -22,9 +22,9 @@ template class TurnOnAction : public Action { public: TurnOnAction(BinaryOutput *output) : output_(output) {} - void play(Ts... x) override { this->output_->turn_on(); } - protected: + void play_(Ts... x) override { this->output_->turn_on(); } + BinaryOutput *output_; }; @@ -33,9 +33,10 @@ template class SetLevelAction : public Action { SetLevelAction(FloatOutput *output) : output_(output) {} TEMPLATABLE_VALUE(float, level) - void play(Ts... x) override { this->output_->set_level(this->level_.value(x...)); } protected: + void play_(Ts... x) override { this->output_->set_level(this->level_.value(x...)); } + FloatOutput *output_; }; diff --git a/esphome/components/pid/pid_climate.h b/esphome/components/pid/pid_climate.h index 8f379c47b4..0c92cee798 100644 --- a/esphome/components/pid/pid_climate.h +++ b/esphome/components/pid/pid_climate.h @@ -71,7 +71,12 @@ template class PIDAutotuneAction : public Action { public: PIDAutotuneAction(PIDClimate *parent) : parent_(parent) {} - void play(Ts... x) { + void set_noiseband(float noiseband) { noiseband_ = noiseband; } + void set_positive_output(float positive_output) { positive_output_ = positive_output; } + void set_negative_output(float negative_output) { negative_output_ = negative_output; } + + protected: + void play_(Ts... x) { auto tuner = make_unique(); tuner->set_noiseband(this->noiseband_); tuner->set_output_negative(this->negative_output_); @@ -79,11 +84,6 @@ template class PIDAutotuneAction : public Action { this->parent_->start_autotune(std::move(tuner)); } - void set_noiseband(float noiseband) { noiseband_ = noiseband; } - void set_positive_output(float positive_output) { positive_output_ = positive_output; } - void set_negative_output(float negative_output) { negative_output_ = negative_output; } - - protected: float noiseband_; float positive_output_; float negative_output_; diff --git a/esphome/components/remote_base/jvc_protocol.h b/esphome/components/remote_base/jvc_protocol.h index 8a216f5348..af666bf131 100644 --- a/esphome/components/remote_base/jvc_protocol.h +++ b/esphome/components/remote_base/jvc_protocol.h @@ -23,7 +23,9 @@ DECLARE_REMOTE_PROTOCOL(JVC) template class JVCAction : public RemoteTransmitterActionBase { public: TEMPLATABLE_VALUE(uint32_t, data) - void encode(RemoteTransmitData *dst, Ts... x) override { + + protected: + void encode_(RemoteTransmitData *dst, Ts... x) override { JVCData data{}; data.data = this->data_.value(x...); JVCProtocol().encode(dst, data); diff --git a/esphome/components/remote_base/lg_protocol.h b/esphome/components/remote_base/lg_protocol.h index b810115f58..a2e9489d09 100644 --- a/esphome/components/remote_base/lg_protocol.h +++ b/esphome/components/remote_base/lg_protocol.h @@ -26,7 +26,9 @@ template class LGAction : public RemoteTransmitterActionBasedata_.value(x...); data.nbits = this->nbits_.value(x...); diff --git a/esphome/components/remote_base/nec_protocol.h b/esphome/components/remote_base/nec_protocol.h index c794991eab..8c1db632b6 100644 --- a/esphome/components/remote_base/nec_protocol.h +++ b/esphome/components/remote_base/nec_protocol.h @@ -25,7 +25,9 @@ template class NECAction : public RemoteTransmitterActionBaseaddress_.value(x...); data.command = this->command_.value(x...); diff --git a/esphome/components/remote_base/panasonic_protocol.h b/esphome/components/remote_base/panasonic_protocol.h index b13bd3e92d..1a09b2ffd6 100644 --- a/esphome/components/remote_base/panasonic_protocol.h +++ b/esphome/components/remote_base/panasonic_protocol.h @@ -26,7 +26,9 @@ template class PanasonicAction : public RemoteTransmitterActionB public: TEMPLATABLE_VALUE(uint16_t, address) TEMPLATABLE_VALUE(uint32_t, command) - void encode(RemoteTransmitData *dst, Ts... x) override { + + protected: + void encode_(RemoteTransmitData *dst, Ts... x) override { PanasonicData data{}; data.address = this->address_.value(x...); data.command = this->command_.value(x...); diff --git a/esphome/components/remote_base/pioneer_protocol.h b/esphome/components/remote_base/pioneer_protocol.h index f93e51a033..8761762232 100644 --- a/esphome/components/remote_base/pioneer_protocol.h +++ b/esphome/components/remote_base/pioneer_protocol.h @@ -25,7 +25,9 @@ template class PioneerAction : public RemoteTransmitterActionBas public: TEMPLATABLE_VALUE(uint16_t, rc_code_1) TEMPLATABLE_VALUE(uint16_t, rc_code_2) - void encode(RemoteTransmitData *dst, Ts... x) override { + + protected: + void encode_(RemoteTransmitData *dst, Ts... x) override { PioneerData data{}; data.rc_code_1 = this->rc_code_1_.value(x...); data.rc_code_2 = this->rc_code_2_.value(x...); diff --git a/esphome/components/remote_base/raw_protocol.h b/esphome/components/remote_base/raw_protocol.h index 1d9f1c5acc..39da5fa8fb 100644 --- a/esphome/components/remote_base/raw_protocol.h +++ b/esphome/components/remote_base/raw_protocol.h @@ -46,7 +46,8 @@ template class RawAction : public RemoteTransmitterActionBasecode_static_ != nullptr) { for (size_t i = 0; i < this->code_static_len_; i++) { auto val = this->code_static_[i]; @@ -61,7 +62,6 @@ template class RawAction : public RemoteTransmitterActionBaseset_carrier_frequency(this->carrier_frequency_.value(x...)); } - protected: std::function(Ts...)> code_func_{}; const int32_t *code_static_{nullptr}; int32_t code_static_len_{0}; diff --git a/esphome/components/remote_base/rc5_protocol.h b/esphome/components/remote_base/rc5_protocol.h index 2e1da74d9f..f90284c23c 100644 --- a/esphome/components/remote_base/rc5_protocol.h +++ b/esphome/components/remote_base/rc5_protocol.h @@ -26,7 +26,9 @@ template class RC5Action : public RemoteTransmitterActionBaseaddress_.value(x...); data.command = this->command_.value(x...); diff --git a/esphome/components/remote_base/rc_switch_protocol.h b/esphome/components/remote_base/rc_switch_protocol.h index 8362899cec..480f49ea92 100644 --- a/esphome/components/remote_base/rc_switch_protocol.h +++ b/esphome/components/remote_base/rc_switch_protocol.h @@ -71,7 +71,8 @@ template class RCSwitchRawAction : public RemoteTransmitterActio TEMPLATABLE_VALUE(RCSwitchBase, protocol); TEMPLATABLE_VALUE(std::string, code); - void encode(RemoteTransmitData *dst, Ts... x) override { + protected: + void encode_(RemoteTransmitData *dst, Ts... x) override { auto code = this->code_.value(x...); uint64_t the_code = decode_binary_string(code); uint8_t nbits = code.size(); @@ -88,7 +89,8 @@ template class RCSwitchTypeAAction : public RemoteTransmitterAct TEMPLATABLE_VALUE(std::string, device); TEMPLATABLE_VALUE(bool, state); - void encode(RemoteTransmitData *dst, Ts... x) override { + protected: + void encode_(RemoteTransmitData *dst, Ts... x) override { auto group = this->group_.value(x...); auto device = this->device_.value(x...); auto state = this->state_.value(x...); @@ -111,7 +113,8 @@ template class RCSwitchTypeBAction : public RemoteTransmitterAct TEMPLATABLE_VALUE(uint8_t, channel); TEMPLATABLE_VALUE(bool, state); - void encode(RemoteTransmitData *dst, Ts... x) override { + protected: + void encode_(RemoteTransmitData *dst, Ts... x) override { auto address = this->address_.value(x...); auto channel = this->channel_.value(x...); auto state = this->state_.value(x...); @@ -133,7 +136,8 @@ template class RCSwitchTypeCAction : public RemoteTransmitterAct TEMPLATABLE_VALUE(uint8_t, device); TEMPLATABLE_VALUE(bool, state); - void encode(RemoteTransmitData *dst, Ts... x) override { + protected: + void encode_(RemoteTransmitData *dst, Ts... x) override { auto family = this->family_.value(x...); auto group = this->group_.value(x...); auto device = this->device_.value(x...); @@ -156,7 +160,8 @@ template class RCSwitchTypeDAction : public RemoteTransmitterAct TEMPLATABLE_VALUE(uint8_t, device); TEMPLATABLE_VALUE(bool, state); - void encode(RemoteTransmitData *dst, Ts... x) override { + protected: + void encode_(RemoteTransmitData *dst, Ts... x) override { auto group = this->group_.value(x...); auto device = this->device_.value(x...); auto state = this->state_.value(x...); diff --git a/esphome/components/remote_base/remote_base.h b/esphome/components/remote_base/remote_base.h index 250b59e55e..c9cae96c7a 100644 --- a/esphome/components/remote_base/remote_base.h +++ b/esphome/components/remote_base/remote_base.h @@ -323,20 +323,20 @@ template class RemoteTransmitterActionBase : public Actionparent_ = parent; } - void play(Ts... x) override { + TEMPLATABLE_VALUE(uint32_t, send_times); + TEMPLATABLE_VALUE(uint32_t, send_wait); + + protected: + virtual void encode_(RemoteTransmitData *dst, Ts... x) = 0; + + void play_(Ts... x) override { auto call = this->parent_->transmit(); - this->encode(call.get_data(), x...); + this->encode_(call.get_data(), x...); call.set_send_times(this->send_times_.value_or(x..., 1)); call.set_send_wait(this->send_wait_.value_or(x..., 0)); call.perform(); } - virtual void encode(RemoteTransmitData *dst, Ts... x) = 0; - - TEMPLATABLE_VALUE(uint32_t, send_times); - TEMPLATABLE_VALUE(uint32_t, send_wait); - - protected: RemoteTransmitterBase *parent_{}; }; diff --git a/esphome/components/remote_base/samsung_protocol.h b/esphome/components/remote_base/samsung_protocol.h index 50ff02c1aa..0e1666b3b4 100644 --- a/esphome/components/remote_base/samsung_protocol.h +++ b/esphome/components/remote_base/samsung_protocol.h @@ -24,7 +24,9 @@ DECLARE_REMOTE_PROTOCOL(Samsung) template class SamsungAction : public RemoteTransmitterActionBase { public: TEMPLATABLE_VALUE(uint32_t, data) - void encode(RemoteTransmitData *dst, Ts... x) override { + + protected: + void encode_(RemoteTransmitData *dst, Ts... x) override { SamsungData data{}; data.data = this->data_.value(x...); SamsungProtocol().encode(dst, data); diff --git a/esphome/components/remote_base/sony_protocol.h b/esphome/components/remote_base/sony_protocol.h index 9f0bcdf82f..a122d3758c 100644 --- a/esphome/components/remote_base/sony_protocol.h +++ b/esphome/components/remote_base/sony_protocol.h @@ -26,7 +26,9 @@ template class SonyAction : public RemoteTransmitterActionBasedata_.value(x...); data.nbits = this->nbits_.value(x...); diff --git a/esphome/components/rf_bridge/rf_bridge.h b/esphome/components/rf_bridge/rf_bridge.h index 86713b8a5c..c747be9972 100644 --- a/esphome/components/rf_bridge/rf_bridge.h +++ b/esphome/components/rf_bridge/rf_bridge.h @@ -68,7 +68,8 @@ template class RFBridgeSendCodeAction : public Action { TEMPLATABLE_VALUE(uint16_t, high) TEMPLATABLE_VALUE(uint32_t, code) - void play(Ts... x) { + protected: + void play_(Ts... x) { RFBridgeData data{}; data.sync = this->sync_.value(x...); data.low = this->low_.value(x...); @@ -77,7 +78,6 @@ template class RFBridgeSendCodeAction : public Action { this->parent_->send_code(data); } - protected: RFBridgeComponent *parent_; }; @@ -85,9 +85,9 @@ template class RFBridgeLearnAction : public Action { public: RFBridgeLearnAction(RFBridgeComponent *parent) : parent_(parent) {} - void play(Ts... x) { this->parent_->learn(); } - protected: + void play_(Ts... x) { this->parent_->learn(); } + RFBridgeComponent *parent_; }; diff --git a/esphome/components/rotary_encoder/rotary_encoder.h b/esphome/components/rotary_encoder/rotary_encoder.h index 4220645478..0bbcf21ddb 100644 --- a/esphome/components/rotary_encoder/rotary_encoder.h +++ b/esphome/components/rotary_encoder/rotary_encoder.h @@ -74,9 +74,9 @@ template class RotaryEncoderSetValueAction : public Actionencoder_->set_value(this->value_.value(x...)); } protected: + void play_(Ts... x) override { this->encoder_->set_value(this->value_.value(x...)); } RotaryEncoderSensor *encoder_; }; diff --git a/esphome/components/script/script.h b/esphome/components/script/script.h index a6b208167f..92eba15e41 100644 --- a/esphome/components/script/script.h +++ b/esphome/components/script/script.h @@ -23,9 +23,9 @@ template class ScriptExecuteAction : public Action { public: ScriptExecuteAction(Script *script) : script_(script) {} - void play(Ts... x) override { this->script_->trigger(); } - protected: + void play_(Ts... x) override { this->script_->trigger(); } + Script *script_; }; @@ -33,9 +33,9 @@ template class ScriptStopAction : public Action { public: ScriptStopAction(Script *script) : script_(script) {} - void play(Ts... x) override { this->script_->stop(); } - protected: + void play_(Ts... x) override { this->script_->stop(); } + Script *script_; }; @@ -53,14 +53,11 @@ template class ScriptWaitAction : public Action, public C public: ScriptWaitAction(Script *script) : script_(script) {} - void play(Ts... x) override { /* ignore - see play_complex */ - } - void play_complex(Ts... x) override { this->num_running_++; // Check if we can continue immediately. if (!this->script_->is_running()) { - this->play_next(x...); + this->play_next_(x...); return; } this->var_ = std::make_tuple(x...); @@ -74,12 +71,15 @@ template class ScriptWaitAction : public Action, public C if (this->script_->is_running()) return; - this->play_next_tuple(this->var_); + this->play_next_tuple_(this->var_); } float get_setup_priority() const override { return setup_priority::DATA; } protected: + void play_(Ts... x) override { /* ignore - see play_complex */ + } + Script *script_; std::tuple var_{}; }; diff --git a/esphome/components/sensor/automation.h b/esphome/components/sensor/automation.h index 079077dba0..e6ddc3b95c 100644 --- a/esphome/components/sensor/automation.h +++ b/esphome/components/sensor/automation.h @@ -25,9 +25,9 @@ template class SensorPublishAction : public Action { public: SensorPublishAction(Sensor *sensor) : sensor_(sensor) {} TEMPLATABLE_VALUE(float, state) - void play(Ts... x) override { this->sensor_->publish_state(this->state_.value(x...)); } protected: + void play_(Ts... x) override { this->sensor_->publish_state(this->state_.value(x...)); } Sensor *sensor_; }; diff --git a/esphome/components/servo/servo.h b/esphome/components/servo/servo.h index a37188740c..b4076e8cd5 100644 --- a/esphome/components/servo/servo.h +++ b/esphome/components/servo/servo.h @@ -64,18 +64,18 @@ template class ServoWriteAction : public Action { public: ServoWriteAction(Servo *servo) : servo_(servo) {} TEMPLATABLE_VALUE(float, value) - void play(Ts... x) override { this->servo_->write(this->value_.value(x...)); } protected: + void play_(Ts... x) override { this->servo_->write(this->value_.value(x...)); } Servo *servo_; }; template class ServoDetachAction : public Action { public: ServoDetachAction(Servo *servo) : servo_(servo) {} - void play(Ts... x) override { this->servo_->detach(); } protected: + void play_(Ts... x) override { this->servo_->detach(); } Servo *servo_; }; diff --git a/esphome/components/sim800l/sim800l.h b/esphome/components/sim800l/sim800l.h index 696eb8890f..afdb504681 100644 --- a/esphome/components/sim800l/sim800l.h +++ b/esphome/components/sim800l/sim800l.h @@ -78,13 +78,13 @@ template class Sim800LSendSmsAction : public Action { TEMPLATABLE_VALUE(std::string, recipient) TEMPLATABLE_VALUE(std::string, message) - void play(Ts... x) { + protected: + void play_(Ts... x) { auto recipient = this->recipient_.value(x...); auto message = this->message_.value(x...); this->parent_->send_sms(recipient, message); } - protected: Sim800LComponent *parent_; }; diff --git a/esphome/components/stepper/stepper.h b/esphome/components/stepper/stepper.h index 33777dce83..31bdf59bf9 100644 --- a/esphome/components/stepper/stepper.h +++ b/esphome/components/stepper/stepper.h @@ -43,9 +43,9 @@ template class SetTargetAction : public Action { TEMPLATABLE_VALUE(int32_t, target) - void play(Ts... x) override { this->parent_->set_target(this->target_.value(x...)); } - protected: + void play_(Ts... x) override { this->parent_->set_target(this->target_.value(x...)); } + Stepper *parent_; }; @@ -55,9 +55,9 @@ template class ReportPositionAction : public Action { TEMPLATABLE_VALUE(int32_t, position) - void play(Ts... x) override { this->parent_->report_position(this->position_.value(x...)); } - protected: + void play_(Ts... x) override { this->parent_->report_position(this->position_.value(x...)); } + Stepper *parent_; }; @@ -67,13 +67,13 @@ template class SetSpeedAction : public Action { TEMPLATABLE_VALUE(float, speed); - void play(Ts... x) override { + protected: + void play_(Ts... x) override { float speed = this->speed_.value(x...); this->parent_->set_max_speed(speed); this->parent_->on_update_speed(); } - protected: Stepper *parent_; }; diff --git a/esphome/components/switch/automation.h b/esphome/components/switch/automation.h index 90bdabf0f4..c4824b106b 100644 --- a/esphome/components/switch/automation.h +++ b/esphome/components/switch/automation.h @@ -11,9 +11,9 @@ template class TurnOnAction : public Action { public: explicit TurnOnAction(Switch *a_switch) : switch_(a_switch) {} - void play(Ts... x) override { this->switch_->turn_on(); } - protected: + void play_(Ts... x) override { this->switch_->turn_on(); } + Switch *switch_; }; @@ -21,9 +21,9 @@ template class TurnOffAction : public Action { public: explicit TurnOffAction(Switch *a_switch) : switch_(a_switch) {} - void play(Ts... x) override { this->switch_->turn_off(); } - protected: + void play_(Ts... x) override { this->switch_->turn_off(); } + Switch *switch_; }; @@ -31,9 +31,9 @@ template class ToggleAction : public Action { public: explicit ToggleAction(Switch *a_switch) : switch_(a_switch) {} - void play(Ts... x) override { this->switch_->toggle(); } - protected: + void play_(Ts... x) override { this->switch_->toggle(); } + Switch *switch_; }; @@ -73,9 +73,9 @@ template class SwitchPublishAction : public Action { public: SwitchPublishAction(Switch *a_switch) : switch_(a_switch) {} TEMPLATABLE_VALUE(bool, state) - void play(Ts... x) override { this->switch_->publish_state(this->state_.value(x...)); } protected: + void play_(Ts... x) override { this->switch_->publish_state(this->state_.value(x...)); } Switch *switch_; }; diff --git a/esphome/components/text_sensor/automation.h b/esphome/components/text_sensor/automation.h index 496efb1cc3..9fac17c4cb 100644 --- a/esphome/components/text_sensor/automation.h +++ b/esphome/components/text_sensor/automation.h @@ -30,9 +30,9 @@ template class TextSensorPublishAction : public Action { public: TextSensorPublishAction(TextSensor *sensor) : sensor_(sensor) {} TEMPLATABLE_VALUE(std::string, state) - void play(Ts... x) override { this->sensor_->publish_state(this->state_.value(x...)); } protected: + void play_(Ts... x) override { this->sensor_->publish_state(this->state_.value(x...)); } TextSensor *sensor_; }; diff --git a/esphome/components/tm1651/tm1651.h b/esphome/components/tm1651/tm1651.h index 6eab24687c..6291cf1ecf 100644 --- a/esphome/components/tm1651/tm1651.h +++ b/esphome/components/tm1651/tm1651.h @@ -43,7 +43,8 @@ template class SetLevelPercentAction : public Action, pub public: TEMPLATABLE_VALUE(uint8_t, level_percent) - void play(Ts... x) override { + protected: + void play_(Ts... x) override { auto level_percent = this->level_percent_.value(x...); this->parent_->set_level_percent(level_percent); } @@ -53,7 +54,8 @@ template class SetLevelAction : public Action, public Par public: TEMPLATABLE_VALUE(uint8_t, level) - void play(Ts... x) override { + protected: + void play_(Ts... x) override { auto level = this->level_.value(x...); this->parent_->set_level(level); } @@ -63,20 +65,21 @@ template class SetBrightnessAction : public Action, publi public: TEMPLATABLE_VALUE(uint8_t, brightness) - void play(Ts... x) override { + protected: + void play_(Ts... x) override { auto brightness = this->brightness_.value(x...); this->parent_->set_brightness(brightness); } }; template class TurnOnAction : public Action, public Parented { - public: - void play(Ts... x) override { this->parent_->turn_on(); } + protected: + void play_(Ts... x) override { this->parent_->turn_on(); } }; template class TurnOffAction : public Action, public Parented { - public: - void play(Ts... x) override { this->parent_->turn_off(); } + protected: + void play_(Ts... x) override { this->parent_->turn_off(); } }; } // namespace tm1651 diff --git a/esphome/components/uart/automation.h b/esphome/components/uart/automation.h index 9686f94413..6889bc12e4 100644 --- a/esphome/components/uart/automation.h +++ b/esphome/components/uart/automation.h @@ -17,7 +17,8 @@ template class UARTWriteAction : public Action, public Pa this->static_ = true; } - void play(Ts... x) override { + protected: + void play_(Ts... x) override { if (this->static_) { this->parent_->write_array(this->data_static_); } else { @@ -25,8 +26,6 @@ template class UARTWriteAction : public Action, public Pa this->parent_->write_array(val); } } - - protected: bool static_{false}; std::function(Ts...)> data_func_{}; std::vector data_static_{}; diff --git a/esphome/core/automation.h b/esphome/core/automation.h index 6e595fc458..cb95364675 100644 --- a/esphome/core/automation.h +++ b/esphome/core/automation.h @@ -75,13 +75,25 @@ template class ActionList; template class Action { public: - virtual void play(Ts... x) = 0; virtual void play_complex(Ts... x) { this->num_running_++; - this->play(x...); - this->play_next(x...); + this->play_(x...); + this->play_next_(x...); } - void play_next(Ts... x) { + virtual void stop_complex() { + if (num_running_) { + this->stop_(); + this->num_running_ = 0; + } + this->stop_next_(); + } + virtual bool is_running() { return this->num_running_ > 0 || this->is_running_next_(); } + + protected: + friend ActionList; + + virtual void play_(Ts... x) = 0; + void play_next_(Ts... x) { if (this->num_running_ > 0) { this->num_running_--; if (this->next_ != nullptr) { @@ -89,37 +101,26 @@ template class Action { } } } - virtual void stop() {} - virtual void stop_complex() { - if (num_running_) { - this->stop(); - this->num_running_ = 0; - } - this->stop_next(); + template void play_next_tuple_(const std::tuple &tuple, seq) { + this->play_next_(std::get(tuple)...); } - void stop_next() { + void play_next_tuple_(const std::tuple &tuple) { + this->play_next_tuple_(tuple, typename gens::type()); + } + + virtual void stop_() {} + void stop_next_() { if (this->next_ != nullptr) { this->next_->stop_complex(); } } - virtual bool is_running() { return this->num_running_ > 0 || this->is_running_next(); } - bool is_running_next() { + + bool is_running_next_() { if (this->next_ == nullptr) return false; return this->next_->is_running(); } - void play_next_tuple(const std::tuple &tuple) { - this->play_next_tuple_(tuple, typename gens::type()); - } - - protected: - friend ActionList; - - template void play_next_tuple_(const std::tuple &tuple, seq) { - this->play_next(std::get(tuple)...); - } - Action *next_ = nullptr; int num_running_{0}; diff --git a/esphome/core/base_automation.h b/esphome/core/base_automation.h index bd34009790..4edd459424 100644 --- a/esphome/core/base_automation.h +++ b/esphome/core/base_automation.h @@ -108,27 +108,29 @@ template class DelayAction : public Action, public Compon TEMPLATABLE_VALUE(uint32_t, delay) - void stop() override { - this->cancel_timeout(""); - } - - void play(Ts... x) override { /* ignore - see play_complex */ - } - void play_complex(Ts... x) override { - auto f = std::bind(&Action::play_next, this, x...); + auto f = std::bind(&DelayAction::play_next_, this, x...); this->num_running_++; this->set_timeout(this->delay_.value(x...), f); } float get_setup_priority() const override { return setup_priority::HARDWARE; } + + protected: + void play_(Ts... x) override { /* ignore - see play_complex */ + } + + void stop_() override { + this->cancel_timeout(""); + } }; template class LambdaAction : public Action { public: explicit LambdaAction(std::function &&f) : f_(std::move(f)) {} - void play(Ts... x) override { this->f_(x...); } protected: + void play_(Ts... x) override { this->f_(x...); } + std::function f_; }; @@ -138,15 +140,12 @@ template class IfAction : public Action { void add_then(const std::vector *> &actions) { this->then_.add_actions(actions); - this->then_.add_action(new LambdaAction([this](Ts... x) { this->play_next(x...); })); + this->then_.add_action(new LambdaAction([this](Ts... x) { this->play_next_(x...); })); } void add_else(const std::vector *> &actions) { this->else_.add_actions(actions); - this->else_.add_action(new LambdaAction([this](Ts... x) { this->play_next(x...); })); - } - - void play(Ts... x) override { /* ignore - see play_complex */ + this->else_.add_action(new LambdaAction([this](Ts... x) { this->play_next_(x...); })); } void play_complex(Ts... x) override { @@ -154,25 +153,28 @@ template class IfAction : public Action { bool res = this->condition_->check(x...); if (res) { if (this->then_.empty()) { - this->play_next(x...); + this->play_next_(x...); } else if (this->num_running_ > 0) { this->then_.play(x...); } } else { if (this->else_.empty()) { - this->play_next(x...); + this->play_next_(x...); } else if (this->num_running_ > 0) { this->else_.play(x...); } } } - void stop() override { + protected: + void play_(Ts... x) override { /* ignore - see play_complex */ + } + + void stop_() override { this->then_.stop(); this->else_.stop(); } - protected: Condition *condition_; ActionList then_; ActionList else_; @@ -192,14 +194,11 @@ template class WhileAction : public Action { } } else { // condition false, play next - this->play_next_tuple(this->var_); + this->play_next_tuple_(this->var_); } })); } - void play(Ts... x) override { /* ignore - see play_complex */ - } - void play_complex(Ts... x) override { this->num_running_++; // Store loop parameters @@ -208,7 +207,7 @@ template class WhileAction : public Action { if (!this->condition_->check_tuple(this->var_)) { // If new condition check failed, stop loop if running this->then_.stop(); - this->play_next_tuple(this->var_); + this->play_next_tuple_(this->var_); return; } @@ -217,9 +216,12 @@ template class WhileAction : public Action { } } - void stop() override { this->then_.stop(); } - protected: + void play_(Ts... x) override { /* ignore - see play_complex */ + } + + void stop_() override { this->then_.stop(); } + Condition *condition_; ActionList then_; std::tuple var_{}; @@ -229,15 +231,12 @@ template class WaitUntilAction : public Action, public Co public: WaitUntilAction(Condition *condition) : condition_(condition) {} - void play(Ts... x) override { /* ignore - see play_complex */ - } - void play_complex(Ts... x) override { this->num_running_++; // Check if we can continue immediately. if (this->condition_->check(x...)) { if (this->num_running_ > 0) { - this->play_next(x...); + this->play_next_(x...); } return; } @@ -253,12 +252,15 @@ template class WaitUntilAction : public Action, public Co return; } - this->play_next_tuple(this->var_); + this->play_next_tuple_(this->var_); } float get_setup_priority() const override { return setup_priority::DATA; } protected: + void play_(Ts... x) override { /* ignore - see play_complex */ + } + Condition *condition_; std::tuple var_{}; }; @@ -266,9 +268,10 @@ template class WaitUntilAction : public Action, public Co template class UpdateComponentAction : public Action { public: UpdateComponentAction(PollingComponent *component) : component_(component) {} - void play(Ts... x) override { this->component_->update(); } protected: + void play_(Ts... x) override { this->component_->update(); } + PollingComponent *component_; };