{"id":18672546,"url":"https://github.com/jdejaegh/irm-kmi-ha","last_synced_at":"2026-01-25T18:05:44.647Z","repository":{"id":213872109,"uuid":"732728235","full_name":"jdejaegh/irm-kmi-ha","owner":"jdejaegh","description":"Home Assistant weather provider using data from Belgian IRM KMI 🇧🇪 🇱🇺 🇳🇱","archived":false,"fork":false,"pushed_at":"2025-03-08T09:52:30.000Z","size":4609,"stargazers_count":74,"open_issues_count":1,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-02T10:15:12.533Z","etag":null,"topics":["belgium","home-assistant","home-assistant-integration","luxembourg","netherlands","pollen","rain-radar","weather","weather-forecast"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jdejaegh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-17T16:35:01.000Z","updated_at":"2025-03-28T14:39:05.000Z","dependencies_parsed_at":"2023-12-23T22:24:59.999Z","dependency_job_id":"4598528c-6cf8-4ec5-8c1a-2cd7326d1d35","html_url":"https://github.com/jdejaegh/irm-kmi-ha","commit_stats":{"total_commits":205,"total_committers":2,"mean_commits":102.5,"dds":0.004878048780487809,"last_synced_commit":"09de4fbaa759a26bcc63f2923235e3fb9d4a41b2"},"previous_names":["jdejaegh/irm-kmi-ha"],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdejaegh%2Firm-kmi-ha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdejaegh%2Firm-kmi-ha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdejaegh%2Firm-kmi-ha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdejaegh%2Firm-kmi-ha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jdejaegh","download_url":"https://codeload.github.com/jdejaegh/irm-kmi-ha/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248054227,"owners_count":21039952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["belgium","home-assistant","home-assistant-integration","luxembourg","netherlands","pollen","rain-radar","weather","weather-forecast"],"created_at":"2024-11-07T09:11:55.712Z","updated_at":"2026-01-25T18:05:44.642Z","avatar_url":"https://github.com/jdejaegh.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IRM KMI Weather integration for Home Assistant\n\nHome Assistant weather provider using data from Belgian IRM KMI. \nThe data is collected via their non-public mobile application API.\n\nAlthough the provider is Belgian, the data is available for Belgium 🇧🇪, Luxembourg 🇱🇺, and The Netherlands 🇳🇱\n\n\u003e [!NOTE]  \n\u003e Starting with Home Assistant 2025.10, this integration is also available directly in Home Assistant Core. \n\u003e Only some features are available in the Home Assistant Core version, other features will be added over time.\n\n## Installing via HACS\n\n[![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=jdejaegh\u0026repository=irm-kmi-ha\u0026category=integration)\n\nor\n\n1. Go to HACS \u003e Integrations\n2. Add this repo into your [HACS custom repositories](https://hacs.xyz/docs/faq/custom_repositories/)\n3. Search for IRM KMI and download it\n4. Restart Home Assistant\n\n## Set up the integration\n\n[![Open your Home Assistant instance and start setting up a new integration.](https://my.home-assistant.io/badges/config_flow_start.svg)](https://my.home-assistant.io/redirect/config_flow_start/?domain=irm_kmi)\n\nor\n\n1. Configure the integration via the UI (search for 'IRM KMI')\n\n\n## Features\n\nThis integration provides the following things:\n\n- A weather entity with current weather conditions\n- Weather forecasts (hourly, daily and twice-daily) [using the service `weather.get_forecasts`](https://www.home-assistant.io/integrations/weather/#service-weatherget_forecasts)\n- Short-term rain forecasts using the radar data using the [custom service `ìrm_kmi.get_forecasts_radar`](#custom-service-irm_kmiget_forecasts_radar)\n- A camera entity for rain radar and short-term rain previsions\n- A binary sensor for weather warnings\n- A sensor with the timestamp for the start of the next warning\n- Sensors for active pollens\n\nThe following options are available:\n\n- Styles for the radar\n- Support for the old `forecast` attribute for components relying on this\n\n## Screenshots\n\n\u003cdetails\u003e\n\u003csummary\u003eShow screenshots\u003c/summary\u003e\n\u003cimg src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/sensors.png\"/\u003e  \u003cbr\u003e\n\u003cimg src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/forecast.png\"/\u003e  \u003cbr\u003e\n\u003cimg src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/camera_light.png\"/\u003e  \u003cbr\u003e\n\u003cimg src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/camera_dark.png\"/\u003e  \u003cbr\u003e\n\u003cimg src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/camera_sat.png\"/\u003e  \n\u003c/details\u003e\n\n## Limitations\n\n1. The weather provider sometime uses two weather conditions for the same day (see below).  When this is the case, only the first\nweather condition is taken into account in this integration.\n\u003cbr\u003e\u003cimg src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/monday.png\" height=\"150\" alt=\"Example of two weather conditions\"\u003e\n\n2. The trends for 14 days are not shown\n3. The provider only has data for Belgium, Luxembourg and The Netherlands \n\n## Mapping between IRM KMI and Home Assistant weather conditions\n\nMapping was established based on my own interpretation of the icons and conditions.\n\n| HA Condition    | HA Description                    | IRM KMI icon                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | IRM KMI data (`ww-dayNight`)                                                  |\n|-----------------|-----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|\n| clear-night     | Clear night                       | \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/0-n.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/1-n.png\" width=\"64\"/\u003e                                                                                                                                                                                                                                                                                                                                                                                                       | `0-n` `1-n`                                                                   |\n| cloudy          | Many clouds                       | \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/15-d.png\" width=\"64\"/\u003e                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | `14-d` `14-n` `15-d` `15-n`                                                   |\n| exceptional     | Exceptional                       |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |                                                                               |\n| fog             | Fog                               | \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/24-d.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/24-n.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/25-d.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/26-d.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/26-n.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/27-d.png\" width=\"64\"/\u003e | `24-d` `24-n` `25-d` `25-n` `26-d` `26-n`  `27-d` `27-n`                      |\n| hail            | Hail                              |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |                                                                               |\n| lightning       | Lightning/ thunderstorms          |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |                                                                               |\n| lightning-rainy | Lightning/ thunderstorms and rain | \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/2-d.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/2-n.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/10-d.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/10-n.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/13-d.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/13-n.png\" width=\"64\"/\u003e   | `2-d` `2-n` `5-d` `5-n` `7-d` `7-n` `10-d` `10-n` `13-d` `13-n` `17-d` `17-n` |\n| partlycloudy    | A few clouds                      | \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/3-d.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/3-n.png\" width=\"64\"/\u003e                                                                                                                                                                                                                                                                                                                                                                                                       | `3-d` `3-n`                                                                   |\n| pouring         | Pouring rain                      | \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/4-d.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/4-n.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/16-d.png\" width=\"64\"/\u003e                                                                                                                                                                                                                                                                                                      | `4-d` `4-n` `6-d` `6-n` `16-d` `16-n` `19-d` `19-n`                           |\n| rainy           | Rain                              | \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/18-d.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/21-d.png\" width=\"64\"/\u003e                                                                                                                                                                                                                                                                                                                                                                                                     | `18-d` `18-n` `21-d` `21-n`                                                   |\n| snowy           | Snow                              | \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/11-d.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/11-n.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/22-d.png\" width=\"64\"/\u003e  \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/23-d.png\" width=\"64\"/\u003e                                                                                                                                                                                                  | `11-d` `11-n` `12-d` `12-n` `22-d` `22-n` `23-d` `23-n`                       |\n| snowy-rainy     | Snow and Rain                     | \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/8-d.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/8-n.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/20-d.png\" width=\"64\"/\u003e                                                                                                                                                                                                                                                                                                      | `8-d` `8-n` `9-d` `9-n` `20-d` `20-n`                                         |\n| sunny           | Sunshine                          | \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/0-d.png\" width=\"64\"/\u003e \u003cimg height=\"64\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/1-d.png\" width=\"64\"/\u003e                                                                                                                                                                                                                                                                                                                                                                                                       | `0-d` `1-d`                                                                   |\n| windy           | Wind                              |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |                                                                               |\n| windy-variant   | Wind and clouds                   |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |                                                                               |\n\n\n## Warning details\n\nWarnings are represented with two sensors: \n - a binary sensor showing if any warning is currently active\n - a timestamp sensor with the start time of the next warning (if any, else `unknown`)\n\n### Binary sensor for ongoing warnings\n\nThe warning binary sensor is on if a warning is currently relevant (i.e. warning start time \u003c current time \u003c warning end time). \nWarnings may be issued by the IRM KMI ahead of time but the binary sensor is only on when at least one of the issued warnings is relevant.\n\nThe binary sensor has an additional attribute called `warnings`, with a list of warnings for the current location. \nWarnings in the list may be warning issued ahead of time. \n\nEach element in the list has the following attributes:\n * `slug: str`: warning slug type, can be used for automation and does not change with language setting. Example:  `ice_or_snow`\n * `id: int`: internal id for the warning type used by the IRM KMI api.  \n * `level: int`: warning severity, from 1 (lower risk) to 3 (higher risk)\n * `friendly_name: str`: language specific name for the warning type.  Examples: `Ice or snow`, `Chute de neige ou verglas`, `Sneeuw of ijzel`, `Glätte`\n * `text: str`: language specific additional information about the warning\n * `starts_at: datetime`: time at which the warning starts being relevant\n * `ends_at: datetime`: time at which the warning stops being relevant\n * `is_active: bool`: `true` if `starts_at` \u003c now \u003c `ends_at`\n\nThe following table summarizes the different known warning types.  Other warning types may be returned and will have `unknown` as slug.  Feel free to open an issue with the id and the English friendly name to have it added to this integration.\n\n| Warning slug                | Warning id | Friendly name (en, fr, nl, de)                                                           |\n|-----------------------------|------------|------------------------------------------------------------------------------------------|\n| wind                        | 0          | Wind, Vent, Wind, Wind                                                                   |\n| rain                        | 1          | Rain, Pluie, Regen, Regen                                                                |\n| ice_or_snow                 | 2          | Ice or snow, Chute de neige ou verglas, Sneeuw of ijzel, Glätte                          |\n| thunder                     | 3          | Thunder, Orage, Onweer, Gewitter                                                         |\n| fog                         | 7          | Fog, Brouillard, Mist, Nebel                                                             |\n| cold                        | 9          | Cold, Froid, Koude, Kalt                                                                 |\n| heat                        | 10         | Heat, Chaleur, Hitte, Hitze                                                              |\n| thunder_wind_rain           | 12         | Thunder Wind Rain, Orage, rafales et averses, Onweer Wind Regen, Gewitter Windböen Regen |\n| thunderstorm_strong_gusts   | 13         | Thunderstorm \u0026 strong gusts, Orage et rafales, Onweer en wind, Gewitter und Windböen     |\n| thunderstorm_large_rainfall | 14         | Thunderstorm \u0026 large rainfall, Orage et averses, Onweer en regen, Gewitter und Regen     |\n| storm_surge                 | 15         | Storm surge, Marée forte, Stormtij, Sturmflut                                            |\n| coldspell                   | 17         | Coldspell, Vague de froid, Koude, Koude                                                  |\n\nThe sensor has an attribute called `active_warnings_friendly_names`, holding a comma separated list of the friendly names\nof the currently active warnings (e.g. `Fog, Ice or snow`).  There is no particular order for the list.\n\n### Timestamp sensor for upcoming warnings\n\nThe state is the start time of the earliest next warning, if any; else `unknown`.\n\nThe sensor has two additional attributes:\n - `next_warnings`: a list of all the upcoming warnings, with the same data as the `warnings` attribute of the binary sensor (see above)\n - `next_warning_friendly_names` holding a comma separated list of the friendly names of the currently active warnings (e.g. `Fog, Ice or snow`).  There is no particular order for the list.\n\n\n## Pollen details\n\nOne sensor per pollen is created and each sensor can have one of the following values: green, yellow, orange, \nred, purple or none.\n\nThe exact meaning of each color can be found on the IRM KMI webpage: [Pollen allergy and hay fever](https://www.meteo.be/en/weather/forecasts/pollen-allergy-and-hay-fever)\n\n\u003cimg height=\"200\" src=\"https://github.com/jdejaegh/irm-kmi-ha/raw/main/img/pollens.png\" alt=\"Pollen data\"/\u003e\n\nThis data sent to the app would result in grasses have the 'purple' state. \nAll the other pollens would be 'none'.\n\nDue to a recent update in the pollen SVG format, there may have some edge cases that are not handled by the integration.\n\n## Custom service `irm_kmi.get_forecasts_radar`\n\nThe service returns a list of Forecast objects (similar to `weather.get_forecasts`) but only data about precipitation is available. \nThe data is taken from the radar forecast: it is useful for very short-term rain forecast.\n\nThe service can optionally include data from the past (like shown on the radar).\n\nHere is an example of service call:\n\n```yaml\nservice: irm_kmi.get_forecasts_radar\ntarget:\n  entity_id: weather.home\ndata:\n  include_past_forecasts: true \n```\n\nThe data is optional and defaults to `false`. \n\nEven when `include_past_forecasts` is `false`, the current 10 minutes interval is returned so the first item in the \nresponse is in the past (at most 10 minutes in the past).  This can be useful to determine if rain is currently falling \nand how strong it is.\n\n## Disclaimer\n\nThis is a personal project and isn't in any way affiliated with, sponsored or endorsed by [The Royal Meteorological \nInstitute of Belgium](https://www.meteo.be).\n\nAll product names, trademarks and registered trademarks in (the images in) this repository, are property of their \nrespective owners. All images in this repository are used by the project for identification purposes only.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdejaegh%2Firm-kmi-ha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdejaegh%2Firm-kmi-ha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdejaegh%2Firm-kmi-ha/lists"}