Para os portões (entrada & garagem) não uso ‘automatismo’. Apenas um comando de voz [Google Assistant]; ex: “Open the front gate.”, que abre em sequência um e outro.
Dá para partilhar com familiares; criando tal comando para “Household”.
Mas uso o HA para abrir a porta, da entrada (Nuki), de casa (andava cansado de largar sacos no chão para ter de abrir a porta); e para fechar a garagem quando já estou em casa.
A melhor forma que consegui descortinar, por exemplo para a porta da entrada, é a utilização de ping para o tlm e um sensor ultrassónico (HC-SR04) para a distância do carro (<1.5m: car at home / >1.5m: car away) como Trigger, e vários templates como condição:
condition:
- condition: state
entity_id: binary_sensor.garage #sensor do portão da garagem - aberto
state: "on"
- condition: template
value_template: >-
{{(as_timestamp(now()))-(as_timestamp(states.binary_sensor.garage.last_changed))
< 900}} #sensor_garagem alterou state há 900sec
- condition: template
value_template: >-
{{(as_timestamp(now()))-(as_timestamp(states.person.mar.last_changed)) <
900}} #sensor_localização alterou state há 900sec
enabled: true
- condition: template
value_template: >-
{{(as_timestamp(now()))-(as_timestamp(states.device_tracker.mar_phone_ping.last_changed))
< 900}} #sensor_ping_tlm alterou state há 900sec
- condition: state
entity_id: binary_sensor.car_status
state: "on" #sensor_carro está on
Até há data nunca falhou.
Quanto ao fechar o portão da garagem, utilizo Espresense. O truque aí, e para a garagem não se fechar quando alguém ainda lá pode estar, ou ainda precisar de lá ir, é pôr um ESP32 ou M5Atom (é o que estou a usar), como base station, que apenas detete o dispositivo (tlm, no meu caso) a uma curta distância (0.30-0.40m) num sitio específico (ex: mesa de cabeceira, mesa do escritório, etc.). Dessa forma também não há triggers desnecessários.
Talvez isso te dê algumas ideias.