mirror of
https://github.com/esphome/esphome.git
synced 2026-09-28 07:20:24 +00:00
[valve] Use register_apply_action for valve.open, valve.close, valve.stop and valve.toggle (#19618)
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user