mirror of
https://github.com/esphome/esphome.git
synced 2025-09-06 21:32:21 +01:00
55 lines
1.3 KiB
C++
55 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include "esphome/components/valve/valve.h"
|
|
|
|
namespace esphome {
|
|
namespace demo {
|
|
|
|
enum class DemoValveType {
|
|
TYPE_1,
|
|
TYPE_2,
|
|
};
|
|
|
|
class DemoValve : public valve::Valve {
|
|
public:
|
|
valve::ValveTraits get_traits() override {
|
|
valve::ValveTraits traits;
|
|
if (this->type_ == DemoValveType::TYPE_2) {
|
|
traits.set_supports_position(true);
|
|
traits.set_supports_toggle(true);
|
|
traits.set_supports_stop(true);
|
|
}
|
|
return traits;
|
|
}
|
|
|
|
void set_type(DemoValveType type) { this->type_ = type; }
|
|
|
|
protected:
|
|
void control(const valve::ValveCall &call) override {
|
|
if (call.get_position().has_value()) {
|
|
this->position = *call.get_position();
|
|
this->publish_state();
|
|
return;
|
|
} else if (call.get_toggle().has_value()) {
|
|
if (call.get_toggle().value()) {
|
|
if (this->position == valve::VALVE_OPEN) {
|
|
this->position = valve::VALVE_CLOSED;
|
|
this->publish_state();
|
|
} else {
|
|
this->position = valve::VALVE_OPEN;
|
|
this->publish_state();
|
|
}
|
|
}
|
|
return;
|
|
} else if (call.get_stop()) {
|
|
this->current_operation = valve::VALVE_OPERATION_IDLE;
|
|
this->publish_state(); // Keep the current position
|
|
return;
|
|
}
|
|
}
|
|
DemoValveType type_{};
|
|
};
|
|
|
|
} // namespace demo
|
|
} // namespace esphome
|