setup door controls

This commit is contained in:
Paul Wieland 2024-03-23 12:24:11 -04:00
parent 7c8cc2e4e2
commit 1f6239ee1d
3 changed files with 16 additions and 11 deletions

View File

@ -202,7 +202,7 @@ button:
- platform: template - platform: template
id: ${id_prefix}_toggle_door id: ${id_prefix}_toggle_door
name: "Toggle door!" name: "Toggle door"
on_press: on_press:
then: then:
lambda: !lambda |- lambda: !lambda |-

View File

@ -23,6 +23,7 @@ namespace ratgdo {
this->last_open_limit_ = 0; this->last_open_limit_ = 0;
this->close_limit_reached_ = 0; this->close_limit_reached_ = 0;
this->last_close_limit_ = 0; this->last_close_limit_ = 0;
this->door_state_ = DoorState::UNKNOWN;
} }
void DryContact::loop() void DryContact::loop()
@ -58,23 +59,21 @@ namespace ratgdo {
} }
void DryContact::send_door_state(){ void DryContact::send_door_state(){
DoorState door_state;
if(this->open_limit_reached_){ if(this->open_limit_reached_){
door_state = DoorState::OPEN; this->door_state_ = DoorState::OPEN;
}else if(this->close_limit_reached_){ }else if(this->close_limit_reached_){
door_state = DoorState::CLOSED; this->door_state_ = DoorState::CLOSED;
}else if(!this->close_limit_reached_ && !this->open_limit_reached_){ }else if(!this->close_limit_reached_ && !this->open_limit_reached_){
if(this->last_close_limit_){ if(this->last_close_limit_){
door_state = DoorState::OPENING; this->door_state_ = DoorState::OPENING;
} }
if(this->last_open_limit_){ if(this->last_open_limit_){
door_state = DoorState::CLOSING; this->door_state_ = DoorState::CLOSING;
} }
} }
this->ratgdo_->received(door_state); this->ratgdo_->received(this->door_state_);
} }
void DryContact::light_action(LightAction action) void DryContact::light_action(LightAction action)
@ -91,14 +90,19 @@ namespace ratgdo {
void DryContact::door_action(DoorAction action) void DryContact::door_action(DoorAction action)
{ {
if (action != DoorAction::TOGGLE) { if (action == DoorAction::OPEN && this->door_state_ != DoorState::CLOSED) {
ESP_LOG1(TAG, "Ignoring door action: %s", DoorAction_to_string(action)); ESP_LOGW(TAG, "The door is not closed. Ignoring door action: %s", DoorAction_to_string(action));
return; return;
} }
if (action == DoorAction::CLOSE && this->door_state_ != DoorState::OPEN) {
ESP_LOGW(TAG, "The door is not open. Ignoring door action: %s", DoorAction_to_string(action));
return;
}
ESP_LOG1(TAG, "Door action: %s", DoorAction_to_string(action)); ESP_LOG1(TAG, "Door action: %s", DoorAction_to_string(action));
this->tx_pin_->digital_write(1); this->tx_pin_->digital_write(1);
this->scheduler_->set_timeout(this->ratgdo_, "", 200, [=] { this->scheduler_->set_timeout(this->ratgdo_, "", 500, [=] {
this->tx_pin_->digital_write(0); this->tx_pin_->digital_write(0);
}); });
} }

View File

@ -46,6 +46,7 @@ namespace ratgdo {
RATGDOComponent* ratgdo_; RATGDOComponent* ratgdo_;
Scheduler* scheduler_; Scheduler* scheduler_;
DoorState door_state_;
bool open_limit_reached_; bool open_limit_reached_;
bool last_open_limit_; bool last_open_limit_;
bool close_limit_reached_; bool close_limit_reached_;