Notification Alexa en mode présence

Salut tout le monde, suite à la domotisation de ma boite aux lettres et l’utilisation d’un input boolean pour avoir un badge et une notification, je cherche à utiliser Alexa pour dire quand j’ai reçu du courrier. Je voudrais que cela se réalise seulement lorsque moi ou ma compagne sommed à la maison. Certains l’auraient fait chez eux? Si oui, comment avez vous fait ?

Merci :wink:

j’ai une automatisation qui gère le courrier et les paquets avec remise à zéro lorsque j’ai ouvert la boite aux lettres et la porte d’entrée dans les 3 minutes
Ce n’est pas de moi, je l’ai adapté à mes besoins mais je n’ai pas noté où je l’ai récupéré.
ensuite lorsque quelqu’un rentre à la maison, j’ai un script pour dire bonjour, qui, si le courrier ou paquet est présent l’indique au nouvel arrivant.
le package boite aux lettres

---
#
input_boolean: 
### Input boolean courrier boite aux lettres ###
  boite_aux_lettres:
    name: Boîte aux Lettres
    icon: mdi:mailbox-outline
  courier_bal:
    name: Courrier BAL
    icon: mdi:email-outline
  colis_bal:
    name: Colis BAL
    icon: mdi:package-variant-closed
    
sensor:
  - platform: template
    sensors:
      # Quoi dans la boite aux lettres pour le widget courrier colis
      boite_aux_lettres_quoi:
        friendly_name: "Quoi dans la boîte aux lettres"
        value_template: >-
          {% if is_state('input_boolean.boite_aux_lettres', 'on') and is_state('input_boolean.courier_bal', 'on') and is_state('input_boolean.colis_bal', 'off') %}
            courrier
          {% elif is_state('input_boolean.boite_aux_lettres', 'on') and is_state('input_boolean.courier_bal', 'off') and is_state('input_boolean.colis_bal', 'on') %}
            colis
          {% elif is_state('input_boolean.boite_aux_lettres', 'on') and is_state('input_boolean.courier_bal', 'on') and is_state('input_boolean.colis_bal', 'on') %}
            colis_courrier
          {% else %}
            rien
          {% endif %}

automation:
  - alias: '[Boîte aux lettres] Courrier reçu'
    trigger:
    - entity_id: switch.courrier
      from: 'off'
      platform: state
      to: 'on'
    condition:
    - condition: state
      entity_id: input_boolean.courier_bal
      state: 'off'
    action:

    - data:
        entity_id: input_boolean.courier_bal
      service: input_boolean.turn_on

    - data:
        entity_id: input_boolean.boite_aux_lettres
      service: input_boolean.turn_on

    - data:
        message: 'Le facteur vient de déposer du courrier'
      service: notify.home

    - data:
        message: 'Le facteur vient de déposer du courrier'
      service: notify.echo_cuisine

    - data:
        message: 'Le facteur vient de déposer du courrier'
      service: notify.echo_bureau

    - data:
        message: 'Le facteur vient de déposer du courrier'
      service: notify.echo_salon     

    - data:
        message: 'Le facteur vient de déposer du courrier'
      service: notify.ios

    - service: persistent_notification.create
      data:
        title: "courrier reçu"
        message: >-
            Le facteur a déposé du courrier à  
            {{ as_timestamp(now()) | timestamp_custom(" %H:%M",True) }}
        notification_id: 'courrier reçu'

  - alias: '[Boîte aux lettres] Colis reçu'
    trigger:
    - entity_id: switch.paquet
      from: 'off'
      platform: state
      to: 'on'
    condition: []
    action:
    - delay:
        seconds: 120
    - service_template: >-
        {% set mailbox_last_changed = as_timestamp(states.switch.paquet.last_changed) %}
        {% set front_door_last_changed = as_timestamp(states.binary_sensor.porte_entree.last_changed) %}
        {% if (mailbox_last_changed - front_door_last_changed)|abs < 180 %}
          script.boite_aux_lettres_releve_courrier
        {% else %}
          script.boite_aux_lettres_colis_recu
        {% endif %}


  - alias: '[Boîte aux lettres] RAZ'
    trigger:
    - at: 00:01
      platform: time
    condition: []
    action:
    - data:
        entity_id: input_boolean.boite_aux_lettres
      service: input_boolean.turn_off
    - data:
        entity_id: input_boolean.colis_bal
      service: input_boolean.turn_off
    - data:
        entity_id: input_boolean.courier_bal
      service: input_boolean.turn_off
      
##################################################################################
##################################################################################
script:
##################################################################################
  boite_aux_lettres_releve_courrier:
    sequence:
      - service: input_boolean.turn_off
        entity_id: input_boolean.boite_aux_lettres
      - service: input_boolean.turn_off
        entity_id: input_boolean.colis_bal
      - service: input_boolean.turn_off
        entity_id: input_boolean.courier_bal
      - service: notify.home
        data:
          message: "le courrier vient d'être relevé"
      - service: notify.echo_cuisine
        data:
          message: "le courrier vient d'être relevé"
 
      - service: notify.echo_bureau
        data:
          message: "le courrier vient d'être relevé"
 
      - service: notify.echo_salon
        data:
          message: "le courrier vient d'être relevé"
##################################################################################
  boite_aux_lettres_colis_recu:
    sequence:

      - service: notify.home
        data:
          message: "le facteur vient de déposer un paquet"

      - service: notify.echo_cuisine
        data:
          message: "le facteur vient de déposer un paquet"
          
      - service: notify.echo_bureau
        data:
          message: "le facteur vient de déposer un paquet"
          
      - service: notify.echo_salon
        data:
          message: "le facteur vient de déposer un paquet" 

      - service: notify.ios
        data:
          message: "le facteur vient de déposer un paquet"

      - service: persistent_notification.create
        data:
          title: "paquet reçu"
          message: >-
              Le facteur a déposé un paquet à 
              {{ as_timestamp(now()) | timestamp_custom(" %H:%M",True) }}
          notification_id: 'paquet reçu'

le package notification bonjour

# # https://community.home-assistant.io/t/how-to-create-multiple-phrases-to-send-at-random-to-tts/19807/28
automation:
  - id: dire_bonjour
    alias: Dire Bonjour
    trigger:
      platform: state
      entity_id:
        - device_tracker.presence_1
        - device_tracker.presence_2
        - device_tracker.presence_3

        
      from: 'not_home'
      to: 'home'
      for: '00:01:45'
      
    condition:
      condition: and # toutes les conditions doivent être vraies "TRUE" avant que l'action ne soit exécutée.
      conditions:
      - condition:
         time
        after: '08:00:00'
        before: '22:00:00'
      - condition: template # redeclenchement seulement si le dernier changement est > duration_minutes
      # # ## https://community.home-assistant.io/t/sensor-trigger-last-changed/59065
        value_template: > 
          {% set duration_minutes = 30 %}{# défini le délai sans nouvelle notification #}
          {% set last_changed_seconds = (trigger.from_state.last_changed | as_timestamp(default=0)) | int %}{# Récupération de l'heure du dernier changement d'état au format timestamp #}
          {% set current_time_seconds = (now() | as_timestamp(default=0)) | int %} {# maintenant au format timestamp #}
          {{ last_changed_seconds + duration_minutes * 60 < current_time_seconds }} 
    action:
      - wait_template: "{{ is_state('script.dis_bonjour', 'off') }}"
      - service: script.dis_bonjour
        data:
          courtesy_formula: >
            {% if now().strftime('%T') < '17:30:00' %}
            {{[
                "Bonjour ",
                "Bienvenue ",
              ] | random }}
            {% else %}
            {{[
                "Bonsoir ",
                "Bonne soirée ",
              ] | random }}
            {% endif %}
          person: >
            {{ trigger.to_state.name }}
            {%- for s in states.device_tracker
                  |rejectattr('entity_id', 'in', ['device_tracker.presence_pascal', 'device_tracker.applewatchpascal'])
                  |rejectattr('entity_id','eq',trigger.entity_id)
                  |selectattr('state','eq','home')
                  if ('presence_' in s.entity_id or 'applewatch' in s.entity_id or 'all_' in s.entity_id)
                  and (now() - s.last_changed).total_seconds() < 105 -%}
              {{ (' et ' if loop.last else ', ') ~ s.name }}
            {%- endfor %}
          message: >
            {% if states('sensor.87_weather_alert') == 'Jaune' or states('sensor.87_weather_alert') == 'Orange' or states('sensor.87_weather_alert') == 'Rouge' %}
                "PERSON ! aujourd'hui nous sommes en alerte météo 
                {%- for attr in ['Vent violent', 'Pluie-inondation', 'Orages', 'Inondation', 'Neige-verglas',
                'Canicule', 'Grand-froid', 'Avalanches', 'Vagues-submersion'] -%}
                {%- if state_attr('sensor.87_weather_alert', attr) != 'Vert' and state_attr('sensor.87_weather_alert', attr) != None %}
                - {{state_attr('sensor.87_weather_alert', attr)}},{{attr}}, 
                {%- endif -%}
                {% endfor -%}"
            {% elif (now().strftime('%T') > '15:00:00') and (now().strftime('%T') < '17:30:00') and (states('sensor.temperature_jacuzzi') | float | round() > 30) %}
            {{ [
                "PERSON ! la température du jacuzzi est de {{states('sensor.temperature_jacuzzi') | round()}} degrés",
                "PERSON ! Une petite baignade? la température du jacuzzi est de {{states('sensor.temperature_jacuzzi') | round()}} degrés",
                "PERSON ! Est-ce que {{states('sensor.température_jacuzzi') | round()}} degrés est une température d'eau acceptable pour aller dans le jacuzzi?",
                "PERSON ! Est-ce que {{states('sensor.température_jacuzzi') | round()}} degrés est une température d'eau acceptable pour se rafraichir dans le jacuzzi?",
                "PERSON ! Perception du maillot de bain, la température du jacuzzi est de {{states('sensor.temperature_jacuzzi') | round()}} degrés",
            ] | random }}
            {% elif is_state('sensor.boite_aux_lettres_quoi', 'courrier') or is_state('sensor.boite_aux_lettres_quoi', 'colis') or is_state('sensor.boite_aux_lettres_quoi', 'colis_courrier')%}
              "PERSON !  il y a des {{states('sensor.boite_aux_lettres_quoi')}} dans la boites aux lettres"
            {% else %}
            {{ [
                "PERSON ! Fait comme chez toi",
                "PERSON ! la vie est plus belle quand tu es là",
                "PERSON ! Mazette, je me demande combien de personnes nous pourrons encore loger dans cette petite maison?",
                "PERSON ! Bienvenue chez toi",
                "PERSON ! Heureux de te revoir",
                "PERSON ! Que la force soit avec toi",
                "PERSON ! Il est bon de te voir rentrer",
                "PERSON ! Vraiment heureux de te savoir à la maison",
                "PERSON ! Super, tu es rentré",
                "PERSON ! Super, tu es enfin rentré",
                "PERSON ! Enfin rentré",
                "PERSON ! Enfin. Nous avons failli attendre.",
                "PERSON ! Enfin à la maison.",
                "PERSON ! Enfin de retour",
                "PERSON ! Ravie que tu sois de retour",
                "PERSON ! Cool, tu es déjà de retour",
                "PERSON ! Chouette, tu est de retour",
                "PERSON ! Tu nous as manqué.",
                "PERSON ! Sourie, même sans raison, juste pour donner l'exemple.",
                "PERSON ! C'est à cette heure ci que tu rentres?",
               ] | random }}
            {% endif %}
1 « J'aime »

Salut,

Juste par curiosité, tu passes par quelle intégration pour notifier directement sur une enceinte echo?
J’utilise Alexa Media Player, mais on ne peux pas appeler le service comme ça, il faut ajouter d’autres valeurs dans data pour que ça marche.

J’ai essaye de faire comme dans un tuto trouvé sur internet via Alexa Media Player mais cela ne fonctionne pas sur mon Echo.

J’ai rajouté cela à mon automatisation :

Salut,

Le « type » n’est pas au même niveau que « message ».
Essayes ça :

message: ton message
data: 
  type: tts

J’obtiens une erreur lors de la sauvegarde : Message malformed: extra keys not allowed @ data[‹ action ›][3][‹ message ›]

Dans outils de dev je met ça et ça marche:

service: notify.alexa_media_echo_du_salon
data:
  message: bonjour
  data:
    type: tts
1 « J'aime »

Nikel ça fonctionne merci :wink:

j’ai créé des notify pour les appeler plus simplement

notify:
#################################
## Notify alexa devices         #
#################################
  - platform: alexa_media
    name: alexa_media

  - platform: group  # https://www.home-assistant.io/integrations/notify.group/
    name: echo_cuisine
    services:
      - service: alexa_media_echo_dot_cuisine
        data:
          data:
            type: announce

  - platform: group  # https://www.home-assistant.io/integrations/notify.group/
    name: echo_salon
    services:
      - service: alexa_media_echo_dot_salon
        data:
          data:
            type: announce

  - platform: group  # https://www.home-assistant.io/integrations/notify.group/
    name: echo_douche
    services:
      - service: alexa_media_echo_dot_douche
        data:
          data:
            type: announce

  - platform: group  # https://www.home-assistant.io/integrations/notify.group/
    name: echo_bureau
    services:
      - service: alexa_media_echo_dot_bureau
        data:
          data:
            type: announce
2 « J'aime »

C’est génial, je n’avais jamais vu cette possibilité, c’est clair que ça facilite les appels aux notifs.
On en apprend tous les jours :rofl: