I have the following script, but I can’t find a way to make it “andif” instead of “if”. Basically I want it to say the textstring for every door that is open in that order, so Framdörr Öppen, Uppfartsdörr öppen…
doors_check:
alias: Dörrstatus
sequence:
- service: tts.google_say
data_template:
##entity_id: media_player.kok
message: >
{% if is_state('sensor.framdoor','ÖPPEN')%}
'Framdörren är Öppen'
{% elif is_state('sensor.uppfartdoor','ÖPPEN')%}
'Uppfartsdörren är Öppen'
{% elif is_state('sensor.terassdoor','ÖPPEN')%}
'Terassdörren är Öppen'
{% elif is_state('sensor.garagedoor','ÖPPEN')%}
'Garagedörren är Öppen'
{% elif is_state('sensor.garagepoort','ÖPPEN')%}
'Garageporten är Öppen'
{% else %}
'Alla dörrar är Stängda'
{% endif %}
Try this, note the use of if rather than elf and the addition of spaces at the end of the strings to say. Also the use of >- to strip newline characters.
doors_check:
alias: Dörrstatus
sequence:
- service: tts.google_say
data_template:
##entity_id: media_player.kok
message: >-
{% if is_state('sensor.framdoor','ÖPPEN')%}
'Framdörren är Öppen '
{% if is_state('sensor.uppfartdoor','ÖPPEN')%}
'Uppfartsdörren är Öppen '
{% if is_state('sensor.terassdoor','ÖPPEN')%}
'Terassdörren är Öppen '
{% if is_state('sensor.garagedoor','ÖPPEN')%}
'Garagedörren är Öppen '
{% if is_state('sensor.garagepoort','ÖPPEN')%}
'Garageporten är Öppen'
{% else %}
'Alla dörrar är Stängda'
{% endif %}
So if your 1st, 2nd and 4th doors are open you should get this sent to tts:
Framdörren är Öppen Uppfartsdörren är Öppen Garagedörren är Öppen
I get the following error when I use “if” instead of “elif”
Invalid config for [script]: invalid template (TemplateSyntaxError: Unexpected end of template. Jinja was looking for the following tags: 'elif' or 'else' or 'endif'. The innermost block that needs to be closed is 'if'.) for dictionary value @ data['script']['doors_check']['sequence'][0]['data_template']['message']. Got "{% if is_state('sensor.framdoor','ÖPPEN')%} 'Framdörren är Öppen' {% if is_state('sensor.uppfartdoor','ÖPPEN')%} 'Uppfartsdörren är Öppen' {% if is_state('sensor.terassdoor','ÖPPEN')%} 'Terassdörren är Öppen' {% if is_state('sensor.garagedoor','ÖPPEN')%} 'Garagedörren är Öppen' {% if is_state('sensor.garagepoort','ÖPPEN')%} 'Garageporten är Öppen' {% else %} 'Alla dörrar är Stängda' {% endif %}". (See /home/homeassistant/.homeassistant/configuration.yaml, line 1488). Please check the docs at https://home-assistant.io/components/script/
FYI that has a typo and I can’t edit that post anymore.
This is without a typo.
{% set open_doors = states | selectattr('entity_id', 'in', state_attr('group.all_doors','entity_id')) | selectattr('state','in',['on','open']) | list | map(attribute='name') | join(', ') %}
The following doors are open: {{ open_doors }}
Are all these entities sensors? Because you can make this faster by using states.sensor instead of state after the equal sign too. If you have sensors and binary_sensors, then you have to use states.