Weather Open‑Meteo Skill
This skill provides current weather and simple forecasts by querying the open‑meteo.com public API. If the geocoding lookup or weather request fails, the skill can fall back to wttr.in as a lightweight alternative.
📌 Scope & Caveats
- The skill requires
curlandjq. - Location parameters are encoded before being sent to the API.
- Examples below demonstrate safe query construction using jq @uri.
✅ When to Use
✔ The user asks for weather, forecast, temperature, or rain probability for a location. ✖ Not for historical data, severe alerts, or detailed climatology.
📋 Commands
The skill accepts a single argument: a location name (city, region, or coordinates in lat,lon).
Open‑Meteo (primary, JSON)
Geocoding (co‑ordinates for a place):
curl -s "https://geocoding-api.open-meteo.com/v1/search?name=São+Paulo\u0026count=1" | jq '.results[0] | {name, latitude, longitude}'
Current weather (by co‑ordinates):
curl -s "https://api.open-meteo.com/v1/forecast?latitude=-23.55\u0026longitude=-46.63\u0026current_weather=true" | jq '.current_weather'
7‑day forecast (by co‑ordinates):
curl -s "https://api.open-meteo.com/v1/forecast?latitude=-23.55\u0026longitude=-46.63\u0026daily=temperature_2m_max,temperature_2m_min,precipitation_sum\u0026forecast_days=7" | jq '.daily'
Example JSON excerpt
{
"latitude": -23.55,
"longitude": -46.63,
"current_weather": {
"temperature": -5.3,
"windspeed": 3.9,
"winddirection": 200,
"weathercode": 80,
"time": "2024-02-18T14:00"
}
}
wttr.in (fallback)
One‑liner (HTML text):
curl -s "wttr.in/São+Paulo?format=3"
Compact plain‑text:
curl -s "wttr.in/São+Paulo?format=1"
PNG image (for terminals or embeds):
curl -s -o sp.png "http://wttr.in/São+Paulo?format=1"
📚 Example (User Query)
User: What's the weather in São Paulo? Agent:
Current conditions in São Paulo: 🌤️ +10 °C, 20% chance of rain
Tips
- URL‑encode city names:
curl -s "https://geocoding-api.open-meteo.com/v1/search?name=$(echo São Paulo | jq -sRr @uri)" - Use
jqto build the query dynamically:city="São Paulo" lat=$(curl -s "https://geocoding-api.open-meteo.com/v1/search?name=$(echo $city | jq -sRr @uri)" | jq -r '.results[0].latitude') lon=$(curl -s "https://geocoding-api.open-meteo.com/v1/search?name=$(echo $city | jq -sRr @uri)" | jq -r '.results[0].longitude') - You can pass
latitudeandlongitudedirectly if you know them. - The API is rate‑limited (≈100 requests/min). Keep scripts cached or use short intervals.