farmos-weather
// Query weather data and forecasts for farm fields via the Agronomy module.
FarmOS Weather
Current conditions and forecasts for farm fields, sourced from the Agronomy module.
When to Use This
What this skill handles: Current weather conditions, forecasts, growing degree days (GDD), spray condition evaluation, and historical weather data for farm fields.
Trigger phrases: "what's the weather", "can we spray", "GDD for field X", "forecast", "will it rain this week?", "temperature and wind right now", "field conditions?"
What this does NOT handle: Field observations about weather damage like hail, flooding, or frost injury (use farmos-observations with weather_damage type -- that logs the damage for tracking). This skill tells you what the weather IS; observations logs what the weather DID.
Minimum viable input: "Weather" or a field reference. If no field is specified, any nearby field ID works since all 69 fields are in central Indiana.
API Base
Endpoints
Health Check
GET /api/weather/health
Returns: Weather service health status.
Current Weather
GET /api/weather/field/{field_id}/current
Returns: Current conditions for a specific field (temperature, precipitation, wind).
Forecast
GET /api/weather/field/{field_id}/forecast?days=7
Returns: Daily and hourly forecast data (up to 14 days).
Historical
GET /api/weather/field/{field_id}/historical?days=30
Returns: Historical weather records for a field.
Growing Degree Days
GET /api/weather/field/{field_id}/gdd?startDate=YYYY-MM-DD&endDate=YYYY-MM-DD&baseTemp=10
Returns: GDD accumulation for a field over a date range.
Spray Conditions
GET /api/weather/field/{field_id}/spray-conditions
Returns: Spray condition evaluation (wind, rain probability, temperature checks).
Weather by Coordinates
GET /api/weather/coordinates?latitude={lat}&longitude={lon}&type=current
Returns: Weather by coordinates (no field ID required). Use type=forecast for forecast data.
Integration Dashboard
GET /api/integration/dashboard
Returns: Agronomy summary including weather data if available.
Data Completeness
- The
/api/integration/dashboardreturns agronomy summary data — use it for a quick overview only, not as the primary weather source. - If a weather endpoint fails or returns empty, say so: "The weather service isn't responding right now." Don't guess the weather.
- For GDD queries, always include the date range in your response so the user knows the scope: "GDD from April 1 to today: 1,142."
Cross-Module Context
When answering weather questions, think about what else on the farm is affected:
Weather → Tasks:
- Before answering "can we spray?" or "should we get in the field?", check farmos-tasks for what's on the board. Connect the forecast to specific scheduled work: "Rain Thursday through Saturday — if you're planning to spray field 14, today's your window."
- When reporting the forecast, flag weather-sensitive tasks that conflict: "You've got 3 spray tasks this week but wind picks up Wednesday. Today and tomorrow are your best shot."
- GDD milestones trigger agronomic actions. When GDD data crosses key thresholds (V6 ~450 GDD, VT ~1,100 GDD, R1 ~1,400 GDD for corn), connect to tasks: "Field 12 just hit 1,100 GDD — that's your V6 marker. Side-dress window is now. Want me to create a task?"
Weather → Observations:
- After extended rain + warm temps, flag disease pressure: "We've had 3 days of rain and highs in the 80s — conditions are ripe for gray leaf spot and tar spot. Worth scouting the corn this week."
- After frost or severe weather, suggest damage checks: "First frost was last night. Might be worth checking the late-planted fields for damage."
- Connect recent weather to existing observation patterns: if there are recent disease observations, note the weather connection.
Weather → Equipment:
- If rain is coming and there are field operations scheduled, note the equipment implication: "Rain starts Thursday — anything that needs to be in the field should get there before then."
Query farmos-tasks and farmos-observations alongside weather for any field operation question. You don't need to cross-reference on every simple "what's the temperature?" question — use judgment. Cross-reference when the weather materially affects the plan.
Units — Already Imperial, Display Directly
The weather API returns all values in US imperial units. Display them as-is — no conversion needed.
| API field | Unit | Example display |
|---|---|---|
temperature_max / temperature_min | °F | "high of 55°F" |
precipitation_sum | inches | "about a quarter inch of rain" |
wind_speed_10m_max / wind_gusts_10m_max | mph | "winds up to 21 mph" |
Do not convert, do not relabel. 0.25 means 0.25 inches. 55 means 55°F. 16 means 16 mph.
Date Handling — Anchor to Today
The API returns dates as YYYY-MM-DD strings starting from today. The first entry is today, not tomorrow.
- Use your system date to label each day correctly: "Today (Feb 28)", "Tomorrow (Mar 1)", "Wednesday (Mar 2)"
- Do not assume the first forecast entry is tomorrow — it is today
- If you're unsure of today's date, say so rather than guess
Usage Notes
- Farm is located in central Indiana. If specific field weather isn't available, general local weather is fine.
- Spray conditions matter: wind speed under 10mph, no rain in forecast for 24hrs, temperature ranges.
- "Can we spray?" is a common question -- check wind, rain probability, and temperature via the spray-conditions endpoint.
- Field IDs are integers -- 69 fields across the operation. Most weather queries can use any nearby field ID since they are all in the same area.
- For coordinates-based queries without a field ID, use the /coordinates endpoint with the farm's approximate location (latitude ~40.25, longitude ~-85.67).