Integration for Home Assistant using the dataset “Best time series obtained from the latest available run” from the SILAM Thredds server to create a service with pollen level sensors for a specific location. The forecast calculation is carried out by the Finnish Meteorological Institute taking into account aerobiological, phenological, and meteorological observations.
Data source: https://silam.fmi.fi/pollen.html
Caution
The provided data are unverified model forecasts created for scientific use only.
Neither the quality nor completeness of the information is guaranteed, and the data producers assume no responsibility for its accuracy or timeliness.
Important
This integration was created using the ChatGPT edition for collaborative code writing, debugging, and editing.
If you hold a different ethical viewpoint, I apologize. However, I consider this use to be morally acceptable, as the integration is non-commercial, free, and open-source, and its purpose is to promote openness and collaboration.
The SILAM Pollen integration provides a service consisting of sensors that dynamically build the URL for requesting pollen data. The data are requested from the SILAM server via HTTP, then parsed and updated in Home Assistant. You can create multiple services for different locations, and you can also choose the types of pollen you need.
Note
Please note: the coverage area is limited and depends on the selected dataset.
🟦 Blue — coverage zone of SILAM Finland (v6.1) (highest detail, 0.8 km resolution).
🟩 Green — coverage zone of SILAM Northern Europe (v5.9.1) (more detailed, 2.5 km resolution).
🟨 Yellow — coverage zone of SILAM Europe (v6.1/v6.0) (more general, 10 km resolution).
To evaluate coverage and choose the appropriate dataset, use the interactive map below.
Version v0.3.2 strengthens the SMART update logic, making pollen forecasts more reliable and easier to use as the new season begins.
With SMART dataset selection, SILAM Pollen no longer relies on a fixed configuration.
Instead, it automatically chooses the most suitable pollen dataset for your location, based on actual coverage — helping ensure that the forecast you see is relevant to where you live.
In practice, this means:
- less manual setup and guesswork,
- fewer cases of misleading or irrelevant pollen data,
- smoother behaviour when datasets change between seasons.
Manual dataset selection is still available, but SMART mode is recommended for everyday use.
This release introduces support for the latest SILAM pollen v6.1 datasets, which form the basis for forecasts in the upcoming pollen seasons.
Compared to previous versions, v6.1 datasets provide:
-
updated SILAM v6.1 model outputs for the current season,
-
a refreshed European baseline (SILAM Europe pollen v6.1),
-
a new high-detail regional dataset where available.
-
SILAM Finland pollen v6.1 offers the highest spatial detail within its coverage area
🟦 Blue zone — coverage of SILAM Finland (v6.1) with up to 0.8 km resolution, especially useful for users in:- Finland
- Saint Petersburg and Northwestern Russia
- Northern & eastern Sweden (including Stockholm)
- Northeastern Norway
- Northern Estonia (including Tallinn and Narva)
When available, this dataset is automatically selected by SMART mode, with manual selection still possible in the integration options.
Warning
📉 Pollen Index sensor is now legacy and disabled by default.
It is removed automatically on update and can be re-enabled via the legacy toggle in integration options.
The full history of SILAM Pollen updates is now published on the project website:
https://danishru.github.io/silam_pollen/site/blog
Version v0.3.1 introduces a major internal improvement in how SILAM Pollen detects and updates forecast data.
The integration is now run-aware and checks the SILAM runs catalog before fetching data. This allows it to reliably determine whether a new model run is actually available, instead of blindly re-downloading the same dataset.
If the current run hasn’t changed:
- cached data is safely reused,
- full XML downloads are skipped,
- and only genuinely missing forecast hours are fetched when the forecast window moves forward.
This results in:
- significantly fewer unnecessary network requests,
- faster and more predictable updates,
- reduced load on both Home Assistant and the SILAM data infrastructure.
These changes are especially important ahead of the pollen season, ensuring timely updates while keeping the integration efficient and robust.
Release history and changelog archive ↗Ensure HACS is installed:
If HACS is not yet installed, follow the official HACS installation guide.
To install the SILAM Pollen integration, click the link below and select Download:
- Open Home Assistant and go to HACS.
- In the search bar, type
SILAM Pollenand click Download next to the integration.
Now your integration is installed and ready to use via HACS!
- Copy the
silam_pollenfolder into thecustom_componentsdirectory of your Home Assistant configuration. - Restart Home Assistant.
- Add the integration via the web interface:
- Go to Settings → Integrations.
- Click Add Integration and select SILAM Pollen.
- Fill in the required fields (name, coordinates, altitude, pollen type selection, polling interval).
Follow the setup wizard for SILAM Pollen at the link below:
Or open Settings → Integrations in Home Assistant, find SILAM Pollen, and follow the setup wizard.
Here you can set the parameters for the proper operation of the integration:
- Observation Zone – allows you to choose a configured zone in your Home Assistant. By default, the zone
"Home"is selected. - Pollen Type – select the pollen to monitor. You can leave it empty or select multiple types from the list.
- Update Interval – the interval for loading data from the SILAM Thredds server in minutes (default is 60, minimum is 30).
- Pollen Forecast (BETA) – enables an additional weather sensor with pollen level forecasts. May increase API response time.
- Desired forecast duration — the forecast horizon you’d like to retrieve (36–120 h, default 36 h).
The actual horizon may be shorter if the SILAM server currently provides fewer hours of data. - Zone Name – by default, the name from the selected zone is used. This name is applied to the service and sensor names. You can override it.
- Altitude above Sea Level – the altitude used for data sampling. If the
"Home"zone is selected, the value from the general settings (config/general) is used; otherwise, the default is 275 m. You can override it. - Location – shows the selected coordinates on the map. You can change the zone using the map or manually set the latitude, longitude, and radius. The specified radius reflects the approximate spatial resolution of the pollen data (about 10 km).
After installing the integration in Home Assistant, a service named SILAM Pollen - {Zone Name} is created. The service description shows the observation location coordinates and the dataset version used.
Within the service a weather entity called Pollen Forecast is created. Its state shows the pollen-index value for the nearest forecast, calculated from hourly mean concentrations and the threshold levels defined in Mikhail Sofiev’s table (link).
Possible index values:
very_low— Very Lowlow— Lowmoderate— Moderatehigh— Highvery_high— Very Highunknown— Unknown
- Next index (
next_condition) — expected condition from the first 3-hour window (shown only when forecasting is enabled). - Pollen (
pollen_<allergen>) — modelled numeric concentration of each selected allergen in the nearest forecast, grains/m³. - Altitude (above sea level) (
altitude) — closest available grid height used for sampling. - Forecast date/time (
date) — ISO 8601 timestamp for which the forecast is valid. - Primary allergen (
responsible_elevated) — allergen that contributed most to the index value. - Data source (
attribution) —Powered by silam.fmi.fi.
If Pollen Forecast is enabled, three additional forecast types become available:
- Hourly forecast for the next 24 h (3-hour steps).
- Twice-daily forecast across the chosen horizon (default 36 h, up to 120 h) with the index and peak values for each allergen.
- Daily forecast for the coming days (default 36 h, up to 120 h) with the index and peak values for each allergen.
Important
Important: the actual forecast horizon depends on data currently available on the SILAM Thredds server.
Even if you request up to 120 hours, the model might return a shorter span (e.g. 48 hours) depending on the latest run time.
The diagnostic sensor Forecast Horizon helps track this: it shows the real (available) horizon, while its attribute forecast_duration displays the duration you requested in the integration settings.
This data is available via the standard weather.get_forecasts service.
Show "Hourly" response example
weather.silam_pollen_home_assistant_forecast:
forecast:
- datetime: "2025-07-09T16:00:00+00:00"
condition: low
native_temperature_unit: °C
pollen_index: 2
temperature: 28.8
pollen_birch: 0
pollen_grass: 17
- datetime: "2025-07-09T19:00:00+00:00"
condition: low
native_temperature_unit: °C
pollen_index: 2
temperature: 24.7
pollen_birch: 0
pollen_grass: 13
- datetime: "2025-07-09T22:00:00+00:00"
condition: low
native_temperature_unit: °C
pollen_index: 2
temperature: 23.5
pollen_birch: 0
pollen_grass: 12
- datetime: "2025-07-10T01:00:00+00:00"
condition: moderate
native_temperature_unit: °C
pollen_index: 3
temperature: 22.8
pollen_birch: 0
pollen_grass: 27
- datetime: "2025-07-10T04:00:00+00:00"
condition: moderate
native_temperature_unit: °C
pollen_index: 3
temperature: 24.4
pollen_birch: 0
pollen_grass: 46
- datetime: "2025-07-10T07:00:00+00:00"
condition: moderate
native_temperature_unit: °C
pollen_index: 3
temperature: 29.4
pollen_birch: 0
pollen_grass: 35
- datetime: "2025-07-10T10:00:00+00:00"
condition: low
native_temperature_unit: °C
pollen_index: 2
temperature: 33.4
pollen_birch: 0
pollen_grass: 19
- datetime: "2025-07-10T13:00:00+00:00"
condition: low
native_temperature_unit: °C
pollen_index: 2
temperature: 33.4
pollen_birch: 0
pollen_grass: 12Show "Twice-daily" response example
weather.silam_pollen_home_assistant_forecast:
forecast:
- datetime: "2025-07-09T21:00:00+00:00"
is_daytime: false
condition: low
pollen_index: 2
temperature: 28.8
allergen_peaks:
grass:
peak: 27
time: "2025-07-10T02:00:00+00:00"
pollen_birch: 0
pollen_grass: 13
templow: 22.5
- datetime: "2025-07-10T09:00:00+00:00"
is_daytime: true
condition: moderate
pollen_index: 3
temperature: 33.4
allergen_peaks:
grass:
peak: 46
time: "2025-07-10T05:00:00+00:00"
pollen_birch: 0
pollen_grass: 35
templow: 22.6
- datetime: "2025-07-10T21:00:00+00:00"
is_daytime: false
condition: low
pollen_index: 2
temperature: 32.9
allergen_peaks:
grass:
peak: 21
time: "2025-07-10T19:00:00+00:00"
pollen_birch: 0
pollen_grass: 14
templow: 23
- datetime: "2025-07-11T09:00:00+00:00"
is_daytime: true
condition: low
pollen_index: 2
temperature: 35.2
allergen_peaks:
grass:
peak: 20
time: "2025-07-11T08:00:00+00:00"
pollen_birch: 0
pollen_grass: 16
templow: 23.3
- datetime: "2025-07-11T21:00:00+00:00"
is_daytime: false
condition: low
pollen_index: 2
temperature: 35.1
allergen_peaks:
grass:
peak: 22
time: "2025-07-11T19:00:00+00:00"
pollen_birch: 0
pollen_grass: 15
templow: 23.3
- datetime: "2025-07-12T09:00:00+00:00"
is_daytime: true
condition: low
pollen_index: 2
temperature: 35.1
allergen_peaks:
grass:
peak: 16
time: "2025-07-12T06:00:00+00:00"
pollen_birch: 0
pollen_grass: 14
templow: 23.3
- datetime: "2025-07-12T21:00:00+00:00"
is_daytime: false
condition: low
pollen_index: 2
temperature: 34.8
allergen_peaks:
grass:
peak: 16
time: "2025-07-12T20:00:00+00:00"
pollen_birch: 0
pollen_grass: 15
templow: 24
- datetime: "2025-07-13T09:00:00+00:00"
is_daytime: true
condition: low
pollen_index: 2
temperature: 31.9
allergen_peaks:
grass:
peak: 19
time: "2025-07-13T09:00:00+00:00"
pollen_birch: 0
pollen_grass: 14
templow: 23.7
- datetime: "2025-07-13T21:00:00+00:00"
is_daytime: false
condition: low
pollen_index: 2
temperature: 29
allergen_peaks:
grass:
peak: 14
time: "2025-07-13T18:00:00+00:00"
pollen_birch: 0
pollen_grass: 14
templow: 21.5Show "Daily" response example
weather.silam_pollen_home_assistant_forecast:
forecast:
- datetime: "2025-07-10T09:00:00+00:00"
condition: moderate
pollen_index: 3
temperature: 33.4
allergen_peaks:
grass:
peak: 46
time: "2025-07-10T05:00:00+00:00"
pollen_birch: 0
pollen_grass: 34
templow: 22.5
- datetime: "2025-07-11T09:00:00+00:00"
condition: low
pollen_index: 2
temperature: 35.2
allergen_peaks:
grass:
peak: 22
time: "2025-07-11T19:00:00+00:00"
pollen_birch: 0
pollen_grass: 18
templow: 23
- datetime: "2025-07-12T09:00:00+00:00"
condition: low
pollen_index: 2
temperature: 35.1
allergen_peaks:
grass:
peak: 16
time: "2025-07-12T06:00:00+00:00"
pollen_birch: 0
pollen_grass: 15
templow: 23.3
- datetime: "2025-07-13T09:00:00+00:00"
condition: low
pollen_index: 2
temperature: 31.9
allergen_peaks:
grass:
peak: 19
time: "2025-07-13T09:00:00+00:00"
pollen_birch: 0
pollen_grass: 14
templow: 21.5In SILAM Pollen, SILAM‐model XML responses are parsed, merged by the date field, and then aggregated into three forecast types:
- Built in 3-hour steps.
- For each 3-hour window we compute:
- Maximum temperature.
- Pollen index — the maximum value (captures the true peak).
- Maximum value for every selected allergen.
- The forecast timestamp is the midpoint of the 3-hour window (local time).
- Uses “today + 24 h” as the time span.
- Two windows per day: 06:00–18:00 and 18:00–06:00 local time.
- For each 12-hour window we calculate:
- Maximum and minimum temperature.
- Pollen index and allergen levels, smoothed by an observational percentile:
- ≥ 18 points → 80th percentile
- 12 – 17 points → 70th percentile
- < 12 points → maximum
- No interpolation is used — the actual value at the percentile (ceil-index) is taken.
- Allergen peaks (
allergen_peaks) — the maximum concentration and the time it occurs within the window.
- Forecast timestamps are placed at 00:00 and 12:00 local time.
- 24-hour windows starting "tomorrow."
- For each day we compute:
- Maximum and minimum temperature.
- Pollen index and allergen levels using the same observational-percentile method.
- Allergen peaks for the day.
- Forecast timestamp is 12:00 local time.
- SILAM XML is parsed and merged by
date. - Aggregations use
max,min, and a custom observational percentile function (ceil-index, no interpolation). - All forecasts are cached in
merged_dataand served viaweather.get_forecasts.
If one or more pollen types are selected, a separate {Pollen Type} sensor is created for each, displaying the modeled pollen grain concentration (grains/m³).
Attributes of the "{Pollen Type}" sensors:
- Altitude (sea level) — the nearest available altitude used for data sampling.
- Forecast for Tomorrow — the aggregated pollen level forecast value for the next day (shown if the forecast is enabled).
Attributes of the "Pollen Index" sensor:
- Forecast Date & Time — the timestamp for which the index is calculated (ISO 8601).
- Primary Allergen — the allergen that had the greatest impact on the index calculation.
- Forecast for Tomorrow — the daily pollen level forecast for the next day (shown if the forecast is enabled).
Fetch duration (fetch_duration) — a sensor (disabled by default) that shows the total time spent refreshing the data (API call, parsing, calculations).
Forecast horizon (forecast_horizon) — a sensor (disabled by default) that displays the actual forecast span in hours (the gap between the “now” timestamp and the last forecast point).
Its attribute forecast_duration reveals the requested forecast length in hours, as set in the integration options.
Starting from v0.3.0, SILAM Pollen includes a built-in Lovelace card —
Absolute Forecast Card (local build), developed as part of the project.
The card provides a compact, at-a-glance view of weather and pollen in a single dashboard element.
Key features:
- Dedicated allergen layer with SILAM pollen concentrations (core feature)
- Individual forecast lines for each allergen with peak highlighting and trend indicators
- Integrated pollen + full weather forecast in a single, unified timeline
- Multiple forecast display modes (Standard / Focus / Minimal) with configurable layouts
- Fully interactive: tap / hold / double actions on forecast elements
- Local, self-contained card — no CDN, works fully offline
Important
To use the built-in card, add the JavaScript module manually:
Settings → Dashboards → Resources → Add → URL: /local/absolute-forecast-card.js → Resource type: JavaScript Module.
➡️ Detailed overview, screenshots, and change log:
SILAM Pollen v0.3.0 Release Notes
https://github.com/danishru/silam_pollen/releases/tag/v0.3.0
SILAM Pollen entities can also be used with community dashboard cards.
One such option is pollenprognos-card, which supports SILAM Pollen entities and is available via HACS.
- Repository: https://github.com/krissen/pollenprognos-card
To install, click Download in the card’s menu:
Huge thanks to @krissen for supporting SILAM Pollen!
For more detailed information on pollen and its distribution zones, we recommend the following projects:
- SILAM Pollen (FMI)
https://silam.fmi.fi/pollen.html
Official source of pollen forecasts from the Finnish Meteorological Institute. Provides 5-day pollen distribution forecasts for Europe and Northern Europe (birch, grasses, olive, ragweed) in cooperation with the European Allergy Network (EAN).
Below are key papers detailing the main modules and validation of the SILAM pollen dispersion model, ordered by publication date:
-
A numerical model of birch pollen emission and dispersion in the atmosphere. Description of the emission module (Mikhail Sofiev et al., 2012)
Detailed description of the SILAM birch pollen emission module. Published 13 March 2012.
https://link.springer.com/article/10.1007/s00484-012-0532-z -
Variation of the group 5 grass pollen allergen content of airborne pollen in relation to geographic location and time in season (Jeroen Buters et al., 2015)
Study of seasonal and geographic variability in group 5 grass pollen allergen content. Published online 6 May 2015.
https://www.jacionline.org/article/S0091-6749(15)00412-1/fulltext -
On impact of transport conditions on variability of the seasonal pollen index (Mikhail Sofiev, 2016)
Investigation of how atmospheric transport affects seasonal pollen index variability. Published 24 October 2016.
https://link.springer.com/article/10.1007/s10453-016-9459-x -
Bioaerosols in the atmosphere at two sites in Northern Europe in spring 2021: Outline of an experimental campaign (Mikhail Sofiev et al., 2022)
Overview of an experimental campaign studying bioaerosols at two sites in Northern Europe in spring 2021. Published 7 July 2022.
https://www.sciencedirect.com/science/article/pii/S0013935122011252 -
European pollen reanalysis, 1980–2022, for alder, birch, and olive (Mikhail Sofiev et al., 2024)
A reanalysis of European pollen data for alder, birch, and olive from 1980 to 2022. Published 3 October 2024.
https://www.nature.com/articles/s41597-024-03686-2
Thanks to all the people who have contributed!
If you have questions or issues, create an issue in the repository.