Compare commits

...

4 Commits

Author SHA1 Message Date
Matt MacAdam 555433a76d
Merge 046f71be6d into 348e4403db 2024-07-12 07:29:23 -05:00
Paul Wieland 348e4403db
Wall panel detection (#305)
* Fix wall panel detection
2024-07-12 08:05:28 -04:00
J. Nick Koston 046f71be6d
Merge branch 'main' into toggleonopenclosev2 2024-07-02 18:05:22 -07:00
Matt MacAdam 7f6cb19983 update base.yaml to toggle door if close and open contacts are triggered simulteaneously 2024-06-02 15:41:07 -07:00
2 changed files with 17 additions and 9 deletions

View File

@ -142,13 +142,20 @@ binary_sensor:
name: "Dry contact open"
entity_category: diagnostic
filters:
- delayed_on_off: 500ms
- delayed_on: 50ms
- delayed_off: 500ms
on_press:
- delay: 50ms
- if:
condition:
binary_sensor.is_off: ${id_prefix}_dry_contact_close
then:
- cover.open: ${id_prefix}_garage_door
- if:
condition:
binary_sensor.is_on: ${id_prefix}_dry_contact_close
then:
- cover.toggle: ${id_prefix}_garage_door
- platform: gpio
id: "${id_prefix}_dry_contact_close"
pin:
@ -160,8 +167,10 @@ binary_sensor:
name: "Dry contact close"
entity_category: diagnostic
filters:
- delayed_on_off: 500ms
- delayed_on: 50ms
- delayed_off: 500ms
on_press:
- delay: 50ms
- if:
condition:
binary_sensor.is_off: ${id_prefix}_dry_contact_open

View File

@ -65,14 +65,14 @@ namespace ratgdo {
void Secplus1::wall_panel_emulation(size_t index)
{
if (this->wall_panel_emulation_state_ == WallPanelEmulationState::WAITING) {
ESP_LOG1(TAG, "Looking for security+ 1.0 wall panel...");
ESP_LOGD(TAG, "Looking for security+ 1.0 wall panel...");
if (this->door_state != DoorState::UNKNOWN || this->light_state != LightState::UNKNOWN) {
ESP_LOG1(TAG, "Wall panel detected");
return;
}
if (millis() - this->wall_panel_emulation_start_ > 35000 && !this->wall_panel_starting_) {
ESP_LOG1(TAG, "No wall panel detected. Switching to emulation mode.");
ESP_LOGD(TAG, "No wall panel detected. Switching to emulation mode.");
this->wall_panel_emulation_state_ = WallPanelEmulationState::RUNNING;
}
this->scheduler_->set_timeout(this->ratgdo_, "wall_panel_emulation", 2000, [=] {
@ -293,7 +293,10 @@ namespace ratgdo {
void Secplus1::handle_command(const RxCommand& cmd)
{
if (cmd.req == CommandType::QUERY_DOOR_STATUS) {
if (cmd.req == CommandType::TOGGLE_DOOR_RELEASE || cmd.resp == 0x31) {
ESP_LOGD(TAG, "wall panel is starting");
this->wall_panel_starting_ = true;
} else if (cmd.req == CommandType::QUERY_DOOR_STATUS) {
DoorState door_state;
auto val = cmd.resp & 0x7;
@ -365,10 +368,6 @@ namespace ratgdo {
} else if (cmd.req == CommandType::OBSTRUCTION) {
ObstructionState obstruction_state = cmd.resp == 0 ? ObstructionState::CLEAR : ObstructionState::OBSTRUCTED;
this->ratgdo_->received(obstruction_state);
} else if (cmd.req == CommandType::TOGGLE_DOOR_RELEASE) {
if (cmd.resp == 0x31) {
this->wall_panel_starting_ = true;
}
} else if (cmd.req == CommandType::TOGGLE_LIGHT_PRESS) {
// motion was detected, or the light toggle button was pressed
// either way it's ok to trigger motion detection