A Home Assistant custom integration that exposes 80+ outdoor environment sensors using two free, no-key Open-Meteo APIs.
Zero API key · Zero registration · Zero cost · Global coverage
| Group | Sensors | Default |
|---|---|---|
| A — Air Quality | AQI EU + US, PM2.5, PM10, NO₂, O₃, SO₂, CO, CO₂, dust, AOD, NH₃, CH₄ | ✅ |
| A-sub — EU sub-AQI | EU sub-AQI per pollutant (PM2.5, PM10, NO₂, O₃, SO₂) | ⬜ |
| A-sub-us — US sub-AQI | US sub-AQI per pollutant (PM2.5, PM10, NO₂, CO, O₃, SO₂) | ⬜ |
| A-extra — Advanced | Formaldehyde, glyoxal, NO, PAN, sea salt aerosol | ⬜ |
| B — Pollen | Grass, birch, alder, olive, ragweed, mugwort | 🌍 |
| C — UV | UV Index, UV Index Clear Sky | ✅ |
| D — Weather | Temperature, humidity, apparent temp, dew point, precipitation, wind, cloud cover, visibility, pressure, weather code | ✅ |
| D-agro — Agro | Evapotranspiration (ET0), VPD, CAPE, wet bulb temperature | ⬜ |
| E — Solar | GHI, direct, diffuse, DNI, terrestrial radiation, GTI (optional) | ✅ |
| F — Derived | Comfort index, heat index, wind chill, dominant pollutant, pollen risk, ventilation score, solar production factor, irrigation needed, frost risk, lightning risk | ⚙️ |
✅ enabled by default · ⬜ available, disabled by default · 🌍 enabled by default only for locations inside Europe, where Open-Meteo publishes pollen data · ⚙️ derived from the groups above: each sensor exists when the group it reads from is enabled, and a few are disabled by default because they are niche.
Everything is available regardless — a disabled group is one switch away in Configure.
Outdoor Environment is part of the HACS default store — no custom repository needed.
- Open HACS in Home Assistant
- Search for Outdoor Environment
- Download, then restart Home Assistant
- Go to Settings → Devices & Services → Add Integration → Outdoor Environment
Copy custom_components/outdoor_environment/ to your HA custom_components/ directory and restart.
Go to Settings → Devices & Services → Add Integration → Outdoor Environment.
Step 1 (required): Choose location and which sensor groups to enable.
Step 2 (optional): Set solar panel tilt and azimuth to unlock the GTI sensor (great for PV owners).
All settings are adjustable later via Configure (options flow), including update intervals, irrigation threshold, and advanced sensor groups.
automation:
trigger:
- platform: numeric_state
entity_id: sensor.outdoor_pollen_grass
above: 30
action:
- service: cover.close_cover
target:
entity_id: cover.living_room_blindsautomation:
trigger:
- platform: numeric_state
entity_id: sensor.outdoor_ventilation_score
above: 60
condition:
- condition: template
value_template: >
{{ state_attr('sensor.outdoor_ventilation_score', 'recommendation') == 'ventilate' }}
action:
- service: fan.turn_on
target:
entity_id: fan.hrv_unitautomation:
trigger:
- platform: state
entity_id: sensor.outdoor_irrigation_needed
to: "True"
action:
- service: switch.turn_on
target:
entity_id: switch.garden_irrigationautomation:
trigger:
- platform: template
value_template: >
{{ state_attr('sensor.outdoor_uv_index', 'protection_required') == true }}
action:
- service: notify.mobile_app
data:
message: "UV index {{ states('sensor.outdoor_uv_index') }} — apply sunscreen!"| API | Endpoint | Update interval |
|---|---|---|
| Open-Meteo Air Quality | air-quality-api.open-meteo.com |
60 min (configurable 30–360) |
| Open-Meteo Forecast | api.open-meteo.com |
15 min (configurable 10–60) |
Data licensed under CC BY 4.0 — attribution: Data provided by Open-Meteo.
python -m venv .venv && source .venv/bin/activate
pip install -r requirements_test.txt
pytest --cov=custom_components/outdoor_environment