#pragma once #include "aux_ac.h" #include "esphome/core/automation.h" #include "esphome/core/component.h" namespace esphome { namespace aux_ac { // **************************************** DISPLAY ACTIONS **************************************** template class AirConDisplayOffAction : public Action { public: explicit AirConDisplayOffAction(AirCon *ac) : ac_(ac) {} void play(Ts... x) override { this->ac_->displayOffSequence(); } protected: AirCon *ac_; }; template class AirConDisplayOnAction : public Action { public: explicit AirConDisplayOnAction(AirCon *ac) : ac_(ac) {} void play(Ts... x) override { this->ac_->displayOnSequence(); } protected: AirCon *ac_; }; // **************************************** VERTICAL LOUVER ACTIONS **************************************** template class AirConVLouverSwingAction : public Action { public: explicit AirConVLouverSwingAction(AirCon *ac) : ac_(ac) {} void play(Ts... x) override { this->ac_->setVLouverSwingSequence(); } protected: AirCon *ac_; }; template class AirConVLouverStopAction : public Action { public: explicit AirConVLouverStopAction(AirCon *ac) : ac_(ac) {} void play(Ts... x) override { this->ac_->setVLouverStopSequence(); } protected: AirCon *ac_; }; template class AirConVLouverTopAction : public Action { public: explicit AirConVLouverTopAction(AirCon *ac) : ac_(ac) {} void play(Ts... x) override { this->ac_->setVLouverTopSequence(); } protected: AirCon *ac_; }; template class AirConVLouverMiddleAboveAction : public Action { public: explicit AirConVLouverMiddleAboveAction(AirCon *ac) : ac_(ac) {} void play(Ts... x) override { this->ac_->setVLouverMiddleAboveSequence(); } protected: AirCon *ac_; }; template class AirConVLouverMiddleAction : public Action { public: explicit AirConVLouverMiddleAction(AirCon *ac) : ac_(ac) {} void play(Ts... x) override { this->ac_->setVLouverMiddleSequence(); } protected: AirCon *ac_; }; template class AirConVLouverMiddleBelowAction : public Action { public: explicit AirConVLouverMiddleBelowAction(AirCon *ac) : ac_(ac) {} void play(Ts... x) override { this->ac_->setVLouverMiddleBelowSequence(); } protected: AirCon *ac_; }; template class AirConVLouverBottomAction : public Action { public: explicit AirConVLouverBottomAction(AirCon *ac) : ac_(ac) {} void play(Ts... x) override { this->ac_->setVLouverBottomSequence(); } protected: AirCon *ac_; }; template class AirConVLouverSetAction : public Action { public: AirConVLouverSetAction(AirCon *ac) : ac_(ac) {} TEMPLATABLE_VALUE(uint8_t, value); void play(Ts... x) { vlpos_ = this->value_.value(x...); this->ac_->setVLouverFrontendSequence((ac_vlouver_frontend)vlpos_); } protected: AirCon *ac_; uint8_t vlpos_; }; // **************************************** SEND TEST PACKET ACTION **************************************** template class AirConSendTestPacketAction : public Action { public: explicit AirConSendTestPacketAction(AirCon *ac) : ac_(ac) {} void set_data_template(std::function(Ts...)> func) { this->data_func_ = func; this->static_ = false; } void set_data_static(const std::vector &data) { this->data_static_ = data; this->static_ = true; } void play(Ts... x) override { if (this->static_) { this->ac_->sendTestPacket(this->data_static_); } else { auto val = this->data_func_(x...); this->ac_->sendTestPacket(val); } } protected: AirCon *ac_; bool static_{false}; std::function(Ts...)> data_func_{}; std::vector data_static_{}; }; // **************************************** POWER LIMITATION ACTIONS **************************************** template class AirConPowerLimitationOffAction : public Action { public: explicit AirConPowerLimitationOffAction(AirCon *ac) : ac_(ac) {} void play(Ts... x) override { this->ac_->powerLimitationOffSequence(); } protected: AirCon *ac_; }; template class AirConPowerLimitationOnAction : public Action { public: AirConPowerLimitationOnAction(AirCon *ac) : ac_(ac) {} TEMPLATABLE_VALUE(uint8_t, value); void play(Ts... x) { this->pwr_lim_ = this->value_.value(x...); this->ac_->powerLimitationOnSequence(this->pwr_lim_); } protected: AirCon *ac_; uint8_t pwr_lim_; }; } // namespace aux_ac } // namespace esphome