12static const char *
const TAG =
"valve";
19 return LOG_STR(
"OPEN");
21 return LOG_STR(
"CLOSE");
23 return LOG_STR(
"UNKNOWN");
30 return ValveOperationStrings::get_log_str(
static_cast<uint8_t
>(op), ValveOperationStrings::LAST_INDEX);
37 if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR(
"OPEN")) == 0) {
39 }
else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR(
"CLOSE")) == 0) {
41 }
else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR(
"STOP")) == 0) {
43 }
else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR(
"TOGGLE")) == 0) {
75 ESP_LOGD(TAG,
" Command: STOP");
78 if (traits.get_supports_position()) {
79 ESP_LOGD(TAG,
" Position: %.0f%%", *this->
position_ * 100.0f);
85 ESP_LOGD(TAG,
" Command: TOGGLE");
96 ESP_LOGW(TAG,
"'%s' - This valve device does not support setting position!", this->
parent_->
get_name().
c_str());
104 if (!traits.get_supports_toggle()) {
105 ESP_LOGW(TAG,
"'%s' - This valve device does not support toggle!", this->
parent_->
get_name().
c_str());
111 ESP_LOGW(TAG,
"Cannot set position when stopping a valve!");
115 ESP_LOGW(TAG,
"Cannot set toggle when stopping a valve!");
132 ESP_LOGD(TAG,
"'%s' >>", this->
name_.
c_str());
134 if (traits.get_supports_position()) {
135 ESP_LOGD(TAG,
" Position: %.0f%%", this->
position * 100.0f);
138 ESP_LOGD(TAG,
" State: OPEN");
139 }
else if (this->
position == VALVE_CLOSED) {
140 ESP_LOGD(TAG,
" State: CLOSED");
142 ESP_LOGD(TAG,
" State: UNKNOWN");
148#if defined(USE_VALVE) && defined(USE_CONTROLLER_REGISTRY)
154 memset(&restore, 0,
sizeof(restore));
static void notify_valve_update(valve::Valve *obj)
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_
bool is_fully_closed() const
Helper method to check if the valve is fully closed. Equivalent to comparing .position against 0....
bool is_fully_open() const
Helper method to check if the valve is fully open. Equivalent to comparing .position against 1....
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).
void add_on_state_callback(std::function< void()> &&f)
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)
Providing packet encoding functions for exchanging data with a remote host.
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.