node-red-contrib-atmospore 0.1.0
Node-RED nodes for the Atmospore Pollen Forecast API — point forecasts, area averages, top species
node-red-contrib-atmospore
Built and maintained independently. If this saves you time, a coffee keeps it alive.
Node-RED nodes for the Atmospore Pollen Forecast API — point forecasts, area averages, and top species rankings. Trigger automations based on forecasted pollen levels.
Nodes
| Node | Description |
|---|---|
| atmospore-config | Shared API key and default coordinates |
| atmospore-pollen | Interpolated point forecast for a coordinate |
| atmospore-pollen-area | Area averages (min/max/avg) within a radius |
| atmospore-pollen-top | Top species ranked by severity over a date range |
| atmospore-species | Metadata for all 21 supported species |
Setup
1. Get an API key
Sign up at atmospore.com and copy your API key from account settings.
2. Add the config node
Add an atmospore-config node, enter your API key, and set a default latitude and longitude. Use Test API key to verify before saving.
3. Add nodes to your flow
All nodes are triggered by any input message. Override coordinates, date, or forecast window at runtime via msg properties.
Node reference
atmospore-pollen
Interpolated pollen forecast at a specific coordinate. Returns one entry per day.
Inputs
| Property | Type | Description |
|---|---|---|
payload |
any | Triggers a fetch |
lat / lon (optional) |
number | Override config node coordinates |
dt (optional) |
string | Start date YYYY-MM-DD. Defaults to today |
forecastDays (optional) |
number | Days to forecast (1–14) |
species (optional) |
string | all, tree, grass, weed, or comma-separated species |
Output — msg.payload.data[], one entry per day:
{
"date": "2026-06-28",
"overall_risk": "high",
"species": {
"pinaceae": { "value": 124.6, "risk_level": "high", "display_name": "Pine family", "category": "tree" },
"timothy": { "value": 40.8, "risk_level": "high", "display_name": "Timothy Grass", "category": "grass" },
"poa": { "value": 29.1, "risk_level": "high", "display_name": "Bluegrass", "category": "grass" },
"urtica": { "value": 31.6, "risk_level": "moderate", "display_name": "Nettle", "category": "weed" },
"birch": { "value": 0, "risk_level": "low", "display_name": "Birch", "category": "tree" }
}
}
atmospore-pollen-area
Area-average pollen levels within a configurable radius. Each species includes avg, min, max, and risk_level.
Same inputs as atmospore-pollen, plus:
| Property | Type | Description |
|---|---|---|
radius (optional) |
number | Search radius in meters (max 50 000, default 25 000) |
atmospore-pollen-top
Top contributing species over a date range, ranked by severity. Good for a daily summary node.
Output — msg.payload.data[], ranked by severity:
[
{ "species": "birch", "display_name": "Birch", "category": "tree", "avg": 98, "max": 142, "risk_level": "high" },
{ "species": "alder", "display_name": "Alder", "category": "tree", "avg": 14, "max": 22, "risk_level": "low" }
]
atmospore-species
Returns metadata for all 25 supported species — display names, multilingual names (English, Swedish, Norwegian), categories, and risk thresholds. No authentication required. Trigger once at startup and cache the result.
Example: close the windows when birch pollen is high
Wire up: inject (every morning) → atmospore-pollen → function → your smart home node
const today = msg.payload.data[0];
const birch = today?.species?.birch;
if (!birch) return null; // species not in response
if (birch.risk_level === 'high' || birch.risk_level === 'very high') {
msg.payload = { action: 'close_windows', reason: `Birch pollen: ${birch.risk_level}` };
return msg;
}
return null; // no action needed
Requirements
- Node.js 14 or later
- Node-RED 2.0 or later
- Atmospore API key
License
MIT
Support this project
Bug reports and pull requests welcome on GitHub.