diff --git a/base_secplusv1.yaml b/base_secplusv1.yaml new file mode 100644 index 0000000..1e4668b --- /dev/null +++ b/base_secplusv1.yaml @@ -0,0 +1,236 @@ +--- + +external_components: + - source: + type: git + url: https://github.com/ratgdo/esphome-ratgdo + ref: sec_plus_v1 + refresh: 1s + +preferences: + flash_write_interval: 5s + +ratgdo: + id: ${id_prefix} + input_gdo_pin: ${uart_rx_pin} + output_gdo_pin: ${uart_tx_pin} + input_obst_pin: ${input_obst_pin} + protocol: secplusv1 + on_sync_failed: + then: + - homeassistant.service: + service: persistent_notification.create + data: + title: "${friendly_name} sync failed" + message: "Failed to communicate with garage opener on startup; Check the ${friendly_name} Rolling code counter number entity history and set the entity to one number larger than the largest value in history. [ESPHome devices](/config/devices/dashboard?domain=esphome)" + notification_id: "esphome_ratgdo_${id_prefix}_sync_failed" + +sensor: + - platform: ratgdo + id: ${id_prefix}_openings + type: openings + entity_category: diagnostic + ratgdo_id: ${id_prefix} + name: "Openings" + unit_of_measurement: "openings" + icon: mdi:open-in-app + +lock: + - platform: ratgdo + id: ${id_prefix}_lock_remotes + ratgdo_id: ${id_prefix} + name: "Lock remotes" + +switch: + - platform: gpio + id: "${id_prefix}_status_door" + internal: true + pin: + number: ${status_door_pin} # D0 output door status, HIGH for open, LOW for closed + mode: + output: true + name: "Status door" + entity_category: diagnostic + - platform: gpio + id: "${id_prefix}_status_obstruction" + internal: true + pin: + number: ${status_obstruction_pin} # D8 output for obstruction status, HIGH for obstructed, LOW for clear + mode: + output: true + name: "Status obstruction" + entity_category: diagnostic + +binary_sensor: + - platform: ratgdo + type: motion + id: ${id_prefix}_motion + ratgdo_id: ${id_prefix} + name: "Motion" + device_class: motion + - platform: ratgdo + type: obstruction + id: ${id_prefix}_obstruction + ratgdo_id: ${id_prefix} + name: "Obstruction" + device_class: problem + on_press: + - switch.turn_on: ${id_prefix}_status_obstruction + on_release: + - switch.turn_off: ${id_prefix}_status_obstruction + - platform: ratgdo + type: button + id: ${id_prefix}_button + ratgdo_id: ${id_prefix} + name: "Button" + entity_category: diagnostic + - platform: ratgdo + type: motor + id: ${id_prefix}_motor + ratgdo_id: ${id_prefix} + name: "Motor" + device_class: running + entity_category: diagnostic + - platform: gpio + id: "${id_prefix}_dry_contact_open" + pin: + number: ${dry_contact_open_pin} # D5 dry contact for opening door + inverted: true + mode: + input: true + pullup: true + name: "Dry contact open" + entity_category: diagnostic + filters: + - delayed_on_off: 500ms + on_press: + - if: + condition: + binary_sensor.is_off: ${id_prefix}_dry_contact_close + then: + - cover.open: ${id_prefix}_garage_door + - platform: gpio + id: "${id_prefix}_dry_contact_close" + pin: + number: ${dry_contact_close_pin} # D6 dry contact for closing door + inverted: true + mode: + input: true + pullup: true + name: "Dry contact close" + entity_category: diagnostic + filters: + - delayed_on_off: 500ms + on_press: + - if: + condition: + binary_sensor.is_off: ${id_prefix}_dry_contact_open + then: + - cover.close: ${id_prefix}_garage_door + - platform: gpio + id: "${id_prefix}_dry_contact_light" + pin: + number: ${dry_contact_light_pin} # D3 dry contact for triggering light (no discrete light commands, so toggle only) + inverted: true + mode: + input: true + pullup: true + name: "Dry contact light" + entity_category: diagnostic + filters: + - delayed_on_off: 500ms + on_press: + - light.toggle: ${id_prefix}_light + +number: + - platform: ratgdo + id: ${id_prefix}_rolling_code_counter + type: rolling_code_counter + entity_category: config + ratgdo_id: ${id_prefix} + name: "Rolling code counter" + mode: box + unit_of_measurement: "codes" + + - platform: ratgdo + id: ${id_prefix}_opening_duration + type: opening_duration + entity_category: config + ratgdo_id: ${id_prefix} + name: "Opening duration" + unit_of_measurement: "s" + + - platform: ratgdo + id: ${id_prefix}_closing_duration + type: closing_duration + entity_category: config + ratgdo_id: ${id_prefix} + name: "Closing duration" + unit_of_measurement: "s" + + - platform: ratgdo + id: ${id_prefix}_client_id + type: client_id + entity_category: config + ratgdo_id: ${id_prefix} + name: "Client ID" + mode: box + +cover: + - platform: ratgdo + id: ${id_prefix}_garage_door + device_class: garage + name: "Door" + ratgdo_id: ${id_prefix} + on_closed: + - switch.turn_off: ${id_prefix}_status_door + on_open: + - switch.turn_on: ${id_prefix}_status_door + +light: + - platform: ratgdo + id: ${id_prefix}_light + name: "Light" + ratgdo_id: ${id_prefix} + +button: + - platform: restart + name: "Restart" + - platform: safe_mode + name: "Safe mode boot" + entity_category: diagnostic + + - platform: template + id: ${id_prefix}_query_status + entity_category: diagnostic + name: "Query status" + on_press: + then: + lambda: !lambda |- + id($id_prefix).query_status(); + + - platform: template + id: ${id_prefix}_query_openings + name: "Query openings" + entity_category: diagnostic + on_press: + then: + lambda: !lambda |- + id($id_prefix).query_openings(); + + - platform: template + id: ${id_prefix}_sync + name: "Sync" + entity_category: diagnostic + on_press: + then: + lambda: !lambda |- + id($id_prefix).sync(); + + - platform: template + id: ${id_prefix}_toggle_door + name: "Toggle door" + on_press: + then: + lambda: !lambda |- + id($id_prefix).toggle_door(); diff --git a/static/v25iboard_secplusv1.yaml b/static/v25iboard_secplusv1.yaml index db1c11c..10608cc 100644 --- a/static/v25iboard_secplusv1.yaml +++ b/static/v25iboard_secplusv1.yaml @@ -26,13 +26,14 @@ esp8266: restore_from_flash: true dashboard_import: - package_import_url: github://ratgdo/esphome-ratgdo/v25iboard.yaml@main + package_import_url: github://ratgdo/esphome-ratgdo/v25iboard_secplusv1.yaml@main packages: remote_package: url: https://github.com/ratgdo/esphome-ratgdo - files: [base.yaml] + files: [base_secplusv1.yaml] refresh: 1s + ref: sec_plus_v1 # Sync time with Home Assistant. time: