limit switch implementation

This commit is contained in:
Paul Wieland 2024-03-23 11:58:51 -04:00
parent e79c0823e3
commit 7c8cc2e4e2
6 changed files with 33 additions and 19 deletions

View File

@ -87,11 +87,10 @@ binary_sensor:
entity_category: diagnostic entity_category: diagnostic
filters: filters:
- delayed_on_off: 500ms - delayed_on_off: 500ms
# on_state: on_state:
# then: then:
# lambda: |- lambda: |-
# id($id_prefix)->call_protocol(set_open_limit { static_cast<bool>(true) }); id($id_prefix)->set_open_limit(x);
- platform: gpio - platform: gpio
id: "${id_prefix}_dry_contact_close" id: "${id_prefix}_dry_contact_close"
pin: pin:
@ -104,12 +103,10 @@ binary_sensor:
entity_category: diagnostic entity_category: diagnostic
filters: filters:
- delayed_on_off: 500ms - delayed_on_off: 500ms
# on_press: on_state:
# - if: then:
# condition: lambda: |-
# binary_sensor.is_off: ${id_prefix}_dry_contact_open id($id_prefix)->set_close_limit(x);
# then:
# - cover.close: ${id_prefix}_garage_door
- platform: gpio - platform: gpio
id: "${id_prefix}_dry_contact_light" id: "${id_prefix}_dry_contact_light"
pin: pin:

View File

@ -36,21 +36,24 @@ namespace ratgdo {
void DryContact::sync() void DryContact::sync()
{ {
ESP_LOG1(TAG, "Ignoring sync action");
} }
void DryContact::set_open_limit(bool val) void DryContact::set_open_limit(bool state)
{ {
ESP_LOGD(TAG, "Set open_limit_reached to %d", val); ESP_LOGD(TAG, "Set open_limit_reached to %d", state);
this->last_open_limit_ = this->open_limit_reached_; this->last_open_limit_ = this->open_limit_reached_;
this->open_limit_reached_ = val; this->last_close_limit_ = false;
this->open_limit_reached_ = state;
this->send_door_state(); this->send_door_state();
} }
void DryContact::set_close_limit(bool val) void DryContact::set_close_limit(bool state)
{ {
ESP_LOGD(TAG, "Set close_limit_reached to %d", val); ESP_LOGD(TAG, "Set close_limit_reached to %d", state);
this->last_close_limit_ = this->close_limit_reached_; this->last_close_limit_ = this->close_limit_reached_;
this->close_limit_reached_ = val; this->last_open_limit_ = false;
this->close_limit_reached_ = state;
this->send_door_state(); this->send_door_state();
} }

View File

@ -29,8 +29,8 @@ namespace ratgdo {
void light_action(LightAction action); void light_action(LightAction action);
void lock_action(LockAction action); void lock_action(LockAction action);
void door_action(DoorAction action); void door_action(DoorAction action);
void set_open_limit(bool val); void set_open_limit(bool state);
void set_close_limit(bool val); void set_close_limit(bool state);
void send_door_state(); void send_door_state();
Result call(Args args); Result call(Args args);

View File

@ -102,6 +102,8 @@ namespace ratgdo {
virtual void dump_config(); virtual void dump_config();
virtual void sync(); virtual void sync();
virtual void set_open_limit(bool);
virtual void set_close_limit(bool);
virtual const Traits& traits() const; virtual const Traits& traits() const;

View File

@ -420,6 +420,16 @@ namespace ratgdo {
this->protocol_->sync(); this->protocol_->sync();
} }
void RATGDOComponent::set_open_limit(bool state)
{
this->protocol_->set_open_limit(state);
}
void RATGDOComponent::set_close_limit(bool state)
{
this->protocol_->set_close_limit(state);
}
void RATGDOComponent::door_open() void RATGDOComponent::door_open()
{ {
if (*this->door_state == DoorState::OPENING) { if (*this->door_state == DoorState::OPENING) {

View File

@ -145,6 +145,8 @@ namespace ratgdo {
void query_status(); void query_status();
void query_openings(); void query_openings();
void sync(); void sync();
void set_open_limit(bool);
void set_close_limit(bool);
// children subscriptions // children subscriptions
void subscribe_rolling_code_counter(std::function<void(uint32_t)>&& f); void subscribe_rolling_code_counter(std::function<void(uint32_t)>&& f);