Yes, I’ve got it running nicely for pollen, weather and moon phases.
Rest sensors:
# Tomorrow.io weather/pollen
- resource: !secret tomorrowio
scan_interval: 1800
sensor:
- name: "Tomorrowio Day 0"
value_template: "{{ value_json.data.timelines[0].intervals[0]['values']['temperature'] }}"
json_attributes_path: "$.data.timelines[0].intervals[0].values"
json_attributes:
- temperature
- temperatureApparent
- humidity
- windSpeed
- windGust
- pressureSurfaceLevel
- precipitationIntensity
- precipitationProbability
- precipitationType
- sunriseTime
- sunsetTime
- visibility
- cloudCover
- cloudBase
- cloudCeiling
- moonPhase
- weatherCode
- grassIndex
- treeIndex
- weedIndex
- name: "Tomorrowio Day 1"
value_template: "{{ value_json.data.timelines[0].intervals[1]['values']['temperature'] }}"
json_attributes_path: "$.data.timelines[0].intervals[1].values"
json_attributes:
- temperature
- temperatureApparent
- humidity
- windSpeed
- windGust
- pressureSurfaceLevel
- precipitationIntensity
- precipitationProbability
- precipitationType
- sunriseTime
- sunsetTime
- visibility
- cloudCover
- cloudBase
- cloudCeiling
- moonPhase
- weatherCode
- grassIndex
- treeIndex
- weedIndex
- name: "Tomorrowio Day 2"
value_template: "{{ value_json.data.timelines[0].intervals[2]['values']['temperature'] }}"
json_attributes_path: "$.data.timelines[0].intervals[2].values"
json_attributes:
- temperature
- temperatureApparent
- humidity
- windSpeed
- windGust
- pressureSurfaceLevel
- precipitationIntensity
- precipitationProbability
- precipitationType
- sunriseTime
- sunsetTime
- visibility
- cloudCover
- cloudBase
- cloudCeiling
- moonPhase
- weatherCode
- grassIndex
- treeIndex
- weedIndex
- name: "Tomorrowio Day 3"
value_template: "{{ value_json.data.timelines[0].intervals[3]['values']['temperature'] }}"
json_attributes_path: "$.data.timelines[0].intervals[3].values"
json_attributes:
- temperature
- temperatureApparent
- humidity
- windSpeed
- windGust
- pressureSurfaceLevel
- precipitationIntensity
- precipitationProbability
- precipitationType
- sunriseTime
- sunsetTime
- visibility
- cloudCover
- cloudBase
- cloudCeiling
- moonPhase
- weatherCode
- grassIndex
- treeIndex
- weedIndex
Template sensors:
# Tomorrow.io sensors
- sensor:
- name: Temperature - Actual
unique_id: tomorrowio_temperature_actual
state: "{{ state_attr('sensor.tomorrowio_day_0', 'temperature') }}"
icon: 'mdi:thermometer'
unit_of_measurement: "°C"
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'temperature') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'temperature') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'temperature') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'temperature') }}"
- name: Temperature - Apparent
unique_id: tomorrowio_temperature_apparent
state: "{{ state_attr('sensor.tomorrowio_day_0', 'temperatureApparent') }}"
icon: 'mdi:thermometer-lines'
unit_of_measurement: "°C"
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'temperatureApparent') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'temperatureApparent') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'temperatureApparent') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'temperatureApparent') }}"
- name: Humidity
unique_id: tomorrowio_humidity
state: "{{ state_attr('sensor.tomorrowio_day_0', 'humidity') }}"
icon: 'mdi:water-percent'
unit_of_measurement: "%"
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'humidity') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'humidity') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'humidity') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'humidity') }}"
- name: Wind Speed
unique_id: tomorrowio_wind_speed
state: "{{ state_attr('sensor.tomorrowio_day_0', 'windSpeed') }}"
icon: 'mdi:windsock'
unit_of_measurement: "m/s"
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'windSpeed') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'windSpeed') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'windSpeed') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'windSpeed') }}"
- name: Wind Gust
unique_id: tomorrowio_wind_gust
state: "{{ state_attr('sensor.tomorrowio_day_0', 'windGust') }}"
icon: 'mdi:weather-windy'
unit_of_measurement: "m/s"
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'windGust') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'windGust') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'windGust') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'windGust') }}"
- name: Pressure
unique_id: tomorrowio_pressure
state: "{{ state_attr('sensor.tomorrowio_day_0', 'pressureSurfaceLevel') }}"
icon: 'mdi:gauge'
unit_of_measurement: "hPa"
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'pressureSurfaceLevel') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'pressureSurfaceLevel') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'pressureSurfaceLevel') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'pressureSurfaceLevel') }}"
- name: Precipitation Intensity
unique_id: tomorrowio_precipitation_ intensity
state: "{{ state_attr('sensor.tomorrowio_day_0', 'precipitationIntensity') }}"
icon: 'mdi:weather-pouring'
unit_of_measurement: "mm/hr"
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'precipitationIntensity') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'precipitationIntensity') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'precipitationIntensity') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'precipitationIntensity') }}"
- name: Precipitation Probability
unique_id: tomorrowio_precipitation_probability
state: "{{ state_attr('sensor.tomorrowio_day_0', 'precipitationProbability') }}"
icon: 'mdi:weather-partly-rainy'
unit_of_measurement: "%"
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'precipitationProbability') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'precipitationProbability') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'precipitationProbability') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'precipitationProbability') }}"
- name: Precipitation Type
unique_id: tomorrowio_precipitation_type
state: >
{% set pvar = {
0: "Nothing",
1: "Rain",
2: "Snow",
3: "Freezing Rain",
4: "Ice Pellets"
} %}
{{ pvar.get(state_attr('sensor.tomorrowio_day_0', 'precipitationType')) }}
icon: 'mdi:weather-snowy-rainy'
attributes:
Today: >
{% set pvar = {
0: "Nothing",
1: "Rain",
2: "Snow",
3: "Freezing Rain",
4: "Ice Pellets"
} %}
{{ pvar.get(state_attr('sensor.tomorrowio_day_0', 'precipitationType')) }}
Tomorrow: >
{% set pvar = {
0: "Nothing",
1: "Rain",
2: "Snow",
3: "Freezing Rain",
4: "Ice Pellets"
} %}
{{ pvar.get(state_attr('sensor.tomorrowio_day_1', 'precipitationType')) }}
Today + 2: >
{% set pvar = {
0: "Nothing",
1: "Rain",
2: "Snow",
3: "Freezing Rain",
4: "Ice Pellets"
} %}
{{ pvar.get(state_attr('sensor.tomorrowio_day_2', 'precipitationType')) }}
Today + 3: >
{% set pvar = {
0: "Nothing",
1: "Rain",
2: "Snow",
3: "Freezing Rain",
4: "Ice Pellets"
} %}
{{ pvar.get(state_attr('sensor.tomorrowio_day_3', 'precipitationType')) }}
- name: Sunrise Time
unique_id: tomorrowio_sunrise_time
state: "{{ state_attr('sensor.tomorrowio_day_0', 'sunriseTime').partition('T')[-1].rpartition('Z')[0] }}"
icon: 'mdi:weather-sunset-up'
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'sunriseTime').partition('T')[-1].rpartition('Z')[0] }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'sunriseTime').partition('T')[-1].rpartition('Z')[0] }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'sunriseTime').partition('T')[-1].rpartition('Z')[0] }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'sunriseTime').partition('T')[-1].rpartition('Z')[0] }}"
- name: Sunset Time
unique_id: tomorrowio_sunset_time
state: "{{ state_attr('sensor.tomorrowio_day_0', 'sunsetTime').partition('T')[-1].rpartition('Z')[0] }}"
icon: 'mdi:weather-sunset'
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'sunsetTime').partition('T')[-1].rpartition('Z')[0] }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'sunsetTime').partition('T')[-1].rpartition('Z')[0] }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'sunsetTime').partition('T')[-1].rpartition('Z')[0] }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'sunsetTime').partition('T')[-1].rpartition('Z')[0] }}"
- name: Visibility
unique_id: tomorrowio_visibility
state: "{{ state_attr('sensor.tomorrowio_day_0', 'visibility') }}"
icon: 'mdi:weather-fog'
unit_of_measurement: "km"
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'visibility') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'visibility') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'visibility') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'visibility') }}"
- name: Cloud Cover
unique_id: tomorrowio_cloud_cover
state: "{{ state_attr('sensor.tomorrowio_day_0', 'cloudCover') }}"
icon: 'mdi:cloud-outline'
unit_of_measurement: "%"
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'cloudCover') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'cloudCover') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'cloudCover') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'cloudCover') }}"
- name: Cloud Base
unique_id: tomorrowio_cloud_base
state: "{{ state_attr('sensor.tomorrowio_day_0', 'cloudBase') }}"
icon: 'mdi:cloud-download-outline'
unit_of_measurement: "km"
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'cloudBase') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'cloudBase') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'cloudBase') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'cloudBase') }}"
- name: Cloud Ceiling
unique_id: tomorrowio_cloud_ceiling
state: "{{ state_attr('sensor.tomorrowio_day_0', 'cloudCeiling') }}"
icon: 'mdi:cloud-upload-outline'
unit_of_measurement: "km"
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'cloudCeiling') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'cloudCeiling') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'cloudCeiling') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'cloudCeiling') }}"
- name: Moon Phase
unique_id: tomorrowio_moon_phase
state: >
{% set mvar = {
0: "New",
1: "Waxing Crescent",
2: "First Quarter",
3: "Waxing Gibbous",
4: "Full",
5: "Waning Gibbous",
6: "Third Quarter",
7: "Waning Crescent"
} %}
{{ mvar.get(state_attr('sensor.tomorrowio_day_0', 'moonPhase')) }}
icon: 'mdi:moon-waning-crescent'
attributes:
Today: >
{% set mvar = {
0: "New",
1: "Waxing Crescent",
2: "First Quarter",
3: "Waxing Gibbous",
4: "Full",
5: "Waning Gibbous",
6: "Third Quarter",
7: "Waning Crescent"
} %}
{{ mvar.get(state_attr('sensor.tomorrowio_day_0', 'moonPhase')) }}
Tomorrow: >
{% set mvar = {
0: "New",
1: "Waxing Crescent",
2: "First Quarter",
3: "Waxing Gibbous",
4: "Full",
5: "Waning Gibbous",
6: "Third Quarter",
7: "Waning Crescent"
} %}
{{ mvar.get(state_attr('sensor.tomorrowio_day_1', 'moonPhase')) }}
Today + 2: >
{% set mvar = {
0: "New",
1: "Waxing Crescent",
2: "First Quarter",
3: "Waxing Gibbous",
4: "Full",
5: "Waning Gibbous",
6: "Third Quarter",
7: "Waning Crescent"
} %}
{{ mvar.get(state_attr('sensor.tomorrowio_day_2', 'moonPhase')) }}
Today + 3: >
{% set mvar = {
0: "New",
1: "Waxing Crescent",
2: "First Quarter",
3: "Waxing Gibbous",
4: "Full",
5: "Waning Gibbous",
6: "Third Quarter",
7: "Waning Crescent"
} %}
{{ mvar.get(state_attr('sensor.tomorrowio_day_3', 'moonPhase')) }}
- name: Weather Code
unique_id: tomorrowio_weather_code
state: "{{ state_attr('sensor.tomorrowio_day_0', 'weatherCode') }}"
icon: 'mdi:weather-sunny'
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'weatherCode') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'weatherCode') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'weatherCode') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'weatherCode') }}"
- name: Weather Code Text
unique_id: tomorrowio_weather_code_text
state: >
{% set wvar = {
0: "Unknown",
1000: "Clear",
1001: "Cloudy",
1100: "Mostly Clear",
1101: "Partly Cloudy",
1102: "Mostly Cloudy",
2000: "Fog",
2100: "Light Fog",
3000: "Breezy",
3001: "Windy",
3002: "Strong Wind",
4000: "Drizzle",
4001: "Rain",
4200: "Light Rain",
4201: "Heavy Rain",
5000: "Snow",
5001: "Snow Flurries",
5100: "Light Snow",
5101: "Heavy Snow",
6000: "Freezing Drizzle",
6001: "Freezing Rain",
6200: "Light Freezing Rain",
6201: "Heavy Freezing Rain",
7000: "Ice Pellets",
7101: "Heavy Ice Pellets",
7102: "Light Ice Pellets",
8000: "Thunderstorm"
} %}
{{ wvar.get(state_attr('sensor.tomorrowio_day_0', 'weatherCode')) }}
icon: 'mdi:weather-sunny'
attributes:
Today: >
{% set wvar = {
0: "Unknown",
1000: "Clear",
1001: "Cloudy",
1100: "Mostly Clear",
1101: "Partly Cloudy",
1102: "Mostly Cloudy",
2000: "Fog",
2100: "Light Fog",
3000: "Breezy",
3001: "Windy",
3002: "Strong Wind",
4000: "Drizzle",
4001: "Rain",
4200: "Light Rain",
4201: "Heavy Rain",
5000: "Snow",
5001: "Snow Flurries",
5100: "Light Snow",
5101: "Heavy Snow",
6000: "Freezing Drizzle",
6001: "Freezing Rain",
6200: "Light Freezing Rain",
6201: "Heavy Freezing Rain",
7000: "Ice Pellets",
7101: "Heavy Ice Pellets",
7102: "Light Ice Pellets",
8000: "Thunderstorm"
} %}
{{ wvar.get(state_attr('sensor.tomorrowio_day_0', 'weatherCode')) }}
Tomorrow: >
{% set wvar = {
0: "Unknown",
1000: "Clear",
1001: "Cloudy",
1100: "Mostly Clear",
1101: "Partly Cloudy",
1102: "Mostly Cloudy",
2000: "Fog",
2100: "Light Fog",
3000: "Breezy",
3001: "Windy",
3002: "Strong Wind",
4000: "Drizzle",
4001: "Rain",
4200: "Light Rain",
4201: "Heavy Rain",
5000: "Snow",
5001: "Snow Flurries",
5100: "Light Snow",
5101: "Heavy Snow",
6000: "Freezing Drizzle",
6001: "Freezing Rain",
6200: "Light Freezing Rain",
6201: "Heavy Freezing Rain",
7000: "Ice Pellets",
7101: "Heavy Ice Pellets",
7102: "Light Ice Pellets",
8000: "Thunderstorm"
} %}
{{ wvar.get(state_attr('sensor.tomorrowio_day_1', 'weatherCode')) }}
Today + 2: >
{% set wvar = {
0: "Unknown",
1000: "Clear",
1001: "Cloudy",
1100: "Mostly Clear",
1101: "Partly Cloudy",
1102: "Mostly Cloudy",
2000: "Fog",
2100: "Light Fog",
3000: "Breezy",
3001: "Windy",
3002: "Strong Wind",
4000: "Drizzle",
4001: "Rain",
4200: "Light Rain",
4201: "Heavy Rain",
5000: "Snow",
5001: "Snow Flurries",
5100: "Light Snow",
5101: "Heavy Snow",
6000: "Freezing Drizzle",
6001: "Freezing Rain",
6200: "Light Freezing Rain",
6201: "Heavy Freezing Rain",
7000: "Ice Pellets",
7101: "Heavy Ice Pellets",
7102: "Light Ice Pellets",
8000: "Thunderstorm"
} %}
{{ wvar.get(state_attr('sensor.tomorrowio_day_2', 'weatherCode')) }}
Today + 3: >
{% set wvar = {
0: "Unknown",
1000: "Clear",
1001: "Cloudy",
1100: "Mostly Clear",
1101: "Partly Cloudy",
1102: "Mostly Cloudy",
2000: "Fog",
2100: "Light Fog",
3000: "Breezy",
3001: "Windy",
3002: "Strong Wind",
4000: "Drizzle",
4001: "Rain",
4200: "Light Rain",
4201: "Heavy Rain",
5000: "Snow",
5001: "Snow Flurries",
5100: "Light Snow",
5101: "Heavy Snow",
6000: "Freezing Drizzle",
6001: "Freezing Rain",
6200: "Light Freezing Rain",
6201: "Heavy Freezing Rain",
7000: "Ice Pellets",
7101: "Heavy Ice Pellets",
7102: "Light Ice Pellets",
8000: "Thunderstorm"
} %}
{{ wvar.get(state_attr('sensor.tomorrowio_day_3', 'weatherCode')) }}
- name: Pollen - Grass
unique_id: tomorrowio_pollen_grass
state: "{{ state_attr('sensor.tomorrowio_day_0', 'grassIndex') }}"
icon: 'mdi:grass'
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'grassIndex') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'grassIndex') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'grassIndex') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'grassIndex') }}"
- name: Pollen - Tree
unique_id: tomorrowio_pollen_tree
state: "{{ state_attr('sensor.tomorrowio_day_0', 'treeIndex') }}"
icon: 'mdi:tree'
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'treeIndex') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'treeIndex') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'treeIndex') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'treeIndex') }}"
- name: Pollen - Weed
unique_id: tomorrowio_pollen_weed
state: "{{ state_attr('sensor.tomorrowio_day_0', 'weedIndex') }}"
icon: 'mdi:spa'
attributes:
Today: "{{ state_attr('sensor.tomorrowio_day_0', 'weedIndex') }}"
Tomorrow: "{{ state_attr('sensor.tomorrowio_day_1', 'weedIndex') }}"
Today + 2: "{{ state_attr('sensor.tomorrowio_day_2', 'weedIndex') }}"
Today + 3: "{{ state_attr('sensor.tomorrowio_day_3', 'weedIndex') }}"
The code’s a bit messy and repetitive, but it works.
It needs the API url added into your secrets.yaml file (the long one with your location co-ords, time steps and API key and list of fields in it). You can add or remove from the code above based on the fields you want to scrape and use.
The fields mine uses are:
temperature,temperatureApparent,humidity,windSpeed,windGust,pressureSurfaceLevel,precipitationIntensity,precipitationProbability,precipitationType,sunriseTime,sunsetTime,visibility,cloudCover,cloudBase,cloudCeiling,moonPhase,weatherCode,grassIndex,treeIndex,weedIndex