My current garage control uses a Shelly 1 which is ideal for my situation. The Shelly is very compact and easily fits into the ceiling box where all the low voltage wires associated with my garage door come together.
My build was based on https://hometechhacker.com/make-your-own-smart-garage-door-opener-for-15/
and further inspired by https://www.sweharris.org/post/2019-05-19-garage/
The Shelly 1 setup was easy and it natively offers everything I need.
POWER ON DEFAULT MODE: OFF
AUTO OFF: 1 second or less
Button Type: Detached Switch (switch is separated from the relays)
Enable MQTT (I also set custom MQTT prefix: shelly1-garage)
Connect garage opener to O & I terminals (relay)
Connect door sensor to L & SW terminals (input)
Connect 12V DC L=+ N=-
Home Assistant setup files
configuration.yaml cover: - platform: mqtt name: "Garage Door" position_topic: "shellies/shelly1-garage/input/0" command_topic: "shellies/shelly1-garage/relay/0/command" availability_topic: "shellies/shelly1-garage/online" retain: false payload_open: "on" payload_close: "on" payload_stop: "on" position_open: 0 position_closed: 1 payload_available: "true" payload_not_available: "false" customize.yaml cover.garage_door: device_class: garage automations.yaml - id: mqtt_shelly_announce alias: Shelly Sync at HA Start trigger: - platform: homeassistant event: start action: - delay: 00:00:20 - service: mqtt.publish data: topic: shellies/command payload: announce - id: garage_door_warn alias: Notify app when garage door left open trigger: - entity_id: cover.garage_door for: 0:30:00 from: closed platform: state to: open action: service: notify.mobile_app_moto_x4 data: message: The garage has been left open data: actions: - action: close_garage title: Close Garage Door - id: shut_garage_door alias: Close the garage when notification action is tapped trigger: - event_data: action: close_garage event_type: mobile_app_notification_action platform: event action: - entity_id: cover.garage_door service: cover.close_cover