--- external_components: - source: type: git url: https://github.com/ratgdo/esphome-ratgdo 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} 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 switch: - platform: ratgdo id: ${id_prefix}_lock_remotes type: lock entity_category: config ratgdo_id: ${id_prefix} name: "Lock remotes" - 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();