mirror of
https://github.com/esphome/esphome.git
synced 2024-11-25 16:38:16 +01:00
Add is_on and is_off conditions for the fan component (#2225)
Co-authored-by: Chris Nussbaum <chris.nussbaum@protolabs.com>
This commit is contained in:
parent
9937ad7fa0
commit
a4d024f43d
3 changed files with 46 additions and 0 deletions
|
@ -42,6 +42,9 @@ ToggleAction = fan_ns.class_("ToggleAction", automation.Action)
|
||||||
FanTurnOnTrigger = fan_ns.class_("FanTurnOnTrigger", automation.Trigger.template())
|
FanTurnOnTrigger = fan_ns.class_("FanTurnOnTrigger", automation.Trigger.template())
|
||||||
FanTurnOffTrigger = fan_ns.class_("FanTurnOffTrigger", automation.Trigger.template())
|
FanTurnOffTrigger = fan_ns.class_("FanTurnOffTrigger", automation.Trigger.template())
|
||||||
|
|
||||||
|
FanIsOnCondition = fan_ns.class_("FanIsOnCondition", automation.Condition.template())
|
||||||
|
FanIsOffCondition = fan_ns.class_("FanIsOffCondition", automation.Condition.template())
|
||||||
|
|
||||||
FAN_SCHEMA = cv.NAMEABLE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend(
|
FAN_SCHEMA = cv.NAMEABLE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend(
|
||||||
{
|
{
|
||||||
cv.GenerateID(): cv.declare_id(FanState),
|
cv.GenerateID(): cv.declare_id(FanState),
|
||||||
|
@ -171,6 +174,29 @@ async def fan_turn_on_to_code(config, action_id, template_arg, args):
|
||||||
return var
|
return var
|
||||||
|
|
||||||
|
|
||||||
|
@automation.register_condition(
|
||||||
|
"fan.is_on",
|
||||||
|
FanIsOnCondition,
|
||||||
|
automation.maybe_simple_id(
|
||||||
|
{
|
||||||
|
cv.Required(CONF_ID): cv.use_id(FanState),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
)
|
||||||
|
@automation.register_condition(
|
||||||
|
"fan.is_off",
|
||||||
|
FanIsOffCondition,
|
||||||
|
automation.maybe_simple_id(
|
||||||
|
{
|
||||||
|
cv.Required(CONF_ID): cv.use_id(FanState),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
)
|
||||||
|
async def fan_is_on_off_to_code(config, condition_id, template_arg, args):
|
||||||
|
paren = await cg.get_variable(config[CONF_ID])
|
||||||
|
return cg.new_Pvariable(condition_id, template_arg, paren)
|
||||||
|
|
||||||
|
|
||||||
@coroutine_with_priority(100.0)
|
@coroutine_with_priority(100.0)
|
||||||
async def to_code(config):
|
async def to_code(config):
|
||||||
cg.add_define("USE_FAN")
|
cg.add_define("USE_FAN")
|
||||||
|
|
|
@ -50,6 +50,23 @@ template<typename... Ts> class ToggleAction : public Action<Ts...> {
|
||||||
FanState *state_;
|
FanState *state_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class FanIsOnCondition : public Condition<Ts...> {
|
||||||
|
public:
|
||||||
|
explicit FanIsOnCondition(FanState *state) : state_(state) {}
|
||||||
|
bool check(Ts... x) override { return this->state_->state; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
FanState *state_;
|
||||||
|
};
|
||||||
|
template<typename... Ts> class FanIsOffCondition : public Condition<Ts...> {
|
||||||
|
public:
|
||||||
|
explicit FanIsOffCondition(FanState *state) : state_(state) {}
|
||||||
|
bool check(Ts... x) override { return !this->state_->state; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
FanState *state_;
|
||||||
|
};
|
||||||
|
|
||||||
class FanTurnOnTrigger : public Trigger<> {
|
class FanTurnOnTrigger : public Trigger<> {
|
||||||
public:
|
public:
|
||||||
FanTurnOnTrigger(FanState *state) {
|
FanTurnOnTrigger(FanState *state) {
|
||||||
|
|
|
@ -129,6 +129,8 @@ mqtt:
|
||||||
- mqtt.connected:
|
- mqtt.connected:
|
||||||
- light.is_on: kitchen
|
- light.is_on: kitchen
|
||||||
- light.is_off: kitchen
|
- light.is_off: kitchen
|
||||||
|
- fan.is_on: fan_speed
|
||||||
|
- fan.is_off: fan_speed
|
||||||
then:
|
then:
|
||||||
- lambda: |-
|
- lambda: |-
|
||||||
int data = x["my_data"];
|
int data = x["my_data"];
|
||||||
|
@ -1868,6 +1870,7 @@ fan:
|
||||||
oscillation_output: gpio_19
|
oscillation_output: gpio_19
|
||||||
direction_output: gpio_26
|
direction_output: gpio_26
|
||||||
- platform: speed
|
- platform: speed
|
||||||
|
id: fan_speed
|
||||||
output: pca_6
|
output: pca_6
|
||||||
speed_count: 10
|
speed_count: 10
|
||||||
name: 'Living Room Fan 2'
|
name: 'Living Room Fan 2'
|
||||||
|
|
Loading…
Reference in a new issue