devices.esphome.io
Gelidus Research Garage Door Opener 1 (GRGDO1)
Gelidus Research Garage Door Opener 1 (GRGDO1)
Device Type: miscBoard: esp32
GRGDO1 Device Info
Availble from https://www.gelidus.ca/
Inside the enclosure.
- 60 x 60 mm PCB
- 4 Pin ESP programming header (3.3v)
- Powerful ESP32S Dual Core 240Mhz 4MB Flash, BLE and WiFi module!
- PCB layout strictly follows ESP antenna specifications providing excellent WiFi range
- 8 Pin Quick connect
- Flash enable button (power cycle based)
- Powered directly with US AC plug receptacle blades (120 VAC)
- AU/NZ Type 1 220VAC also available
- US AC receptacle passthrough plug (120 VAC)
- Follows UL/CSA specifications.
- 1 Meter of 3 conductor 22 AWG bell wire
- 3D printed protective safety enclosure.
Firmware Options
Two firmware options are available for the GRGDO1:
- RATGDO GitHub Repository
- Secplus GDO GitHub Repository
GRGDO1 Secplus GDO YAML Example
external_components: - source: github://gelidusresearch/esphome-secplus-gdo components: [secplus_gdo] refresh: 0s
substitutions: id_prefix: grgdo1 friendly_name: "GDO" uart_tx_pin: GPIO22 # J4 Pin 1 or 3 Red CTRL uart_rx_pin: GPIO21 # J4 Pin 1 or 3 Red CTRL dry_contact_open_pin: GPIO18 # J4 Pin 6 Green dry_contact_close_pin: GPIO19 # J4 Pin 7 Blue dry_contact_light_pin: GPIO17 # J4 Pin 8 Orange garage_door_cover_name: Garage Door garage_light_name: Garage Light garage_openings_name: Garage Openings garage_lock_name: Lock garage_motion_name: Motion garage_obstruction_name: Obstruction garage_motor_name: Motor garage_button_name: Wall Button garage_sync_name: Synced
esp32: board: esp32dev framework: type: esp-idf version: recommended
esphome: name: gdo1 friendly_name: gdo1 comment: "ESP32: Garage Door Opener" libraries: - https://github.com/gelidusresearch/gdolib platformio_options: build_flags: - -Wl,--wrap=esp_panic_handler - -DUART_SCLK_DEFAULT=UART_SCLK_APB
wifi: on_connect: lambda: id(grgdo).start_gdo(); ssid: !secret wifi_ssid password: !secret wifi_password
ap: ssid: "gdo1" password: "" ap_timeout: 10s
captive_portal:
logger:
api: encryption: key: "YOUR API KEY GOES HERE"
ota: platform: esphome
web_server: include_internal: true
status_led: pin: GPIO4
secplus_gdo: id: grgdo input_gdo_pin: ${uart_rx_pin} output_gdo_pin: ${uart_tx_pin}
light: - platform: secplus_gdo name: Garage Door Light secplus_gdo_id: grgdo id: gdo_light
cover: - platform: secplus_gdo name: Garage Door secplus_gdo_id: grgdo id: gdo_door
text_sensor: - platform: version name: ESPHome Version hide_timestamp: true
sensor: - platform: secplus_gdo secplus_gdo_id: grgdo id: gdo_openings type: openings name: "Garage Door Openings" unit_of_measurement: "openings" icon: mdi:open-in-app # - platform: dht # model: DHT22 # pin: GPIO3 # temperature: # name: "Temperature" # accuracy_decimals: 1 # humidity: # name: "Humidity" # accuracy_decimals: 1 # update_interval: 60s
lock: - platform: secplus_gdo id: gdo_lock_remotes secplus_gdo_id: grgdo name: "Lock remotes"
binary_sensor: - platform: secplus_gdo name: "Garage Motion Sensor" id: gdo_motion secplus_gdo_id: grgdo device_class: motion type: motion - platform: secplus_gdo name: "Garage Door Obstruction Sensor" id: gdo_obst secplus_gdo_id: grgdo device_class: problem type: obstruction - platform: secplus_gdo name: "Garage Door Motor" id: gdo_motor secplus_gdo_id: grgdo device_class: running type: motor - platform: secplus_gdo name: "Garage Button" id: gdo_button secplus_gdo_id: grgdo entity_category: diagnostic type: button - platform: secplus_gdo name: $garage_sync_name id: gdo_synced secplus_gdo_id: grgdo type: sync device_class: connectivity
- platform: gpio id: "${id_prefix}_dry_contact_open" pin: number: ${dry_contact_open_pin} # dry contact for opening door inverted: true mode: input: true pullup: true name: "Dry contact open" entity_category: diagnostic on_press: - if: condition: binary_sensor.is_off: ${id_prefix}_dry_contact_close then: - cover.open: gdo_door - platform: gpio id: "${id_prefix}_dry_contact_close" pin: number: ${dry_contact_close_pin} # dry contact for closing door inverted: true mode: input: true pullup: true name: "Dry contact close" entity_category: diagnostic on_press: - if: condition: binary_sensor.is_off: ${id_prefix}_dry_contact_open then: - cover.close: gdo_door - platform: gpio id: "${id_prefix}_dry_contact_light" pin: number: ${dry_contact_light_pin} # dry contact for triggering light inverted: true mode: input: true pullup: true name: "Dry contact light" entity_category: diagnostic on_press: then: - light.toggle: gdo_light disabled_by_default: false
switch: - platform: secplus_gdo id: gdo_learn type: learn secplus_gdo_id: grgdo name: Learn icon: mdi:plus-box entity_category: config
- platform: secplus_gdo id: gdo_toggle_only type: toggle_only secplus_gdo_id: grgdo name: Toggle Only icon: mdi:plus-box
select: - platform: secplus_gdo id: gdo_protocol secplus_gdo_id: grgdo name: protocol icon: mdi:settings entity_category: config
number: - platform: secplus_gdo name: Opening duration secplus_gdo_id: grgdo entity_category: config id: gdo_open_duration type: open_duration unit_of_measurement: "ms" internal: true
- platform: secplus_gdo name: Closing duration secplus_gdo_id: grgdo entity_category: config id: gdo_close_duration type: close_duration unit_of_measurement: "ms"
- platform: secplus_gdo name: Client ID secplus_gdo_id: grgdo entity_category: config id: gdo_client_id type: client_id mode: box
- platform: secplus_gdo name: Rolling Code secplus_gdo_id: grgdo entity_category: config id: gdo_rolling_code type: rolling_code mode: box
# Remidiates wall button brownouts by throttling TX activity # 350ms recommened on 880LM units - platform: secplus_gdo name: Min Command Interval secplus_gdo_id: grgdo entity_category: config id: gdo_min_command_interval type: min_command_interval mode: box unit_of_measurement: "ms"
# Add Time to Close (TTC) control, 0s = disabled - platform: secplus_gdo name: Time to Close secplus_gdo_id: grgdo entity_category: config id: gdo_time_to_close type: time_to_close mode: box unit_of_measurement: "s"
button: - platform: restart name: Restart id: restart_button entity_category: config - platform: factory_reset name: Factory Reset entity_category: config - platform: template name: Reset door timings entity_category: config on_press: - number.set: id: gdo_open_duration value: 0 - number.set: id: gdo_close_duration value: 0 - button.press: id: restart_button - platform: template name: Re-sync entity_category: config on_press: - number.increment: id: gdo_client_id - button.press: id: restart_button
RATGDO YAML Example
external_components: - source: github://descipher/esphome-ratgdo/components/ratgdo components: [ratgdo] refresh: 0s
esphome: name: grgdo1 friendly_name: grgdo1
esp32: board: esp32dev framework: type: arduino
# Enable logginglogger:
# Enable Home Assistant APIapi: encryption: key: "<your key>"
ota: # - platform: esphome # post 2024.5.x password: "<your password>"
wifi: ssid: !secret wifi_ssid password: !secret wifi_password
ap: ssid: "grgdo1" password: !secret iot_captive_password
captive_portal:
web_server:
preferences: flash_write_interval: 600s
substitutions: id_prefix: grgdo1 friendly_name: "GDO" uart_tx_pin: GPIO22 # J4 Pin 1 Red or 3 Blue to Opener Red CTRL terminal uart_rx_pin: GPIO21 # J4 Pin 1 Red or 3 Blue to Opener Red CTRL terminal input_obst_pin: GPIO23 # J4 Pin 4 Grey OBST dry_contact_open_pin: GPIO18 # J4 Pin 6 Green dry_contact_close_pin: GPIO19 # J4 Pin 7 Blue dry_contact_light_pin: GPIO17 # J4 Pin 8 Orange
ratgdo: id: ${id_prefix} input_gdo_pin: ${uart_rx_pin} output_gdo_pin: ${uart_tx_pin} input_obst_pin: ${input_obst_pin} protocol: secplusv2
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 # - platform: dht #Optional Add-on DHT22 # model: DHT22 # pin: GPIO3 # temperature: # name: "Temperature" # accuracy_decimals: 1 # humidity: # name: "Humidity" # accuracy_decimals: 1 # update_interval: 60s
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 - 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} # dry contact for opening door inverted: true mode: input: true pullup: true name: "Dry contact open" entity_category: diagnostic 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} # dry contact for closing door inverted: true mode: input: true pullup: true name: "Dry contact close" entity_category: diagnostic 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} # dry contact for triggering light inverted: true mode: input: true pullup: true name: "Dry contact light" entity_category: diagnostic 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}
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).door_toggle();
status_led: pin: GPIO4
Secplus GDO Feature Set Example
Edit this page on GitHub