[valve] Use register_apply_action for valve.open, valve.close, valve.stop and valve.toggle (#19618)

This commit is contained in:
J. Nick Koston
2026-09-25 17:00:33 +01:00
committed by GitHub
parent bb84409261
commit 1dcf0a0f9d
5 changed files with 32 additions and 95 deletions
+10 -37
View File
@@ -1,5 +1,5 @@
from esphome import automation
from esphome.automation import Condition, maybe_simple_id
from esphome.automation import maybe_simple_id
import esphome.codegen as cg
from esphome.components import mqtt, web_server
import esphome.config_validation as cv
@@ -62,13 +62,7 @@ VALVE_OPERATIONS = {
validate_valve_operation = cv.enum(VALVE_OPERATIONS, upper=True)
# Actions
OpenAction = valve_ns.class_("OpenAction", automation.Action)
CloseAction = valve_ns.class_("CloseAction", automation.Action)
StopAction = valve_ns.class_("StopAction", automation.Action)
ToggleAction = valve_ns.class_("ToggleAction", automation.Action)
ValvePublishAction = valve_ns.class_("ValvePublishAction", automation.Action)
ValveIsOpenCondition = valve_ns.class_("ValveIsOpenCondition", Condition)
ValveIsClosedCondition = valve_ns.class_("ValveIsClosedCondition", Condition)
# Triggers
ValveOpenTrigger = valve_ns.class_("ValveOpenTrigger", automation.Trigger.template())
@@ -182,36 +176,15 @@ VALVE_ACTION_SCHEMA = maybe_simple_id(
)
automation.register_simple_action(
"valve.open",
OpenAction,
VALVE_ACTION_SCHEMA,
synchronous=True,
)
automation.register_simple_action(
"valve.close",
CloseAction,
VALVE_ACTION_SCHEMA,
synchronous=True,
)
automation.register_simple_action(
"valve.stop",
StopAction,
VALVE_ACTION_SCHEMA,
synchronous=True,
)
automation.register_simple_action(
"valve.toggle",
ToggleAction,
VALVE_ACTION_SCHEMA,
synchronous=True,
)
for _name, _command in (
("valve.open", "set_command_open()"),
("valve.close", "set_command_close()"),
("valve.stop", "set_command_stop()"),
("valve.toggle", "set_command_toggle()"),
):
automation.register_apply_action(
_name, VALVE_ACTION_SCHEMA, automation.ApplyCall(_command), call="make_call"
)
VALVE_CONTROL_ACTION_SCHEMA = cv.Schema(
-58
View File
@@ -6,64 +6,6 @@
namespace esphome::valve {
template<typename... Ts> class OpenAction final : public Action<Ts...> {
public:
explicit OpenAction(Valve *valve) : valve_(valve) {}
void play(const Ts &...x) override { this->valve_->make_call().set_command_open().perform(); }
protected:
Valve *valve_;
};
template<typename... Ts> class CloseAction final : public Action<Ts...> {
public:
explicit CloseAction(Valve *valve) : valve_(valve) {}
void play(const Ts &...x) override { this->valve_->make_call().set_command_close().perform(); }
protected:
Valve *valve_;
};
template<typename... Ts> class StopAction final : public Action<Ts...> {
public:
explicit StopAction(Valve *valve) : valve_(valve) {}
void play(const Ts &...x) override { this->valve_->make_call().set_command_stop().perform(); }
protected:
Valve *valve_;
};
template<typename... Ts> class ToggleAction final : public Action<Ts...> {
public:
explicit ToggleAction(Valve *valve) : valve_(valve) {}
void play(const Ts &...x) override { this->valve_->make_call().set_command_toggle().perform(); }
protected:
Valve *valve_;
};
template<typename... Ts> class ValveIsOpenCondition final : public Condition<Ts...> {
public:
ValveIsOpenCondition(Valve *valve) : valve_(valve) {}
bool check(const Ts &...x) override { return this->valve_->is_fully_open(); }
protected:
Valve *valve_;
};
template<typename... Ts> class ValveIsClosedCondition final : public Condition<Ts...> {
public:
ValveIsClosedCondition(Valve *valve) : valve_(valve) {}
bool check(const Ts &...x) override { return this->valve_->is_fully_closed(); }
protected:
Valve *valve_;
};
class ValveOpenTrigger final : public Trigger<> {
public:
ValveOpenTrigger(Valve *a_valve) : valve_(a_valve) {
+18
View File
@@ -0,0 +1,18 @@
valve:
- platform: template
name: Test Valve
id: test_valve
optimistic: true
has_position: true
button:
- platform: template
name: Valve Commands
on_press:
- valve.open: test_valve
- valve.close: test_valve
- valve.stop: test_valve
- valve.toggle: test_valve
- valve.control:
id: test_valve
position: 50%
@@ -0,0 +1,2 @@
packages:
valve: !include common.yaml
@@ -0,0 +1,2 @@
packages:
valve: !include common.yaml