Send a TTS greetings to whom opened the door after arriving home

Tags: #<Tag:0x00007fc4152ac3e0> #<Tag:0x00007fc4152ac2f0>

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

With this blueprint, you are able to send a TTS greeting using tts.say_google service to any media_player with the name of the person that arrived in less than the configured minutes.
It also allows you to set a condition to run it and it can also do other actions after the execution.

Thanks for any feedback, that is my first blueprint.

1 Like

If I want to play a message for only one person, I don’t know how to set it up. You cannot save without the second message.
If there is only one person will it work?
I have no idea how to fulfill the condition. If I leave true is it good?
You can provide a pattern setting. I wanted to test but it doesn’t work
Thank you very much

Thanks for this.

Would be good to be able to select a motion sensor instead of a door sensor :+1:

If you have only one person, you can put the same messages in both boxes. The blueprint will use the single-person message if there is only one person arriving.

You can leave as True without any issue. That can be used to check whenever you wish the message to be played. Lets think if you wish to play only when your player is in idle state. You can use something like:

{{ is_state('mediaplayer.mymedia','idle') }}

Good, I’ll update it for motion sensor as well.

@jackpea I’m unable to set multiple classes for a binary_input. A workaround is change the class from door to motion at the blueprint.
It will be something like this:

blueprint:
  name: TTS on door opening with persons at home
  description: Sends TTS message to a media_player when door is oppened with the person
    at home
  domain: automation
  input:
    door_sensor:
      name: Door sensor
      selector:
        entity:
          domain: binary_sensor
          device_class: motion
    persons:
      name: Persons
      selector:
        entity:
          domain: person
    minutes:
      name: Minutes
      description: Minutes between person at home and door trigged
      default: 5
      selector:
        number:
          min: 1.0
          max: 30.0
          step: 1.0
          unit_of_measurement: min
          mode: slider
    message-single:
      name: Message single person
      description: 'Message to salute single person. One possible message per line.
        Use <person> tag to be replaced by person name.

        '
      selector:
        text:
          multiline: true
    message-multiple:
      name: Message multiple persons
      description: 'Message multiple persons. One possible message per line. Use <persons>
        tag to be replaced by person name.

        '
      selector:
        text:
          multiline: true
    persons-concat:
      name: Text to concatenate the persons name
      description: String to be used as concatenate between names
      default: ' and '
      selector:
        text:
          multiline: false
    target:
      name: Target devices
      description: Target devices to play the TTS message
      selector:
        entity:
          domain: media_player
    condition:
      name: Condition to run
      description: 'Add a value_template value for major condition to execute the automation'
      default: 'True'
      selector:
        text:
    actions:
      name: Additional actions
      description: 'After the execution of the automation, run those actions.'
      default: []
      selector:
        action: {}
  source_url: https://gist.github.com/rokam/22fd6e497fbe61478fda4d0fc8215abf
variables:
  persons_str: !input 'persons'
  persons_list: '{{ persons_str.split('','') | map(''trim'') | list }}'
  timeout: !input 'minutes'
  concat_str: !input 'persons-concat'
  addactions: !input actions
  persons_count: "{%- set first = true -%} {%- set data = namespace(nomes=[]) -%}\
    \ {%- for person in persons_list -%}\n  {%- if is_state(person, 'home') and (now()\
    \ - states[person].last_changed).total_seconds() < timeout*60 -%}\n    {%- set\
    \ data.nomes = data.nomes + [states[person].name] -%}\n  {%- endif -%}\n{%- endfor\
    \ -%} {{ data.nomes }}\n"
  persons_names: '{%- set finalstr = '', ''.join(persons_count) -%} {{ concat_str.join(finalstr.rsplit('',
    '',1)) }}

    '
  single_msg: !input 'message-single'
  multiple_msg: !input 'message-multiple'
trigger:
- platform: state
  entity_id: !input 'door_sensor'
  to: 'on'
action:
- condition: template
  value_template: !input 'condition'
- condition: template
  value_template: "{{ persons_count|length > 0 }}"
- service: tts.google_say
  data:
    entity_id: !input 'target'
    message: "{%- set single_lst = single_msg.split('\\n') -%}\n{%- set multiple_lst\
      \ = multiple_msg.split('\\n') -%}\n{%- if persons_count|length > 1 -%}\n  {{\
      \ multiple_lst | random | replace('<persons>', persons_names) }}\n{%- elif persons_count|length > 0 -%}\n\
      \  {{ single_lst | random | replace('<person>', persons_names) }}\n{%- endif\
      \ -%}\n"
- condition: template
  value_template: "{{ addactions|length > 0 }}"
- choose: []
  default: !input 'actions'
mode: single
1 Like