Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
215 commits
Select commit Hold shift + click to select a range
e51e333
Set version to 1.9.0-alpha1
eXPerience83 Dec 10, 2025
b8d97db
Fix test stubs and diagnostics for runtime data refactor
eXPerience83 Dec 10, 2025
aca99e4
Validate API key and normalize titles during setup
eXPerience83 Dec 10, 2025
0e25be5
Clamp forecast days and add regression tests
eXPerience83 Dec 11, 2025
5d2f09b
Add more forecast days clamping tests
eXPerience83 Dec 11, 2025
7929c56
Address review feedback
eXPerience83 Dec 11, 2025
c96e812
Remove redundant meta sensor overrides
eXPerience83 Dec 11, 2025
499ee8d
Use async_request_refresh for force_update service
eXPerience83 Dec 11, 2025
f972758
Refactor retry backoff handling and normalize forecast mode
eXPerience83 Dec 11, 2025
0090ff8
Use coordinator forecast flags during sensor setup
eXPerience83 Dec 11, 2025
20a6c78
Handle Retry-After header HTTP-date values
eXPerience83 Dec 11, 2025
1e1c811
Centralize pollen API timeout constant
eXPerience83 Dec 11, 2025
fd9b0cb
Handle 401 auth responses and clean unload state
eXPerience83 Dec 12, 2025
a964f4a
Handle missing source in device info
eXPerience83 Dec 13, 2025
d72e6cb
Merge pull request #48 from eXPerience83/codex/stabilize-device_info-…
eXPerience83 Dec 13, 2025
3ff400e
Switch options flow to selectors
eXPerience83 Dec 13, 2025
ece1e3b
Format and document selector flow updates
eXPerience83 Dec 13, 2025
0c87e2f
Improve HTTP referrer validation and options mapping
eXPerience83 Dec 13, 2025
150d65b
Fix referrer validation feedback and test stubs
eXPerience83 Dec 14, 2025
e47aaae
Update auth error mapping test expectations
eXPerience83 Dec 14, 2025
fab98fe
Handle section schemas in translation tests
eXPerience83 Dec 14, 2025
47e49c8
Normalize numeric option inputs
eXPerience83 Dec 14, 2025
4d65147
Handle runtime 403 without reauth
eXPerience83 Dec 14, 2025
c631f57
Pass http referer to client and update tests
eXPerience83 Dec 14, 2025
37a4bb2
Sanitize Referer header before request
eXPerience83 Dec 14, 2025
98214b1
Add error_message placeholder to English cannot_connect
eXPerience83 Dec 14, 2025
e56fcb7
Add translation strings for API links and referrer
eXPerience83 Dec 14, 2025
33491b4
Add http referrer config flow tests
eXPerience83 Dec 14, 2025
29f1511
Document referrer option and UI guidance
eXPerience83 Dec 14, 2025
0b8ae62
Fix translation section structure for hassfest
eXPerience83 Dec 14, 2025
6fee1d2
Fix translation section schema
eXPerience83 Dec 14, 2025
741ccaf
Add Referer header to config flow validation
eXPerience83 Dec 14, 2025
a81a20f
Add update interval guardrails in flows
eXPerience83 Dec 14, 2025
bebec54
Classify invalid API key 403 responses
eXPerience83 Dec 14, 2025
864bccb
Deduplicate error message extraction
eXPerience83 Dec 14, 2025
5fe7c6e
Tighten update interval validation and tests
eXPerience83 Dec 14, 2025
030d63b
Format test_config_flow with Black
eXPerience83 Dec 14, 2025
cd4ee86
Polish config and options validation guardrails
eXPerience83 Dec 15, 2025
524c6a9
Handle tolerant update interval parsing
eXPerience83 Dec 15, 2025
607a062
Localize new PR1 strings across locales
eXPerience83 Dec 15, 2025
e25c0f5
Refine HTTP message formatting and referer sanitization
eXPerience83 Dec 15, 2025
7843161
Polish translation placeholders and referer labels
eXPerience83 Dec 15, 2025
e8fc473
Cleanup invalid key fallback in 403 handler
eXPerience83 Dec 15, 2025
b3563ec
Align translation placeholders and Referer wording
eXPerience83 Dec 15, 2025
3a5b45c
chore: refresh alpha2 changelog date
eXPerience83 Dec 15, 2025
7d8a43f
Simplify referrer handling and localize translations
eXPerience83 Dec 15, 2025
6decd06
Align Referer wording across translations
eXPerience83 Dec 16, 2025
7dc37bb
Fix Italian HTTP Referer wording
eXPerience83 Dec 16, 2025
fb174bb
Fix Chinese Referer descriptions
eXPerience83 Dec 16, 2025
9de8ec3
Update changelog date and notes
eXPerience83 Dec 16, 2025
9390ee4
Normalize http referer setup handling
eXPerience83 Dec 16, 2025
a3af3d2
Update custom_components/pollenlevels/config_flow.py
eXPerience83 Dec 16, 2025
d412bc2
Improve forecast days validation errors
eXPerience83 Dec 16, 2025
8497072
Fix forecast days options test and changelog
eXPerience83 Dec 16, 2025
ccf5d06
Refactor options flow numeric validation
eXPerience83 Dec 16, 2025
4ae7717
Update README.md
eXPerience83 Dec 16, 2025
1f7ee88
Update custom_components/pollenlevels/config_flow.py
eXPerience83 Dec 16, 2025
8b14031
Refine update interval parsing
eXPerience83 Dec 16, 2025
0295403
Document linting commands
eXPerience83 Dec 16, 2025
fa04b0f
Update README.md
eXPerience83 Dec 16, 2025
85b2753
chore(translations): align HTTP Referer strings and add help link
eXPerience83 Dec 16, 2025
90ba22f
Fix README forecast sensor list indentation
eXPerience83 Dec 16, 2025
06aab9d
refactor(config_flow): use dropdown for forecast days
eXPerience83 Dec 16, 2025
9cd067f
feat(config_flow): configure forecast options on setup
eXPerience83 Dec 16, 2025
e47749a
docs(changelog): note forecast options in setup
eXPerience83 Dec 16, 2025
efb8988
fix: respect config-flow sensor mode
eXPerience83 Dec 17, 2025
1367bed
chore: centralize retries and tighten typing
eXPerience83 Dec 17, 2025
d0239d1
fix: guard aiohttp typing import
eXPerience83 Dec 17, 2025
3cd8cb2
Add files via upload
eXPerience83 Dec 17, 2025
d9aaf0c
Merge pull request #51 from eXPerience83/eXPerience83-patch-1
eXPerience83 Dec 17, 2025
e158be0
Document translation source of truth
eXPerience83 Dec 17, 2025
77bd42d
Expand contributing guidelines
eXPerience83 Dec 17, 2025
3d58a5a
Clarify per-day sensor selector options
eXPerience83 Dec 17, 2025
9c9e628
Harden pollen API client error handling
eXPerience83 Dec 17, 2025
3d5490d
Update changelog for client hardening
eXPerience83 Dec 17, 2025
c325e79
Handle stubbed aiohttp JSON parsing
eXPerience83 Dec 17, 2025
33fc502
Reject empty API keys in config flow
eXPerience83 Dec 18, 2025
243c5a6
Expand translation coverage tests
eXPerience83 Dec 18, 2025
bfc0751
Run black and ruff
eXPerience83 Dec 18, 2025
4a70412
Update changelog with formatting note
eXPerience83 Dec 18, 2025
9433820
Expand translation coverage tests for sections and services
eXPerience83 Dec 18, 2025
ba84b1f
Update changelog for translation coverage
eXPerience83 Dec 18, 2025
f5d8747
Update const.py
eXPerience83 Dec 19, 2025
5fe6d5b
Update pyproject.toml
eXPerience83 Dec 19, 2025
27d1e40
Add files via upload
eXPerience83 Dec 19, 2025
8d2af9a
Add files via upload
eXPerience83 Dec 19, 2025
434231f
Reduce debug logging noise
eXPerience83 Dec 19, 2025
7a93fb7
Update custom_components/pollenlevels/coordinator.py
eXPerience83 Dec 19, 2025
42373b6
Update test_sensor.py
eXPerience83 Dec 19, 2025
0d245a2
Update test_sensor.py
eXPerience83 Dec 19, 2025
1053d27
Update tests for coordinator module
eXPerience83 Dec 19, 2025
3ec0653
Fix registry stubs for cleanup tests
eXPerience83 Dec 19, 2025
e60f775
Merge pull request #54 from eXPerience83/codex/github-mention-extract…
eXPerience83 Dec 19, 2025
e55a400
Update coordinator.py
eXPerience83 Dec 19, 2025
85d7053
Add files via upload
eXPerience83 Dec 19, 2025
5d77ed8
Update CHANGELOG.md
eXPerience83 Dec 19, 2025
37ef926
fix(config_flow): wrap section schema to avoid nested mapping seriali…
eXPerience83 Dec 19, 2025
f137523
fix(config_flow): avoid section nested schema to prevent 500 on flow …
eXPerience83 Dec 20, 2025
2a0ccc6
style: apply Ruff fixes (py314) and Black formatting
github-actions[bot] Dec 20, 2025
0bfe823
Merge pull request #55 from eXPerience83/codex/github-mention-extract…
eXPerience83 Dec 20, 2025
00865f4
Fix changelog wrapping and duplicates
eXPerience83 Dec 20, 2025
a5cfb30
Fix config flow section and bump alpha version
eXPerience83 Dec 20, 2025
1c2cd2b
Fix selector section stub for config flow tests
eXPerience83 Dec 20, 2025
f506fe2
Collapse API key section and preserve referer
eXPerience83 Dec 20, 2025
5abf60c
Add fallback message for client errors
eXPerience83 Dec 20, 2025
4e6bd14
Ensure forecast days default is a string
eXPerience83 Dec 20, 2025
1b36bb6
Harden config flow section schema
eXPerience83 Dec 20, 2025
3632b65
Preserve empty referer defaults
eXPerience83 Dec 20, 2025
234ab95
Fix translation test mapping for name/location
eXPerience83 Dec 20, 2025
2ac220f
Handle schema key aliases in translation tests
eXPerience83 Dec 20, 2025
2683980
Fix config flow section schema
eXPerience83 Dec 20, 2025
60e4739
Update custom_components/pollenlevels/config_flow.py
eXPerience83 Dec 20, 2025
bc3b3bf
Migrate per-day sensor mode to options
eXPerience83 Dec 20, 2025
0eae347
Centralize per-day sensor mode normalization
eXPerience83 Dec 20, 2025
df917ce
Fix migration test constant reference
eXPerience83 Dec 20, 2025
b970a23
Normalize stored per-day sensor mode options
eXPerience83 Dec 20, 2025
7605b49
Version entry migration for per-day sensor mode
eXPerience83 Dec 20, 2025
2a6f9a8
Simplify mode fallback and expand migration tests
eXPerience83 Dec 20, 2025
035c1bd
Fix migration version handling
eXPerience83 Dec 20, 2025
591b704
Move API key options section near API key
eXPerience83 Dec 20, 2025
ad87252
Use current_mode fallback in options flow
eXPerience83 Dec 20, 2025
2577b95
Update changelog for migration refinements
eXPerience83 Dec 20, 2025
c610e00
Refactor migration flow
eXPerience83 Dec 20, 2025
d40d3a5
Improve migration logging and schema defaults
eXPerience83 Dec 20, 2025
85e6bf3
Handle None modes and cancellation in migration
eXPerience83 Dec 21, 2025
1bd6134
Restore http referer field in flat setup
eXPerience83 Dec 21, 2025
bb64a7c
Translate forecast guidance in setup description
eXPerience83 Dec 21, 2025
8ba53de
Harden timeout handling and mode normalization
eXPerience83 Dec 21, 2025
31d7363
Update changelog for migration robustness
eXPerience83 Dec 21, 2025
82de9d0
Harden migration fallback and mode normalization
eXPerience83 Dec 21, 2025
02a8549
Remove redundant timeout handling
eXPerience83 Dec 21, 2025
4108e23
Fix force_update refresh await
eXPerience83 Dec 21, 2025
14a6c89
Harden setup parsing and forecast handling
eXPerience83 Dec 21, 2025
d194d9a
Fix force_update stub for async_refresh
eXPerience83 Dec 22, 2025
0edd6a3
Harden numeric parsing for options
eXPerience83 Dec 22, 2025
6eedbea
Simplify migration mode selection
eXPerience83 Dec 22, 2025
9fceb66
Clamp parsed options in setup
eXPerience83 Dec 22, 2025
37b8620
Limit update interval to 24 hours
eXPerience83 Dec 22, 2025
92f3aca
Add max update interval to config flow
eXPerience83 Dec 22, 2025
822edd8
Merge pull request #58 from eXPerience83/codex/review-integration-for…
eXPerience83 Dec 22, 2025
fd18097
fix(config_flow): sanitize update_interval selector defaults
eXPerience83 Dec 22, 2025
392df17
refactor(config_flow): centralize update_interval default sanitization
eXPerience83 Dec 22, 2025
9660d2d
fix(config_flow): validate update_interval upper bound
eXPerience83 Dec 22, 2025
4d2bab1
refactor(config_flow): use MIN_UPDATE_INTERVAL_HOURS constant
eXPerience83 Dec 23, 2025
93c2eb6
refactor(config_flow): sanitize selector defaults
eXPerience83 Dec 23, 2025
254070f
fix(config_flow): sanitize SelectSelector defaults for forecast settings
eXPerience83 Dec 23, 2025
4425a95
fix(const): harden referer validation and docs
eXPerience83 Dec 23, 2025
7376206
docs(changelog): update 1.9.0-alpha4 notes
eXPerience83 Dec 23, 2025
0ec5992
Merge pull request #59 from eXPerience83/codex/sanitize-numberselecto…
eXPerience83 Dec 23, 2025
d4ff8e3
Align translation key ordering
eXPerience83 Dec 23, 2025
362b303
Remove forecast sensor mode from entry data
eXPerience83 Dec 23, 2025
7973d80
Make migration cleanup idempotent
eXPerience83 Dec 24, 2025
be97670
Update changelog for migration cleanup
eXPerience83 Dec 24, 2025
950091e
Release 1.9.0-rc1 changelog
eXPerience83 Dec 24, 2025
4b8ba25
Harden migration cleanup and zh links
eXPerience83 Dec 24, 2025
68af873
Add migration test for options mode
eXPerience83 Dec 24, 2025
7e9bb49
Update __init__.py
eXPerience83 Dec 24, 2025
8829005
Update __init__.py
eXPerience83 Dec 24, 2025
b0acf82
Update __init__.py
eXPerience83 Dec 24, 2025
91ff711
Update CHANGELOG.md
eXPerience83 Dec 24, 2025
1c5e564
Update custom_components/pollenlevels/__init__.py
eXPerience83 Dec 24, 2025
28043ca
Merge pull request #60 from eXPerience83/codex/remove-http-referer-fe…
eXPerience83 Dec 24, 2025
f10b4ef
docs(changelog): clarify http_referer removal migration
eXPerience83 Dec 24, 2025
e9b485b
Merge pull request #61 from eXPerience83/codex/harden-migration-and-n…
eXPerience83 Dec 24, 2025
7211c9e
Update changelog for diagnostics redaction fix
eXPerience83 Feb 7, 2026
d6d295f
Fix diagnostics redaction sync behavior
eXPerience83 Feb 7, 2026
bdac367
Deduplicate config flow HTTP error handling
eXPerience83 Feb 7, 2026
a62c7de
Update changelog for config flow refactor
eXPerience83 Feb 7, 2026
977f932
Align config flow version with entry migration
eXPerience83 Feb 9, 2026
2f83445
Update README to remove color_raw attribute
eXPerience83 Feb 9, 2026
d29c98f
Update changelog for README attribute change
eXPerience83 Feb 9, 2026
97fd50c
Update force_update to await async_request_refresh
eXPerience83 Feb 9, 2026
ec9df2c
Re-raise CancelledError in coordinator updates
eXPerience83 Feb 10, 2026
0636f0b
Sanitize force_update failure logging
eXPerience83 Feb 10, 2026
b5940d0
Clarify optional runtime coordinator access in diagnostics
eXPerience83 Feb 10, 2026
1ed9861
Update changelog for recent coordinator and diagnostics tweaks
eXPerience83 Feb 10, 2026
6cc8cac
Fix __init__ note to match force_update log level
eXPerience83 Feb 10, 2026
9f3ec42
Handle force_update cancellations and drop internal color_raw
eXPerience83 Feb 10, 2026
b52a762
Fix dailyInfo-missing preservation test setup
eXPerience83 Feb 10, 2026
aeae36a
Handle refresh cancellations and validate setup coordinates
eXPerience83 Feb 10, 2026
8f96109
Release version 1.9.2
eXPerience83 Feb 13, 2026
88ee1d3
Add boundary coordinate setup regression test
eXPerience83 Feb 13, 2026
d6bbc96
Optimize coordinator day-0 plant parsing and stabilize type ordering
eXPerience83 Feb 13, 2026
81b9907
Harden plant forecast matching and diagnostics day clamping
eXPerience83 Feb 13, 2026
befaca1
Harden non-finite numeric handling across flows and diagnostics
eXPerience83 Feb 13, 2026
752aed3
Refine code stability for plant codes, integer parsing, and diagnosti…
eXPerience83 Feb 13, 2026
5dffa0f
Align runtime parsing rules and optimize coordinator forecast paths
eXPerience83 Feb 13, 2026
8e7bbc9
Clarify async_redact_data sync behavior in diagnostics
eXPerience83 Feb 13, 2026
87dc783
Merge pull request #62 from eXPerience83/codex/review-potential-error…
eXPerience83 Feb 14, 2026
98441e8
Update custom_components/pollenlevels/coordinator.py
eXPerience83 Feb 14, 2026
0e40194
Update custom_components/pollenlevels/coordinator.py
eXPerience83 Feb 14, 2026
cd0316b
Update coordinator.py
eXPerience83 Feb 14, 2026
4bcd9e8
Update manifest.json
eXPerience83 Feb 14, 2026
4a55dbc
Update pyproject.toml
eXPerience83 Feb 14, 2026
ab945b5
Update CHANGELOG.md
eXPerience83 Feb 14, 2026
1bced01
Update CHANGELOG.md
eXPerience83 Feb 14, 2026
aee2113
Update coordinator.py
eXPerience83 Feb 16, 2026
0502228
Update changelog for integer parsing deduplication
eXPerience83 Feb 17, 2026
1df2375
Merge pull request #64 from eXPerience83/codex/deduplicate-safe-integ…
eXPerience83 Feb 17, 2026
fea43e5
Harden API key validation and mask config flow input
eXPerience83 Feb 17, 2026
76e3ddb
Refine API key auth message and reauth schema assertion
eXPerience83 Feb 18, 2026
20250be
Merge pull request #65 from eXPerience83/codex/harden-api-key-handlin…
eXPerience83 Feb 18, 2026
f14c925
Localize D+2 wording in non-English translations
eXPerience83 Feb 19, 2026
d386a80
Warn on invalid forecast_days and dedupe cleanup
eXPerience83 Feb 19, 2026
4edfc09
Merge pull request #66 from eXPerience83/codex/harden-setup-and-unify…
eXPerience83 Feb 19, 2026
fc5cfdc
Update CHANGELOG.md
eXPerience83 Feb 19, 2026
6a73370
Align setup validation and tighten test isolation
eXPerience83 Feb 21, 2026
7273e5c
Revert coordinate unique_id precision to legacy format
eXPerience83 Feb 21, 2026
abe9fe7
Merge pull request #67 from eXPerience83/codex/prevent-recreating-dis…
eXPerience83 Feb 21, 2026
57796fe
Update tests/test_sensor.py
eXPerience83 Feb 21, 2026
47af711
Update 1.9.3 changelog with Retry-After hardening note
eXPerience83 Feb 23, 2026
b8ceb7c
Merge pull request #69 from eXPerience83/codex/verify-pollen-data-upd…
eXPerience83 Feb 23, 2026
41890d0
Update README.md
eXPerience83 Feb 23, 2026
2f93860
Update README.md
eXPerience83 Feb 23, 2026
119f29c
Merge pull request #70 from eXPerience83/eXPerience83-patch-1
eXPerience83 Feb 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
## Style and Documentation
- All code comments, README entries, and changelog notes **must be written in English**.
- Keep imports tidy—remove unused symbols and respect the Ruff isort grouping so the Home Assistant package stays first-party under `custom_components/pollenlevels`.
- Translation source of truth is `custom_components/pollenlevels/translations/en.json`. Keep all other locale files in sync with it and do not add or rely on a `strings.json` file.

Note: When Home Assistant raises its Python floor to 3.14, this guidance will be updated; until then, treat Python 3.13 as the compatibility target for integration code.

Expand Down
240 changes: 227 additions & 13 deletions CHANGELOG.md

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Contributing

- Follow Home Assistant's current Python floor for integration code (Python 3.13). Tooling is pinned to Python 3.14, but
integration logic must stay compatible with 3.13 syntax and standard library features.
- Format code with Black (line length 88, target-version `py314`) and sort/lint imports with Ruff (`ruff check --fix --select I` followed
by `ruff check`).
- The translation source of truth is `custom_components/pollenlevels/translations/en.json`. Keep every other locale file in
sync with it.
- Do not add or rely on a `strings.json` file; translation updates should flow from `en.json` to the other language files.
- Preserve the existing coordinator-driven architecture and avoid introducing blocking I/O in the event loop.
41 changes: 34 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ Get sensors for **grass**, **tree**, **weed** pollen, plus individual plants lik
- `forecast` list with `{offset, date, has_index, value, category, description, color_*}`
- Convenience: `tomorrow_*` and `d2_*`
- Derived: `trend` and `expected_peak`
- **Per-day sensors:** remain **TYPES-only** (optional `D+1` / `D+2`).
- **Per-day sensors:** remain **TYPES-only** with selector options `none`, `D+1`,
or `D+1+2` (creates both `(D+1)` and `(D+2)` sensors).
**PLANTS** expose forecast **as attributes only** (no extra entities).
- **Smart grouping** — Organizes sensors into:
- **Pollen Types** (Grass / Tree / Weed)
Expand All @@ -37,7 +38,8 @@ Get sensors for **grass**, **tree**, **weed** pollen, plus individual plants lik
- **Configurable updates** — Change update interval, language, forecast days, and per-day sensors without reinstalling.
- **Manual refresh** — Call `pollenlevels.force_update` to trigger an immediate update and reset the timer.
- **Last Updated sensor** — Shows timestamp of last successful update.
- **Rich attributes** — Includes `inSeason`, index `description`, health `advice`, `color_hex`, `color_rgb`, `color_raw`, and plant details.
- **Rich attributes** — Includes `inSeason`, index `description`, health `advice`,
`color_hex`, `color_rgb`, and plant details.
- **Resilient startup** — Retries setup automatically when the first API response lacks daily pollen info (`dailyInfo` types/plants), ensuring entities appear once data is ready.

---
Expand All @@ -55,7 +57,7 @@ Get sensors for **grass**, **tree**, **weed** pollen, plus individual plants lik

You can change:

- **Update interval (hours)**
- **Update interval (hours)** (1–24)
- **API response language code**
- **Forecast days** (`1–5`) for pollen TYPES
- **Per-day TYPE sensors** via `create_forecast_sensors`:
Expand All @@ -67,6 +69,10 @@ You can change:
> - `D+1` requires `forecast_days ≥ 2`
> - `D+1+2` requires `forecast_days ≥ 3`

The config and options flows use modern Home Assistant selectors and include
links to Google’s API key setup and security best practices so you can follow
the recommended restrictions.

> **After saving Options:** if per-day sensors are disabled or `forecast_days` becomes insufficient, the integration **removes** any stale D+1/D+2 entities from the **Entity Registry** automatically. No manual cleanup needed.

Go to **Settings → Devices & Services → Pollen Levels → Configure**.
Expand All @@ -84,13 +90,26 @@ You need a valid Google Cloud API key with access to the **Maps Pollen API**.
4. Go to **APIs & Services → Credentials → Create credentials → API key**.
5. **Restrict your key** (recommended):
- **API restrictions** → **Restrict key** → select **Maps Pollen API** only.
- **Application restrictions** (optional but recommended):
- **HTTP referrers** (for frontend usages) or
- **IP addresses** (for server-side usage, e.g. your HA host).
6. **Copy** the key and paste it in the integration setup.
- **Application restrictions** (optional):
- Prefer **IP addresses** for server-side usage (your HA host).
- If your IP is dynamic, consider **no application restriction** and rely on
the API restriction above.
6. **Copy** the key and paste it in the integration setup.

The setup form also links directly to the Google documentation for obtaining
an API key and best-practice restrictions.

👉 See the **[FAQ](FAQ.md)** for **quota tips**, rate-limit behavior, and best practices to avoid exhausting your free tier.

HTTP referrer (website) restrictions are intended for browser-based apps and
are not supported by this integration.

### Troubleshooting 403 errors

403 responses during setup or updates now include the API’s reason (when
available). They often indicate billing is disabled, the Pollen API is not
enabled, or your key restrictions do not match your Home Assistant host.

---

## 🔧 Showing colors in the UI
Expand Down Expand Up @@ -137,6 +156,14 @@ severity:

### 🧩 Custom cards (for real dynamic color binding)

**Pollen dashboard card (recommended): pollenprognos-card**

If you want a dedicated pollen Lovelace card with forecast visualizations and a visual editor UI,
**pollenprognos-card** supports this integration since **v2.9.0**.

- Repo: [pollenprognos-card](https://github.com/krissen/pollenprognos-card)
- Install: HACS → Frontend

If you need the icon/badge to follow the **exact** API color (`color_hex`):

**Mushroom (mushroom-template-card)**
Expand Down
Loading