Portail qui s'ouvre et se referme seul

L’idée est d’ouvrir le portail automatiquement lorsque l’on rentre à la maison grâce à l’intégration Proximity, de détecter que la personne est arrivée grâce à Frigate et au statut de la personne, puis de refermer le portail.

Problèmes :
La couverture réseau est mauvaise chez moi, plus de connexion du smartphone sur le dernier kilomètre environ.
Mon portail est vieux, certains des ordres sur je lui envoie sont perdus.

Donc :
j’ouvre le portail à 1500m.
5 sec après je vérifie qu’il consomme du courant, si c’est le cas je renvoie l’ordre, jusqu’à ce qu’il se soit en mouvement.
Je le bloque quand il est ouvert (au bout de 25s).
5 sec après, je vérifie que le portail ne consomme plus de courant. Si c’est le cas je renvoie l’ordre, jusqu’à ce qu’il se soit arrêté.
Ensuite j’attends que Frigate détecte une car occupancy sur une caméra,
puis confirme ensuite que la personne en question est bien ‹ home ›.
Alors je referme le portail.
A la fin je vérifie qu’il est bien fermé.
Je renvoie l’ordre d’éteindre le commutateur (cela n’engendre pas d’action mais évite qu’il ne reste faussement en statut activé).

Au moment ou le portail s’ouvre, je joue une petite musique pour prévenir à la maison que les chiennes ne sortent pas, s’il y a une alarme je l’enlève, ainsi que la simulation de présence etc.

C’est encore en test, je ferai des mises à jour si nécessaire.

alias: Arrivée distance
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.maison_distance_agnes
    below: 1500
    id: Distance Agnès
  - platform: numeric_state
    entity_id:
      - sensor.maison_distance_raphael
    below: 1500
    id: Distance Raphaël
condition:
  - condition: state
    state: "off"
    entity_id: input_boolean.portail_manuel
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Distance Agnès
          - condition: state
            entity_id: person.agnes
            state: not_home
        sequence:
          - repeat:
              sequence:
                - service: switch.turn_on
                  target:
                    entity_id: switch.ouverture_portail_trigger
                  data: {}
                - delay:
                    hours: 0
                    minutes: 0
                    seconds: 5
                    milliseconds: 0
              until:
                - condition: numeric_state
                  entity_id: sensor.compteur_portail_power
                  above: 15
          - if:
              - condition: time
                after: "11:00:00"
                before: "23:00:00"
            then:
              - service: automation.trigger
                target:
                  entity_id: automation.sonnerie_maison_4_low
                data:
                  skip_condition: true
              - delay:
                  hours: 0
                  minutes: 0
                  seconds: 3
                  milliseconds: 0
              - service: switch.turn_on
                metadata: {}
                data: {}
                target:
                  entity_id: switch.sonneries_maison
              - delay:
                  hours: 0
                  minutes: 0
                  seconds: 8
                  milliseconds: 0
              - service: switch.turn_off
                target:
                  entity_id:
                    - switch.sonneries_maison
                data: {}
              - service: automation.trigger
                data:
                  skip_condition: true
                target:
                  entity_id: automation.sonneries_maison_11_high
            else:
              - delay:
                  hours: 0
                  minutes: 0
                  seconds: 11
                  milliseconds: 0
          - service: switch.turn_off
            target:
              entity_id: switch.presence_simulation
            data: {}
          - service: input_boolean.turn_off
            data: {}
            target:
              entity_id: input_boolean.alarme_maison
          - service: cover.open_cover
            data: {}
            target:
              entity_id: cover.volet_entree_nord
          - wait_for_trigger:
              - platform: state
                entity_id:
                  - binary_sensor.ouverture_portail_garage_door_contact
                to: "on"
          - delay:
              hours: 0
              minutes: 0
              seconds: 9
              milliseconds: 0
          - repeat:
              sequence:
                - service: switch.turn_off
                  target:
                    entity_id:
                      - switch.ouverture_portail_trigger
                  data: {}
                - delay:
                    hours: 0
                    minutes: 0
                    seconds: 5
                    milliseconds: 0
              until:
                - condition: numeric_state
                  entity_id: sensor.compteur_portail_power
                  below: 15
          - wait_for_trigger:
              - platform: state
                entity_id:
                  - binary_sensor.entree_nord_car_occupancy
                  - binary_sensor.entree_nord_serre_car_occupancy
                  - binary_sensor.parking_car_occupancy
                  - binary_sensor.parking_serre_car_occupancy
                  - binary_sensor.portails_car_occupancy
                to: "on"
                from: "off"
            timeout:
              hours: 0
              minutes: 5
              seconds: 0
              milliseconds: 0
          - wait_template: "{{ states('person.agnes') == \"home\" }}"
            continue_on_timeout: true
            timeout: "05:00"
          - if:
              - condition: state
                entity_id: binary_sensor.ouverture_portail_garage_door_contact
                state: "off"
                for:
                  hours: 0
                  minutes: 0
                  seconds: 20
            then:
              - stop: Le portail a été fermé autrement
          - service: switch.turn_on
            target:
              entity_id: switch.ouverture_portail_trigger
            data: {}
          - wait_for_trigger:
              - platform: state
                entity_id:
                  - binary_sensor.ouverture_portail_garage_door_contact
                to: "off"
                for:
                  hours: 0
                  minutes: 0
                  seconds: 20
            timeout:
              hours: 0
              minutes: 1
              seconds: 30
              milliseconds: 0
          - if:
              - condition: state
                entity_id: binary_sensor.ouverture_portail_garage_door_contact
                state: "off"
                for:
                  hours: 0
                  minutes: 0
                  seconds: 20
            then: []
            else:
              - repeat:
                  sequence:
                    - service: switch.turn_off
                      target:
                        entity_id:
                          - switch.ouverture_portail_trigger
                        device_id: []
                        area_id: []
                      data: {}
                    - delay:
                        hours: 0
                        minutes: 0
                        seconds: 5
                        milliseconds: 0
                    - service: switch.turn_on
                      target:
                        entity_id: switch.ouverture_portail_trigger
                      data: {}
                    - delay:
                        hours: 0
                        minutes: 1
                        seconds: 30
                        milliseconds: 0
                  until:
                    - condition: state
                      entity_id: binary_sensor.ouverture_portail_garage_door_contact
                      state: "off"
                      for:
                        hours: 0
                        minutes: 0
                        seconds: 20
          - service: switch.turn_off
            target:
              entity_id:
                - switch.ouverture_portail_trigger
              device_id: []
              area_id: []
            data: {}
      - conditions:
          - condition: trigger
            id:
              - Distance Raphaël
          - condition: state
            entity_id: person.raphael
            state: not_home
        sequence:
          - repeat:
              sequence:
                - service: switch.turn_on
                  target:
                    entity_id: switch.ouverture_portail_trigger
                  data: {}
                - delay:
                    hours: 0
                    minutes: 0
                    seconds: 5
                    milliseconds: 0
              until:
                - condition: numeric_state
                  entity_id: sensor.compteur_portail_power
                  above: 15
          - if:
              - condition: time
                after: "11:00:00"
                before: "23:00:00"
            then:
              - service: automation.trigger
                target:
                  entity_id: automation.sonnerie_maison_4_low
                data:
                  skip_condition: true
              - delay:
                  hours: 0
                  minutes: 0
                  seconds: 3
                  milliseconds: 0
              - service: switch.turn_on
                metadata: {}
                data: {}
                target:
                  entity_id: switch.sonneries_maison
              - delay:
                  hours: 0
                  minutes: 0
                  seconds: 8
                  milliseconds: 0
              - service: switch.turn_off
                target:
                  entity_id:
                    - switch.sonneries_maison
                data: {}
              - service: automation.trigger
                data:
                  skip_condition: true
                target:
                  entity_id: automation.sonneries_maison_11_high
            else:
              - delay:
                  hours: 0
                  minutes: 0
                  seconds: 11
                  milliseconds: 0
          - service: switch.turn_off
            target:
              entity_id: switch.presence_simulation
            data: {}
          - service: input_boolean.turn_off
            data: {}
            target:
              entity_id: input_boolean.alarme_maison
          - service: cover.open_cover
            data: {}
            target:
              entity_id: cover.volet_entree_nord
          - wait_for_trigger:
              - platform: state
                entity_id:
                  - binary_sensor.ouverture_portail_garage_door_contact
                to: "on"
          - delay:
              hours: 0
              minutes: 0
              seconds: 9
              milliseconds: 0
          - repeat:
              sequence:
                - service: switch.turn_off
                  target:
                    entity_id:
                      - switch.ouverture_portail_trigger
                  data: {}
                - delay:
                    hours: 0
                    minutes: 0
                    seconds: 5
                    milliseconds: 0
              until:
                - condition: numeric_state
                  entity_id: sensor.compteur_portail_power
                  below: 15
          - wait_for_trigger:
              - platform: state
                entity_id:
                  - binary_sensor.entree_nord_car_occupancy
                  - binary_sensor.entree_nord_serre_car_occupancy
                  - binary_sensor.parking_car_occupancy
                  - binary_sensor.parking_serre_car_occupancy
                  - binary_sensor.portails_car_occupancy
                to: "on"
                from: "off"
            timeout:
              hours: 0
              minutes: 5
              seconds: 0
              milliseconds: 0
          - wait_template: "{{ states('person.agnes') == \"home\" }}"
            continue_on_timeout: true
            timeout: "05:00"
          - if:
              - condition: state
                entity_id: binary_sensor.ouverture_portail_garage_door_contact
                state: "off"
                for:
                  hours: 0
                  minutes: 0
                  seconds: 20
            then:
              - stop: Le portail a été fermé autrement
          - service: switch.turn_on
            target:
              entity_id: switch.ouverture_portail_trigger
            data: {}
          - wait_for_trigger:
              - platform: state
                entity_id:
                  - binary_sensor.ouverture_portail_garage_door_contact
                to: "off"
                for:
                  hours: 0
                  minutes: 0
                  seconds: 20
            timeout:
              hours: 0
              minutes: 1
              seconds: 30
              milliseconds: 0
          - if:
              - condition: state
                entity_id: binary_sensor.ouverture_portail_garage_door_contact
                state: "off"
                for:
                  hours: 0
                  minutes: 0
                  seconds: 20
            then: []
            else:
              - repeat:
                  sequence:
                    - service: switch.turn_off
                      target:
                        entity_id:
                          - switch.ouverture_portail_trigger
                        device_id: []
                        area_id: []
                      data: {}
                    - delay:
                        hours: 0
                        minutes: 0
                        seconds: 5
                        milliseconds: 0
                    - service: switch.turn_on
                      target:
                        entity_id: switch.ouverture_portail_trigger
                      data: {}
                    - delay:
                        hours: 0
                        minutes: 1
                        seconds: 30
                        milliseconds: 0
                  until:
                    - condition: state
                      entity_id: binary_sensor.ouverture_portail_garage_door_contact
                      state: "off"
                      for:
                        hours: 0
                        minutes: 0
                        seconds: 20
          - service: switch.turn_off
            target:
              entity_id:
                - switch.ouverture_portail_trigger
              device_id: []
              area_id: []
            data: {}
mode: single