AVSMN : Assist Very Small Message Notification + Public Adress

Hello les voice-assist addicts.

Pas un méga tuto mais juste un petit proof of concept qui attend de nombreuses améliorations ou détournements.

Assist-User depuis la première heure , disposant de plusieurs satellites, notre assistant « offline » est utilisé quotidiennement pour des fonctions plutôt « basiques » mais utiles ( pour nous :grin:)
C’est sympa, fonctionne très bien, mais adepte du monsieur plus ( les anciens auront la référence) , je souhaitais tester et utiliser simplement les wildcards disponibles depuis peu.

Objectif : Utiliser Assist pour envoyer un petit message aux personnes référencées dans mon HA et disposant de l’application companion.

Cas d’usage : envoyer un message à ma femme " sert le rosé , j’arrive dans 5 minutes "

L’idée est donc récupérer à partir d’une personne référencée dans HA son device-tracker companion, transformer ce device tracker en notify.mobile_app_XXX et de lui envoyer un message sous forme de notification, la personne et le message étant « capturés » par assist.

Une « simple » automatisation utilisant les wildcard permet de rendre ce service .
Je ne suis pas un pro du templating , ne rigolez pas trop , j’ai décomposé un max mais ça doit pouvoir se réduire.

alias: Assist-Notif-Message
description: ""
trigger:
  - platform: conversation
    command:
      - "[envoyer | envoi | envoie] {message} à {destinataire} "

condition: []
action:
  - set_conversation_response: "{{ trigger.slots.message }} envoyé à {{ trigger.slots.destinataire }}"
  - service: >
      {% set personne = trigger.slots.destinataire %} 
      {% set userpers = ("person." + personne ) %} 
     {% set dvtrak =(state_attr(userpers,'device_trackers')[0]) %}
     {% set mobile =(state_attr(dvtrak,'friendly_name')) %} 
     {{ "notify.mobile_app_" + state_attr (dvtrak,'friendly_name') }}
    metadata: {}
    data:
      title: "Message "
      message: "{{trigger.slots.message}}"
mode: single

Le fonctionnement : dire à Assist " envoyer sert le rosé , j’arrive dans 5 minutes à xxxx" , où xxxx est le prénom de ma femme evidemment :joy:
Bien sûr, le message et le destinataire sont variables en fonction de la commande vocale :wink:

Vous l’aurez compris , ceci n’est qu’un petit exemple pour vous montrer un autre usage possible d’Assist.

Si vous disposez de plusieurs media player chez vous, cet exemple peut être facilement détourné pour lancer une annonce sur un ou plusieurs de ces media_player ( plus besoin de crier " A table !!! " par exemple pour rameuter toute la troupe eparpillée dans la maison :rofl: :rofl: :rofl:)

Amusez vous bien et n’hésitez pas à partager vos idées/ concepts / bricolages avec Assist

@+

EDIT: petite précision, si plusieurs device_tracker rattachés à la personne, ça utilise le premier de la liste ( qui doit donc être le mobile avec companion).

1 « J'aime »

Faudrait voir à vérifier le destinataire…

Ca ne demande qu’à être amélioré comme indiqué au début.
Si ça te tente, n’hésite pas :wink: (et partage nous ton code)

@+

Hello,

DAns la même idée, voici la version media player, qui peut s’assimiler à un Public Adress :loud_sound:

Objectif : Utiliser Assist pour lancer un message tts sur le media player dédié d’une pièce ou tous les media players dédiés de la maison.

Cas d’usage: Rameuter simplement tout le monde dans une maison sur 3 niveaux

Prérequis : Pour éviter une cacophonie si plusieurs media player sont installés dans une même pièce , on va créer un groupe de media player dédiés à cette fonction ( 1 par pièce donc) .
Evidemment chaque media player doit être préalablement raccroché à une pièce.

A partir du mot prononcé pour pièce, on fait une recherche du media player correspondant dans le groupe Media_Assistants, et si la pièce est « maison », on fait une diffusion générale à tous les éléments de ce groupe.

alias: Assist-Notif-Media_Player
description: ""
trigger:
  - platform: conversation
    command:
      - "annonce {message} dans [la|le] {piece} "
condition: []
action:
  - if:
      - condition: template
        value_template: "{{ trigger.slots.piece == 'maison' }}"
    then:
      - service: tts.cloud_say
        metadata: {}
        data:
          cache: false
          entity_id: media_player.media_assistants
          message: "{{trigger.slots.message}}"
    else:
      - service: tts.cloud_say
        metadata: {}
        data:
          cache: false
          entity_id: >
            {{expand('media_player.media_assistants')  |selectattr(('entity_id') and
            'entity_id','in', area_entities(trigger.slots.piece))
            |map(attribute='entity_id') |join }}
          message: "{{trigger.slots.message}}"
mode: single

Comme précédemment, si des « templatistes » peuvent se pencher sur le code ce serait sympa, car ça fait un peu bricole pour l’instant , mais ça fonctionne :wink:

Et ça ne demande que des améliorations :grin:

@+