main
Stuart Lamont 3 years ago
parent 32523c106b
commit 3c1ef77eb1

@ -1,5 +1,7 @@
# Notes for creating a morning briefing from my smart home.
[Back to README](./README.md)
## Determining the data points that we want
__Current Temperature:__ `{{ state_attr ('weather.home','temperature') }}`

@ -28,15 +28,13 @@ and {{ states('sensor.master_bedroom_purifier_temperature') }} °C in the Master
### But there's a better way!
We're going to crate an Array of Dictionaries, and iterate through the array.
The Dictionary Key is the `entity_id` of the temperature sensor in Home Assistant.
The Dictionary Value is the Name of the room we want our TTS engine to say.
For the TTS to sound more 'natural' I've added ", and" to the `name` of the second last item in the array
```jinja
{% set inside_temps = {
# A List of Dictionaries
# The Dictionary Key is the `entity_id` of the temperature sensor in Home Assistant
# the Dictionary Value is the Name of the room we want our TTS engine to say.
# For the TTS to sound more 'natural' I've added ", and" to the second last item in the array
{% set inside_temps = {
'sensor.temperature_dining': 'Dining Room',
'sensor.lounge_ac_inside_temperature': 'Lounge Room',
'sensor.temperature_office': 'Office, and',
@ -44,8 +42,6 @@ We're going to crate an Array of Dictionaries, and iterate through the array.
} %}
Inside it's currently
{% for sensor, room in inside_temps.items() %}
{{ states(sensor) }} °C in the {{ room }}

@ -3,46 +3,60 @@ announce_weather_details:
sequence:
- service: notify.alexa_media
data:
message: "\n{% set current_temp = state_attr ('weather.home','temperature')
| float %} {% set wind_bearing = state_attr('weather.home', 'wind_bearing')
| float %} {% set wind_speed = state_attr('weather.home','wind_speed') | float
%} {% set current_condition = states('weather.home') %}\n\n{% if current_condition
== 'partlycloudy' %} \n {% set current_condition = 'Partly Cloudy' %}\n{%
endif %}\n{% set directions = { (0.0, 11.25): 'North', (11.25, 33.75): 'North
North East', (33.75, 56.25): 'North East', (56.25, 78.75): 'East North East',
(78.75, 101.25): 'East', (101.25, 123.75): 'East South East', (123.75, 146.25):
'South Eeast', (146.25, 168.75): 'South South East', (168.75, 191.25): 'South',
(191.25, 213.75): 'South South West', (213.75, 236.25): 'South West', (236.25,
258.75): 'West South West', (258.75, 281.25): 'West', (281.25, 303.75): 'West
North West', (303.75, 326.25): 'North West', (326.25, 348.75): 'North Nort
West', (348.75, 360.0): 'North' } %}\nOutside, It's {{ current_condition }}
and {{ current_temp }} °C.\n{% set weather = state_attr('weather.home', 'forecast')
%} {% set high_temp = weather[0].temperature %} {% set low_temp = weather[0].templow
%}\n{% for entry in weather %}\n {% if entry.temperature > high_temp %}\n
\ {% set high_temp = entry.temperature %}\n {% endif %}\n {% if entry.templow
< low_temp %}\n {% set low_temp = entry.templow %}\n {% endif %}\n {%
if entry.condition == 'rainy'%} \n It looks like there's rain expected
at around {{ entry.datetime.split('T')[1][:2] }} o'clock. \n You might
want to take an umbrella if you're planning on leaving the house.\n {% endif
%}\n{% endfor %}\n{% if high_temp > 30 %} \n It's going to be a hot one \n{%
elif 20 < high_temp < 30 %} \n It should be a warm day \n{% elif 15 < high_temp
< 20 %} \n It's going to be a pretty mild temperature today \n{% elif 10
< high_temp < 15 %} \n It seems like it'll be a bit chilly today\n{% elif
0 < high_temp < 10 %} \n It's going to be a cold day \n{% else %} \n It's
going to be freezing today \n{% endif %}\nThe forecast high is {{ high_temp
}} °C.\nWith a Low of {{ low_temp }} °C . {% if low_temp > 30 %} \n Wow.
That's hot! \n{% elif 20 < low_temp < 30 %}\n it's not going to go below
20 degrees today. \n{% elif 10 < low_temp < 20 %} \n it might get a little
bit chilly. \n{% elif 0 < low_temp < 10 %} \n That's cold. \n{% else %} \n
\ Absolutely freezing! \n{% endif %}\n{% if wind_speed > 50 %}\n Its very
windy outside.\n{% elif 40 < wind_speed < 50 %}\n It's pretty windy at the
moment\n{% elif 30 < wind_speed < 40 %}\n Theres a strong breeze right now\n{%
elif 20 < wind_speed < 30 %}\n It's a bit breezy outside\n{% elif 10 < wind_speed
< 20 %}\n There's a light breeze\n{% else %}\n it's quite still\n{% endif
%} {% for rng, direction in directions.items() %} \n {% if wind_bearing >=
rng[0] and wind_bearing < rng[1] %} \n The wind is currently blowing from
the {{ direction }} direction, at {{ wind_speed }} kilometres per hour \n
\ {% endif %}\n{% endfor %} "
message: >_
{% set current_temp = state_attr ('weather.home','temperature') | float %}
{% set current_condition = states('weather.home') %}
{% if current_condition == 'partlycloudy' %}
{% set current_condition = 'Partly Cloudy' %}
{% endif %}
Outside, It's {{ current_condition }} and {{ current_temp }} degrees Celsius.
{% set weather = state_attr('weather.home', 'forecast') %}
{% set high_temp = weather[0].temperature %}
{% set low_temp = weather[0].templow %}
{% for entry in weather %}
{% if entry.temperature > high_temp %}
{% set high_temp = entry.temperature %}
{% endif %}
{% if entry.templow < low_temp %}
{% set low_temp = entry.templow %}
{% endif %}
{% if entry.condition == 'rainy'%}
It looks like there's rain expected at around {{ entry.datetime.split('T')[1][:2] }} o'clock. You might want to take an umbrella if you're leaving the house.
{% endif %}
{% endfor %}
{% if high_temp > 30 %}
It's going to be a hot one
{% elif 20 < high_temp < 30 %}
It should be a warm day
{% elif 15 < high_temp < 20 %}
It's going to be a pretty mild temperature today
{% elif 10 < high_temp < 15 %}
It seems like it'll be a bit chilly today
{% elif 0 < high_temp < 10 %}
It's going to be a cold day
{% else %}
It's going to be freezing today
{% endif %}
The forecast high is {{ high_temp }} °C.
With a Low of {{ low_temp }} °C .
{% if low_temp > 30 %}
Wow. That's hot!
{% elif 20 < low_temp < 30 %}
it's not going to go below 20 degrees today.
{% elif 10 < low_temp < 20 %}
it might get a little bit chilly.
{% elif 0 < low_temp < 10 %}
That's cold.
{% else %}
Absolutely freezing!
{% endif %}
target:
- media_player.dining_room_echo_plus
mode: single
@ -51,53 +65,58 @@ announce_time:
sequence:
- service: notify.alexa_media
data:
message: '" {% set current_time = states(''sensor.time'') %} {% set hour = current_time.split('':'')[0]
| int %} {% set minute = current_time.split('':'')[1] %}
{% if hour >= 6 and hour < 12 %} Good morning! {% elif hour >= 12 and hour
< 18 %} Good afternoon! {% elif hour >= 18 or hour < 6 %} Good evening! {%
endif %}
message: >_
{% set current_time = states('sensor.time') %}
{% set hour = current_time.split(':')[0] | int %}
{% set minute = current_time.split(':')[1] %}
{% set suffix = ''AM'' if hour < 12 else ''PM'' %} {% set hour_12 = hour if
hour <= 12 else hour - 12 %}
{% if hour >= 6 and hour < 12 %}
Good morning!
{% elif hour >= 12 and hour < 18 %}
Good afternoon!
{% elif hour >= 18 or hour < 6 %}
Good evening!
{% endif %}
It''s currently {{ hour_12 }}:{{ minute }} {{ suffix }}."
{% set suffix = ''AM'' if hour < 12 else 'PM' %}
{% set hour_12 = hour if hour <= 12 else hour - 12 %}
'
It's currently {{ hour_12 }}:{{ minute }} {{ suffix }}.
target:
- media_player.dining_room_echo_plus
mode: single
announce_internal_temperatures:
announce_quote_of_the_day:
alias: Announce Quote of the Day
sequence:
- service: notify.alexa_media
data:
message: ' The {{ state_attr( ''sensor.quote_sensor'', ''category'' ) }} Quote
of the day is by {{ state_attr( ''sensor.quote_sensor'', ''author'' ) }}. They
said. {{ states(''sensor.quote_sensor'') }} '
message: >_
The {{ state_attr( ''sensor.quote_sensor'', ''category'' ) }} \
Quote of the day is by {{ state_attr( ''sensor.quote_sensor'', ''author'' ) }}.
They said. {{ states(''sensor.quote_sensor'') }}
target:
- media_player.dining_room_echo_plus
mode: single
icon: mdi:comment-quote
announce_dad_joke_of_the_day:
announce_pending_updates:
alias: Announce Pending Updates
sequence:
- service: notify.alexa_media
data:
message: '{% if states(''update.home_assistant_operating_system_update'') ==
''on'' %} There''s a Home Assistant O S Update pending. The Installed version
is {{ state_attr(''update.home_assistant_operating_system_update'', ''installed_version'')
}}. The Available version is {{ state_attr(''update.home_assistant_operating_system_update'',
''latest_version'') }}. {% endif %} {% if states(''update.home_assistant_core_update'')
== ''on'' %} There''s a Home Assistant Core Update pending. The Installed
version is {{ state_attr(''update.home_assistant_core_update'', ''installed_version'')
}}. The Available version is {{ state_attr(''update.home_assistant_core_update'',
''latest_version'') }}. {% endif %}
{% if states(''update.esphome_update'') == ''on'' %} There''s an E S P Home
Update pending. The Installed version is {{ state_attr(''update.esphome_update'',
''installed_version'') }}. The Available version is {{ state_attr(''update.esphome_update'',
''latest_version'') }}. {% endif %} '
message: >_
{% set entities = {
'update.home_assistant_operating_system_update': 'Home Assistant OS Update',
'update.home_assistant_core_update': 'Home Assistant Core',
'update.esphome_update': 'E S P Home',
} %}
{% for entity, name in entities.items() %}
{% if states(entity) == 'on' %}
There's a {{ name }} pending.
The Installed version is {{ state_attr( entity, 'installed_version') }}
The Available version is {{ state_attr(entity, 'latest_version') }}
{% endif %}
{% endfor %}
target:
- media_player.dining_room_echo_plus
mode: single
@ -130,32 +149,77 @@ announce_end_of_briefing:
target:
- media_player.dining_room_echo_plus
mode: single
test_everywhere_announcement:
alias: Test Everywhere Announcement
announce_inside_temperatures:
alias: Announce Inside Temperatures
sequence:
- service: notify.alexa_media
data:
data:
type: tts
message: '" This is a Test "'
message: >_
{% set inside_temps = {
'sensor.temperature_dining': 'Dining Room',
'sensor.lounge_ac_inside_temperature': 'Lounge Room',
'sensor.temperature_office': 'Office, and',
'sensor.master_bedroom_purifier_temperature': 'Master Bedroom'
} %}
Inside it's currently
{% for sensor, room in inside_temps.items() %}
{{ states(sensor) }} °C in the {{ room }}
{% endfor %}
target:
- media_player.dining_room_echo_plus
- media_player.bedroom_echo_dot
- media_player.office_echo_dot
- media_player.spare_room_echo_dot
mode: single
announce_inside_temperatures:
alias: Announce Inside Temperatures
announce_wind_details:
alias: Announce Wind Details
sequence:
- service: notify.alexa_media
data:
data:
type: tts
message: ' Inside it''s currently {{ states(''sensor.temperature_dining'') }}
°C in the Dining Room, {{ states(''sensor.lounge_ac_inside_temperature'')
}} °C in the Lounge, {{ states(''sensor.temperature_office'')}} °C in the
office, and {{ states(''sensor.master_bedroom_purifier_temperature'') }} °C
in the Master Bedroom. '
target:
- media_player.dining_room_echo_plus
message: >_
{% set wind_bearing = state_attr('weather.home', 'wind_bearing') | float %}
{% set wind_speed = state_attr('weather.home','wind_speed') | float %}
{% set directions = {
(0.0, 11.25): 'North',
(11.25, 33.75): 'North North East',
(33.75, 56.25): 'North East',
(56.25, 78.75): 'East North East',
(78.75, 101.25): 'East',
(101.25, 123.75): 'East South East',
(123.75, 146.25): 'South Eeast',
(146.25, 168.75): 'South South East',
(168.75, 191.25): 'South',
(191.25, 213.75): 'South South West',
(213.75, 236.25): 'South West',
(236.25, 258.75): 'West South West',
(258.75, 281.25): 'West',
(281.25, 303.75): 'West North West',
(303.75, 326.25): 'North West',
(326.25, 348.75): 'North Nort West',
(348.75, 360.0): 'North'
} %}
{% if wind_speed > 50 %}
Its very windy outside.
{% elif 40 < wind_speed < 50 %}
It's pretty windy at the moment
{% elif 30 < wind_speed < 40 %}
Theres a strong breeze right now
{% elif 20 < wind_speed < 30 %}
It's a bit breezy outside
{% elif 10 < wind_speed < 20 %}
There's a light breeze
{% else %}
it's quite still
{% endif %}
{% for rng, direction in directions.items() %}
{% if wind_bearing >= rng[0] and wind_bearing < rng[1] %}
The wind is currently blowing from the {{ direction }} direction, at {{ wind_speed }} kilometres per hour
{% endif %}
{% endfor %}
target: media_player.dining_room_echo_plus
mode: single
icon: mdi:wind-power

@ -57,4 +57,54 @@
The wind is currently blowing from the {{ direction }} direction, at {{ wind_speed }} kilometres per hour
{% endif %}
{% endfor %}
```
```
## Put it all together
```jinja
{% set wind_bearing = state_attr('weather.home', 'wind_bearing') | float %}
{% set wind_speed = state_attr('weather.home','wind_speed') | float %}
{% set directions = {
(0.0, 11.25): 'North',
(11.25, 33.75): 'North North East',
(33.75, 56.25): 'North East',
(56.25, 78.75): 'East North East',
(78.75, 101.25): 'East',
(101.25, 123.75): 'East South East',
(123.75, 146.25): 'South Eeast',
(146.25, 168.75): 'South South East',
(168.75, 191.25): 'South',
(191.25, 213.75): 'South South West',
(213.75, 236.25): 'South West',
(236.25, 258.75): 'West South West',
(258.75, 281.25): 'West',
(281.25, 303.75): 'West North West',
(303.75, 326.25): 'North West',
(326.25, 348.75): 'North Nort West',
(348.75, 360.0): 'North'
} %}
{% if wind_speed > 50 %}
Its very windy outside.
{% elif 40 < wind_speed < 50 %}
It's pretty windy at the moment
{% elif 30 < wind_speed < 40 %}
Theres a strong breeze right now
{% elif 20 < wind_speed < 30 %}
It's a bit breezy outside
{% elif 10 < wind_speed < 20 %}
There's a light breeze
{% else %}
it's quite still
{% endif %}
{% for rng, direction in directions.items() %}
{% if wind_bearing >= rng[0] and wind_bearing < rng[1] %}
The wind is currently blowing from the {{ direction }} direction, at {{ wind_speed }} kilometres per hour
{% endif %}
{% endfor %}
```

Loading…
Cancel
Save

Powered by TurnKey Linux.