11static const char *
const TAG =
"valve";
18 return LOG_STR(
"OPEN");
20 return LOG_STR(
"CLOSE");
22 return LOG_STR(
"UNKNOWN");
29 return ValveOperationStrings::get_log_str(
static_cast<uint8_t
>(op), ValveOperationStrings::LAST_INDEX);
36 if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR(
"OPEN")) == 0) {
38 }
else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR(
"CLOSE")) == 0) {
40 }
else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR(
"STOP")) == 0) {
42 }
else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR(
"TOGGLE")) == 0) {
74 ESP_LOGV(TAG,
" Command: STOP");
77 if (traits.get_supports_position()) {
78 ESP_LOGV(TAG,
" Position: %.0f%%", *this->
position_ * 100.0f);
83 if (this->
toggle_.has_value()) {
84 ESP_LOGV(TAG,
" Command: TOGGLE");
95 ESP_LOGW(TAG,
"'%s' - This valve device does not support setting position!", this->
parent_->
get_name().
c_str());
102 if (this->
toggle_.has_value()) {
103 if (!traits.get_supports_toggle()) {
104 ESP_LOGW(TAG,
"'%s' - This valve device does not support toggle!", this->
parent_->
get_name().
c_str());
110 ESP_LOGW(TAG,
"Cannot set position when stopping a valve!");
113 if (this->
toggle_.has_value()) {
114 ESP_LOGW(TAG,
"Cannot set toggle when stopping a valve!");
126 ESP_LOGV(TAG,
"'%s' >>", this->
name_.
c_str());
128 if (traits.get_supports_position()) {
129 ESP_LOGV(TAG,
" Position: %.0f%%", this->
position * 100.0f);
132 ESP_LOGV(TAG,
" State: OPEN");
133 }
else if (this->
position == VALVE_CLOSED) {
134 ESP_LOGV(TAG,
" State: CLOSED");
136 ESP_LOGV(TAG,
" State: UNKNOWN");
142#if defined(USE_VALVE) && defined(USE_CONTROLLER_REGISTRY)
143 ControllerRegistry::notify_valve_update(
this);
148 memset(&restore, 0,
sizeof(restore));
const StringRef & get_name() const
ESPPreferenceObject make_entity_preference(uint32_t version=0)
Create a preference object for storing this entity's state/settings.
constexpr const char * c_str() const
ValveCall & set_stop(bool stop)
Set whether this valve call should stop the valve.
ValveCall & set_command_close()
Set the command to close the valve.
ValveCall & set_position(float position)
Set the call to a certain target position.
const optional< bool > & get_toggle() const
ValveCall & set_command_toggle()
Set the command to toggle the valve.
ValveCall & set_command_stop()
Set the command to stop the valve.
const optional< float > & get_position() const
ValveCall & set_command(const char *command)
Set the command as a string, "STOP", "OPEN", "CLOSE", "TOGGLE".
optional< float > position_
ValveCall & set_command_open()
Set the command to open the valve.
void perform()
Perform the valve call.
Base class for all valve devices.
optional< ValveRestoreState > restore_state_()
void publish_state(bool save=true)
Publish the current state of the valve.
LazyCallbackManager< void()> state_callback_
float position
The position of the valve from 0.0 (fully closed) to 1.0 (fully open).
virtual void control(const ValveCall &call)=0
ValveCall make_call()
Construct a new valve call used to control the valve.
ValveOperation current_operation
The current operation of the valve (idle, opening, closing).
virtual ValveTraits get_traits()=0
const LogString * valve_command_to_str(float pos)
PROGMEM_STRING_TABLE(ValveOperationStrings, "IDLE", "OPENING", "CLOSING", "UNKNOWN")
ValveOperation
Enum encoding the current operation of a valve.
const LogString * valve_operation_to_str(ValveOperation op)
Struct used to store the restored state of a valve.
void apply(Valve *valve)
Apply these settings to the valve.
ValveCall to_call(Valve *valve)
Convert this struct to a valve call that can be performed.