diff --git a/README.md b/README.md index e69de29..f1061a6 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,45 @@ +# Hive Mind Automation - Video - Getting a Briefing from your Smart Home in Home Assistant + +## Preface + +This serves as supplemental information for the Hive Mind Automation YouTube Video +[Create a Daily Briefing with Home Assistant]() + +It contains code snippets of Jinja2 Templates used in the announcements, and I've added a `scripts.yaml` file so you can see how I use it in my setup. + +I've broken the scripts into individual snippets to be triggered by the automation. + +Reference materials are available at: + + +[Time Announcement](./time.md) +[Weather - Temperature](./weatherTemperature.md) +[Weather - Wind](./weatherWind.md) +[Inside Temperatures](./inside%20temps.md) +[Dad Joke, Quote and Random Fact](./fun.md) +[Pending Updates](./pending%20updates.md) + + + + + + + +## Script Contents +The Basis of each Script in Home Assistant is: +``` +service: notify.alexa_media +data: + data: + type: tts + message: " + + " + target: + - media_player.dining_room_echo_plus + - media_player.bedroom_echo_dot + - media_player.office_echo_dot + - media_player.spare_room_echo_dot +``` +Where we'll then swap out `` for what we want to actually say. +In this case, I'm using the Alexa Media ACS add-on, but you could reasonably use this with Google home, or ANY text to speech engine from Home Assistant, including \ No newline at end of file diff --git a/weather temperature.md b/weather temperature.md deleted file mode 100644 index fce0230..0000000 --- a/weather temperature.md +++ /dev/null @@ -1,188 +0,0 @@ -# Home Assistant Jinja 2 Templates for Weather Temperatures - -## Step-by-step - -### Get the current Temperature from Home Assistant -We're casting this as a float, probably no need, but I'd rather be safe. -``` -{% set current_temp = state_attr ('weather.home','temperature') | float %} -``` - -### Get the current weather condition from Home Assistant as well -``` -{% set current_condition = states('weather.home') %} -``` -### Fix the current Condition -When the Current weather condition is "Partly Cloudy" the default weather integration returns `partlycloudy` and it sounds odd when read out by a Text to Speech engine. -To fix it I added: -``` -{% if current_condition == 'partlycloudy' %} - {% set current_condition = 'Partly Cloudy' %} -{% endif %} -``` - -## Announce the current condition and Temperature -``` -Outside, It's {{ current_condition }} and {{ current_temp }} degrees Celsius. -``` - -## Figure out the Highs and Lows from the forecast -For weather information, I want to know the High and Low temp. This data is strangely not included by default in the default weather integration, so we have to figure it out ourselves. - -### Start by Extracting the `forecast` array data into a variable -``` -{% set weather = state_attr('weather.home', 'forecast') %} -``` - -### Instantiate a `high_temp` and `low_temp` variable -We're assigning the temperature from the 0th record in the array to get started. - -``` -{% set high_temp = weather[0].temperature %} -{% set low_temp = weather[0].templow %} -``` - -### Iterate through the array and set the `high_temp` or `low_temp` variables accordingly. -I've also added an `if` statement in here to announce if any of the forecast conditions are `rainy` and the `hour` that the rain is forecast for and to tell us to take an umbrella. -I've surrounded that code block with `###########` for clarity - -``` -{% 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 %} - - ########### - # While we're here, if the condition for this hour is `rainy` let's announce that - {% 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 %} -``` - -### Some Qualitative statements about the `high_temp` -This code block looks at the `high_temp` variable and runs the if statement below to make a qualitative statement about it. -These have been built for °C and I pulled the qualitative statements out of my head. -Change them as you need to - -`Above 30°C` say "It's going to be a hot one" -`between 20°C and 30°C` say "It should be a warm day" -`between 15°C and 20°C` say "It's going to be a pretty mild temperature today" -`between 10°C and 15°C` say "It seems like it'll be a bit chilly today" -`between 0°C and 10°C` say "It's going to be a cold day" -else: the `high_temp` variable must be < 0°C -`< 0°C` say "It's going to be freezing today" - -``` -{% 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 %} -``` - -### Announce the `high_temp` and `low_temp` values -Again, built for °C - -``` -The forecast high is {{ high_temp }} °C. -With a Low of {{ low_temp }} °C . -``` - -### Some qualitative statements about the `low_temp` -Again we're looking at °C and the statements and ranges are arbitrary, and can be adjusted to your tastes - -Remember these are for the `low_temp` variable, so it's not going to get colder than these - -`Above 30°C` say "Wow. That's hot!" -`between 20°C and 30°C` say "it's not going to get below 20°C toda.y" -`between 10°C and 20°C` say "it might get a little bit chilly." -`between 0°C and 10°C` say "That's cold." -`< 0°C` say "Absolutely freezing!" - -Puntuation like `.`, `!`, `?` and `,` is important in the text to speech statments so the timing sounds "natural" - -``` -{% if low_temp > 30 %} - Wow. That's hot! -{% elif 20 < low_temp < 30 %} - it's not going to go below 20°C 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 %} -``` - -## Now we can put it all together: -``` -{% 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 %} -``` \ No newline at end of file diff --git a/weather wind.md b/weather wind.md deleted file mode 100644 index 1ccfeff..0000000 --- a/weather wind.md +++ /dev/null @@ -1,56 +0,0 @@ -# Home Assistant Jinja Templating to anmnounce Wind Details - -## get the current wind speed and wind bearing in degrees from Home Assistant -``` -{% set wind_bearing = state_attr('weather.home', 'wind_bearing') | float %} -{% set wind_speed = state_attr('weather.home','wind_speed') | float %} -``` - -## This array is a list of Cardinal Directions allowing us to convert the -``` -{% 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' -} %} -``` - -## Announce a qualitative description of wind speed -``` -{% 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 %} -``` \ No newline at end of file