mirror of
https://github.com/esphome/esphome.git
synced 2024-12-02 11:44:13 +01:00
51 lines
1.5 KiB
C++
51 lines
1.5 KiB
C++
|
#include "copy_cover.h"
|
||
|
#include "esphome/core/log.h"
|
||
|
|
||
|
namespace esphome {
|
||
|
namespace copy {
|
||
|
|
||
|
static const char *const TAG = "copy.cover";
|
||
|
|
||
|
void CopyCover::setup() {
|
||
|
source_->add_on_state_callback([this]() {
|
||
|
this->current_operation = this->source_->current_operation;
|
||
|
this->position = this->source_->position;
|
||
|
this->tilt = this->source_->tilt;
|
||
|
this->publish_state();
|
||
|
});
|
||
|
|
||
|
this->current_operation = this->source_->current_operation;
|
||
|
this->position = this->source_->position;
|
||
|
this->tilt = this->source_->tilt;
|
||
|
this->publish_state();
|
||
|
}
|
||
|
|
||
|
void CopyCover::dump_config() { LOG_COVER("", "Copy Cover", this); }
|
||
|
|
||
|
cover::CoverTraits CopyCover::get_traits() {
|
||
|
auto base = source_->get_traits();
|
||
|
cover::CoverTraits traits{};
|
||
|
// copy traits manually so it doesn't break when new options are added
|
||
|
// but the control() method hasn't implemented them yet.
|
||
|
traits.set_is_assumed_state(base.get_is_assumed_state());
|
||
|
traits.set_supports_position(base.get_supports_position());
|
||
|
traits.set_supports_tilt(base.get_supports_tilt());
|
||
|
traits.set_supports_toggle(base.get_supports_toggle());
|
||
|
return traits;
|
||
|
}
|
||
|
|
||
|
void CopyCover::control(const cover::CoverCall &call) {
|
||
|
auto call2 = source_->make_call();
|
||
|
call2.set_stop(call.get_stop());
|
||
|
if (call.get_tilt().has_value())
|
||
|
call2.set_tilt(*call.get_tilt());
|
||
|
if (call.get_position().has_value())
|
||
|
call2.set_position(*call.get_position());
|
||
|
if (call.get_tilt().has_value())
|
||
|
call2.set_tilt(*call.get_tilt());
|
||
|
call2.perform();
|
||
|
}
|
||
|
|
||
|
} // namespace copy
|
||
|
} // namespace esphome
|