This component adds pollen forecasts from Deutscher Wetterdienst (DWD) to Home Assistant.
The DWD provides forecasts for 27 regions in Germany. The data will be updated daily (currently at 11am) and the forecasts include the data for today and tomorrow (and the day after tomorrow on Friday).
A forecast is provided for the following grass and tree pollen:
- Alder (Erle)
- Ambrosia (Ambrosia)
- Ash (Esche)
- Birch (Birke)
- Hazel (Hasel)
- Grass (Gräser)
- Mugwort (Beifuss)
- Rye (Roggen)
This component fetches data every hour from DWD (although the data is updated only once per day).
If you like this component, please give it a star on github.
-
Ensure that HACS is installed.
-
Install DWD Pollenflug integration via HACS.
-
Add DWD Pollenflug integration to Home Assistant (one per region):
In case you would like to install manually:
-
Copy the folder
custom_components/dwd_pollenflug
tocustom_components
in your Home Assistantconfig
folder. -
Add DWD Pollenflug integration to Home Assistant (one per region):
One instance of DWD Pollenflug covers one region. If you want to get the data from multiple regions, just add multiple instance of the DWD Pollenflug integration.
This integration provides one sensor per pollen type. The sensor is named according to the pollen type.
The sensor state represents an index of the pollen count. DWD is using the following index range:
Index | Description (in German) |
---|---|
0 | keine Belastung |
0.5 | keine bis geringe Belastung |
1 | geringe Belastung |
1.5 | geringe bis mittlere Belastung |
2 | mittlere Belastung |
2.5 | mittlere bis hohe Belastung |
3 | hohe Belastung |
Each sensor provides the following attributes (not including default attributes):
Attribute | Example | Description |
---|---|---|
state_tomorrow | 1 | Forecast for tomorrow. |
state_in_2_days | 1 | Forecast for the day after tomorrow. |
state_today_desc | geringe Belastung | Human readable description of the forecast for today [in German]. |
state_tomorrow_desc | geringe Belastung | Human readable description of the forecast for tomorrow [in German]. |
state_in_2_days_desc | geringe Belastung | Human readable description of the forecast for the day after tomorrow [in German]. |
last_update | 2021-09-28T11:00:00+02:00 | Timestamp representing the last update of the data by DWD. |
next_update | 2021-09-29T11:00:00+02:00 | Timestamp representing the next update of the data by DWD. |
A minimalistic example in combination with Lovelace-Mushroom-Cards can look like this:
To configure:
- Edit your dashboard
- Add a new Mushroom-Template-Card and copy/paste:
square: true
type: grid
columns: 4
cards:
- type: custom:mushroom-template-card
entity: sensor.pollenflug_graeser_124
primary: Gras
icon: mdi:grass
layout: vertical
icon_color: |-
{% if states(config.entity) | int <= 1 %}
green
{% elif states(config.entity) | int <= 2 %}
orange
{% elif states(config.entity) | int <= 3 %}
red
{% endif %}
tap_action:
action: more-info
hold_action:
action: none
double_tap_action:
action: none
multiline_secondary: true
- type: custom:mushroom-template-card
entity: sensor.pollenflug_ambrosia_124
primary: Ambrosia
icon: mdi:flower-pollen
layout: vertical
icon_color: |-
{% if states(config.entity) | int <= 1 %}
green
{% elif states(config.entity) | int <= 2 %}
orange
{% elif states(config.entity) | int <= 3 %}
red
{% endif %}
tap_action:
action: more-info
hold_action:
action: none
double_tap_action:
action: none
multiline_secondary: true
- type: custom:mushroom-template-card
entity: sensor.pollenflug_beifuss_124
primary: Beifuss
icon: mdi:flower-pollen
layout: vertical
icon_color: |-
{% if states(config.entity) | int <= 1 %}
green
{% elif states(config.entity) | int <= 2 %}
orange
{% elif states(config.entity) | int <= 3 %}
red
{% endif %}
tap_action:
action: more-info
hold_action:
action: none
double_tap_action:
action: none
multiline_secondary: true
- type: custom:mushroom-template-card
entity: sensor.pollenflug_birke_124
primary: Birke
icon: mdi:flower-pollen
layout: vertical
icon_color: |-
{% if states(config.entity) | int <= 1 %}
green
{% elif states(config.entity) | int <= 2 %}
orange
{% elif states(config.entity) | int <= 3 %}
red
{% endif %}
tap_action:
action: more-info
hold_action:
action: none
double_tap_action:
action: none
multiline_secondary: true
- type: custom:mushroom-template-card
entity: sensor.pollenflug_erle_124
primary: Erle
icon: mdi:flower-pollen
layout: vertical
icon_color: |-
{% if states(config.entity) | int <= 1 %}
green
{% elif states(config.entity) | int <= 2 %}
orange
{% elif states(config.entity) | int <= 3 %}
red
{% endif %}
tap_action:
action: more-info
hold_action:
action: none
double_tap_action:
action: none
multiline_secondary: true
- type: custom:mushroom-template-card
entity: sensor.pollenflug_hasel_124
primary: Hasel
icon: mdi:flower-pollen
layout: vertical
icon_color: |-
{% if states(config.entity) | int <= 1 %}
green
{% elif states(config.entity) | int <= 2 %}
orange
{% elif states(config.entity) | int <= 3 %}
red
{% endif %}
tap_action:
action: more-info
hold_action:
action: none
double_tap_action:
action: none
multiline_secondary: true
- type: custom:mushroom-template-card
entity: sensor.pollenflug_esche_124
primary: Esche
icon: mdi:flower-pollen
layout: vertical
icon_color: |-
{% if states(config.entity) | int <= 1 %}
green
{% elif states(config.entity) | int <= 2 %}
orange
{% elif states(config.entity) | int <= 3 %}
red
{% endif %}
tap_action:
action: more-info
hold_action:
action: none
double_tap_action:
action: none
multiline_secondary: true
- type: custom:mushroom-template-card
entity: sensor.pollenflug_roggen_124
primary: Roggen
icon: mdi:flower-pollen
layout: vertical
icon_color: |-
{% if states(config.entity) | int <= 1 %}
green
{% elif states(config.entity) | int <= 2 %}
orange
{% elif states(config.entity) | int <= 3 %}
red
{% endif %}
tap_action:
action: more-info
hold_action:
action: none
double_tap_action:
action: none
multiline_secondary: true
You can also add the description / forecast:
Code:
square: true
type: grid
columns: 2
cards:
- type: custom:mushroom-template-card
entity: sensor.pollenflug_graeser_124
primary: Gras
secondary: >-
Today: {{ state_attr('sensor.pollenflug_graeser_124', 'state_today_desc') }}
Tomorrow: {{ state_attr('sensor.pollenflug_graeser_124', 'state_tomorrow_desc') }}
icon: mdi:grass
layout: vertical
icon_color: |-
{% if states(config.entity) | int <= 1 %}
green
{% elif states(config.entity) | int <= 2 %}
orange
{% elif states(config.entity) | int <= 3 %}
red
{% endif %}
tap_action:
action: more-info
hold_action:
action: none
double_tap_action:
action: none
multiline_secondary: true
- type: custom:mushroom-template-card
entity: sensor.pollenflug_erle_124
primary: Erle
secondary: >-
Today: {{ state_attr('sensor.pollenflug_erle_124', 'state_today_desc') }}
Tomorrow: {{ state_attr('sensor.pollenflug_erle_124', 'state_tomorrow_desc') }}
icon: mdi:flower-pollen
layout: vertical
icon_color: |-
{% if states(config.entity) | int <= 1 %}
green
{% elif states(config.entity) | int <= 2 %}
orange
{% elif states(config.entity) | int <= 3 %}
red
{% endif %}
tap_action:
action: more-info
hold_action:
action: none
double_tap_action:
action: none
multiline_secondary: true
Use of auto-entities:
Code:
type: custom:auto-entities
card:
type: grid
columns: 2
square: false
card_param: cards
filter:
include:
- name: Pollenflug*
state: '>0'
options:
type: custom:mushroom-template-card
primary: '{{state_attr(''this.entity_id'', ''friendly_name'')}}'
secondary: morgen {{state_attr('this.entity_id', 'state_tomorrow_desc')}}
icon: '{{state_attr(''this.entity_id'', ''icon'')}}'
layout: horizontal
icon_color: |-
{% if states(config.entity) | float <= 1 %}
green
{% elif states(config.entity) | float <= 2 %}
orange
{% else %}
red
{% endif %}
tap_action:
action: more-info
hold_action:
action: none
double_tap_action:
action: none
multiline_secondary: true
exclude: []
sort:
method: state
reverse: true
show_empty: false