mirror of
https://github.com/esphome/esphome.git
synced 2025-09-08 22:32:21 +01:00
* Add "stop" trait to Cover * Add `supports_stop` to Cover protobuf msg * Run `script/api_protobuf/api_protobuf.py` ... followed by `script/clang-format -i` * Add `has_stop` field to template Cover * Set `has_stop` during Cover codegen * Set `supports_stop` trait on all other Cover types * Bump APIVersion to 1.8 --------- Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
88 lines
2.1 KiB
C++
88 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include "esphome/core/component.h"
|
|
#include "esphome/components/cover/cover.h"
|
|
|
|
namespace esphome {
|
|
namespace demo {
|
|
|
|
enum class DemoCoverType {
|
|
TYPE_1,
|
|
TYPE_2,
|
|
TYPE_3,
|
|
TYPE_4,
|
|
};
|
|
|
|
class DemoCover : public cover::Cover, public Component {
|
|
public:
|
|
void set_type(DemoCoverType type) { type_ = type; }
|
|
void setup() override {
|
|
switch (type_) {
|
|
case DemoCoverType::TYPE_1:
|
|
this->position = cover::COVER_OPEN;
|
|
break;
|
|
case DemoCoverType::TYPE_2:
|
|
this->position = 0.7;
|
|
break;
|
|
case DemoCoverType::TYPE_3:
|
|
this->position = 0.1;
|
|
this->tilt = 0.8;
|
|
break;
|
|
case DemoCoverType::TYPE_4:
|
|
this->position = cover::COVER_CLOSED;
|
|
this->tilt = 1.0;
|
|
break;
|
|
}
|
|
this->publish_state();
|
|
}
|
|
|
|
protected:
|
|
void control(const cover::CoverCall &call) override {
|
|
if (call.get_position().has_value()) {
|
|
float target = *call.get_position();
|
|
this->current_operation =
|
|
target > this->position ? cover::COVER_OPERATION_OPENING : cover::COVER_OPERATION_CLOSING;
|
|
|
|
this->set_timeout("move", 2000, [this, target]() {
|
|
this->current_operation = cover::COVER_OPERATION_IDLE;
|
|
this->position = target;
|
|
this->publish_state();
|
|
});
|
|
}
|
|
if (call.get_tilt().has_value()) {
|
|
this->tilt = *call.get_tilt();
|
|
}
|
|
if (call.get_stop()) {
|
|
this->cancel_timeout("move");
|
|
}
|
|
|
|
this->publish_state();
|
|
}
|
|
cover::CoverTraits get_traits() override {
|
|
cover::CoverTraits traits{};
|
|
switch (type_) {
|
|
case DemoCoverType::TYPE_1:
|
|
traits.set_is_assumed_state(true);
|
|
break;
|
|
case DemoCoverType::TYPE_2:
|
|
traits.set_supports_position(true);
|
|
break;
|
|
case DemoCoverType::TYPE_3:
|
|
traits.set_supports_position(true);
|
|
traits.set_supports_tilt(true);
|
|
break;
|
|
case DemoCoverType::TYPE_4:
|
|
traits.set_supports_stop(true);
|
|
traits.set_is_assumed_state(true);
|
|
traits.set_supports_tilt(true);
|
|
break;
|
|
}
|
|
return traits;
|
|
}
|
|
|
|
DemoCoverType type_;
|
|
};
|
|
|
|
} // namespace demo
|
|
} // namespace esphome
|