add template fan (#6310)

This commit is contained in:
Samuel Sieb
2024-03-10 15:42:02 -07:00
committed by GitHub
parent 0cdd0b295e
commit 6a46548a8b
10 changed files with 213 additions and 20 deletions
+48 -5
View File
@@ -111,6 +111,13 @@ template<typename... Ts> class FanIsOffCondition : public Condition<Ts...> {
Fan *state_;
};
class FanStateTrigger : public Trigger<Fan *> {
public:
FanStateTrigger(Fan *state) {
state->add_on_state_callback([this, state]() { this->trigger(state); });
}
};
class FanTurnOnTrigger : public Trigger<> {
public:
FanTurnOnTrigger(Fan *state) {
@@ -147,15 +154,51 @@ class FanTurnOffTrigger : public Trigger<> {
bool last_on_;
};
class FanSpeedSetTrigger : public Trigger<> {
class FanDirectionSetTrigger : public Trigger<FanDirection> {
public:
FanDirectionSetTrigger(Fan *state) {
state->add_on_state_callback([this, state]() {
auto direction = state->direction;
auto should_trigger = direction != this->last_direction_;
this->last_direction_ = direction;
if (should_trigger) {
this->trigger(direction);
}
});
this->last_direction_ = state->direction;
}
protected:
FanDirection last_direction_;
};
class FanOscillatingSetTrigger : public Trigger<bool> {
public:
FanOscillatingSetTrigger(Fan *state) {
state->add_on_state_callback([this, state]() {
auto oscillating = state->oscillating;
auto should_trigger = oscillating != this->last_oscillating_;
this->last_oscillating_ = oscillating;
if (should_trigger) {
this->trigger(oscillating);
}
});
this->last_oscillating_ = state->oscillating;
}
protected:
bool last_oscillating_;
};
class FanSpeedSetTrigger : public Trigger<int> {
public:
FanSpeedSetTrigger(Fan *state) {
state->add_on_state_callback([this, state]() {
auto speed = state->speed;
auto should_trigger = speed != !this->last_speed_;
auto should_trigger = speed != this->last_speed_;
this->last_speed_ = speed;
if (should_trigger) {
this->trigger();
this->trigger(speed);
}
});
this->last_speed_ = state->speed;
@@ -165,7 +208,7 @@ class FanSpeedSetTrigger : public Trigger<> {
int last_speed_;
};
class FanPresetSetTrigger : public Trigger<> {
class FanPresetSetTrigger : public Trigger<std::string> {
public:
FanPresetSetTrigger(Fan *state) {
state->add_on_state_callback([this, state]() {
@@ -173,7 +216,7 @@ class FanPresetSetTrigger : public Trigger<> {
auto should_trigger = preset_mode != this->last_preset_mode_;
this->last_preset_mode_ = preset_mode;
if (should_trigger) {
this->trigger();
this->trigger(preset_mode);
}
});
this->last_preset_mode_ = state->preset_mode;