Skip to content

Instantly share code, notes, and snippets.

@ignacio82
Forked from rokam/tts-door-opening.yaml
Last active August 31, 2022 03:35
Show Gist options
  • Select an option

  • Save ignacio82/d0271f98a14f28a60b9149a7594d2acf to your computer and use it in GitHub Desktop.

Select an option

Save ignacio82/d0271f98a14f28a60b9149a7594d2acf to your computer and use it in GitHub Desktop.
Send a greetings TTS message using tts.google_say service after opening the door, considering who arrived in the configured minutes.
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: door
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: {}
target:
name: Target devices
description: Target devices to play the TTS message
selector:
entity:
domain: media_player
variables:
persons_str: !input persons
persons_list: "{{ persons_str.split(',') | map('trim') | list }}"
timeout: !input minutes
concat_str: !input persons-concat
persons_count: >
{%- set first = true -%}
{%- set data = namespace(nomes=[]) -%}
{%- for person in persons_list -%}
{%- if is_state(person, 'home') and (now() - states[person].last_changed).total_seconds() < timeout*60 -%}
{%- set data.nomes = data.nomes + [states[person].name] -%}
{%- endif -%}
{%- endfor -%}
{{ data.nomes }}
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:
- service: tts.google_say
data:
entity_id: !input 'target'
message: |
{%- set single_lst = single_msg.split('\n') -%}
{%- set multiple_lst = multiple_msg.split('\n') -%}
{%- if persons_count|length > 1 -%}
{{ multiple_lst | random | replace('<persons>', persons_names) }}
{%- else -%}
{{ single_lst | random | replace('<person>', persons_names) }}
{%- endif -%}
mode: single
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment