Yes, that’s a use for the condition attribute.
That’s perfect. Now I’m wondering if I can have two conditions? The Quiet Time and the example from above, media player idle? Do I separate those with a comma?
You can do something like this:
{{ is_state('mediaplayer.mymedia','idle') and is_state('binary_sensor.quiet_time','off') }}
Alright! thanks
Change the service google tts to this
- service: notify.alexa_media
data:
data:
type: tts
target:
- !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"
How can i add a delay ?
Do you want to add a delay before the greetings?
Yes, but set a break time with Amazon Polly
Tried this but Alexa doesn’t talk. What could I be doing wrong?
Yes, I would like to know that too. How to add a delay before the greeting? TKS
Can you explain in more detail what “Minutes between person at home and door trigged” means? If I set the time to 10 min for example.
Is it also possible to add so that it is not activated between 19:00 and 08:00?
Hey i saw this blueprint and wanted to test it.
I edited a little bit and added a delay and mine works with alexa.
Here is the code:
blueprint:
name: TTS on door opening with persons at home with Alexa
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:
multiline: false
delay:
name: delay of TTS
description: Delay between door opening and TTS
default: 3
selector:
number:
min: 0.0
max: 30.0
step: 1.0
unit_of_measurement: sec
mode: slider
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 }}'
- delay: !input 'delay'
- service: notify.alexa_media
data_template:
target: !input 'target'
data:
type: tts
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
The timeout shoud end when the door Open, if you Open the door again say hello again.
wait_for_trigger ?? Can this be done?
Why is it splitting the lines this way?
multiple_msg.split('\\n')
Can’t it be done with just the \n
? My list does not work properly, I have to add double line separations for this to work.
This looks really cool. One suggestion @rokam , would it be possible for the greeting to include a list of the people that were already home before?
"Welcome back <person>, <other_person_1> and <other_person_2> are currently at home."
Can you explain in more detail what “Minutes between person at home and door trigged” means?
That means that people that have the state changed in the last 10 minutes will be greeted.
Is it also possible to add so that it is not activated between 19:00 and 08:00?
Yes, you can use the condition_to_run. I do have an input_boolean that corresponds to my night_mode and I set it with another automation. I use the following condition value.
{{ is_state('input_boolean.night_mode','off') }}
Where is that? The GUI for the automation? I already tried that, but homeassistant doesn’t seem to like it and does nasty things when it saves the automation.