Skip to content
Eden Engine

Hourly History for a Personal Weather Station (PWS)

omnial/get-pws-hourly-history

Given a PWS (personal weather station) id, returns up to 7 days of hourly observations for that station: wind speed/gust, barometric pressure, precipitation rate and running total, solar radiation, and UV index, plus temperature, humidity, dewpoint, wind chill, and heat index when the station's sensors report them (they can be null for every hour), for each hour. A station id that does not resolve to any known station returns an empty result rather than an error.

activeper callv2

Price

Up to $0.0137 per call; you pay what the call used

You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $0.50.

Data source

Weather Underground

Data from Weather Underground.

Use it

Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.

Connect once and your AI can find and run this tool, and any other it needs.

agent
// 1. search: find the tool
omnial_search({ query: "what you need" })

// 2. inspect: price and input schema
omnial_inspect({ tool: "omnial/get-pws-hourly-history" })

// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "omnial/get-pws-hourly-history" })

// 4. run: price the exact call first, then run it
omnial_execute({ tool: "omnial/get-pws-hourly-history", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "omnial/get-pws-hourly-history", input: { /* ... */ } })

// 5. settle: the call is charged when it finishes, nothing to do

Not connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.

Pricing

Every charge this tool can incur.

ChargePrice
Per call
$0.0137
Updated
Oct 25, 2026

Input and output schemas

Input schema
input_schema.json
{
  "type": "object",
  "required": [
    "station_id"
  ],
  "properties": {
    "station_id": {
      "type": "string",
      "description": "PWS Station ID (e.g. ILONDO440). Obtain from search endpoint's pwsId field."
    }
  },
  "additionalProperties": false
}
Output schema
output_schema.json
{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "observations": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "tz": {
                "type": "string",
                "description": "IANA timezone name, e.g. 'Europe/London'."
              },
              "lat": {
                "type": "number",
                "description": "The station's registered latitude."
              },
              "lon": {
                "type": "number",
                "description": "The station's registered longitude."
              },
              "epoch": {
                "type": "number",
                "description": "Unix epoch seconds for the observation."
              },
              "metric": {
                "type": "object",
                "properties": {
                  "tempAvg": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "Celsius. Observed null on every hourly entry -- see tempHigh."
                  },
                  "tempLow": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "Celsius. Observed null on every hourly entry -- see tempHigh."
                  },
                  "dewptAvg": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "Celsius. Observed null on every hourly entry -- see dewptHigh."
                  },
                  "dewptLow": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "Celsius. Observed null on every hourly entry -- see dewptHigh."
                  },
                  "tempHigh": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "Celsius. Observed null on every hourly entry in the one populated call -- this station's temperature sensor appears offline/unconfigured for the captured window."
                  },
                  "dewptHigh": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "Celsius. Observed null on every hourly entry -- correlated with the offline temperature sensor, see tempHigh."
                  },
                  "precipRate": {
                    "type": "number",
                    "description": "mm/hr."
                  },
                  "precipTotal": {
                    "type": "number",
                    "description": "mm, running total for the local day at the time of this hourly entry."
                  },
                  "pressureMax": {
                    "type": "number",
                    "description": "hPa."
                  },
                  "pressureMin": {
                    "type": "number",
                    "description": "hPa."
                  },
                  "windgustAvg": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "km/h. Observed null on roughly half of the hourly entries."
                  },
                  "windgustLow": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "km/h. Observed null on roughly half of the hourly entries."
                  },
                  "heatindexAvg": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "Celsius. Observed null on every hourly entry -- see heatindexHigh."
                  },
                  "heatindexLow": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "Celsius. Observed null on every hourly entry -- see heatindexHigh."
                  },
                  "windchillAvg": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "Celsius. Observed null on every hourly entry -- see windchillHigh."
                  },
                  "windchillLow": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "Celsius. Observed null on every hourly entry -- see windchillHigh."
                  },
                  "windgustHigh": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "km/h. Observed null on roughly half of the hourly entries."
                  },
                  "windspeedAvg": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "km/h. Observed null on roughly half of the hourly entries."
                  },
                  "windspeedLow": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "km/h. Observed null on roughly half of the hourly entries."
                  },
                  "heatindexHigh": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "Celsius. Observed null on every hourly entry -- correlated with the offline temperature sensor, see tempHigh."
                  },
                  "pressureTrend": {
                    "type": "number",
                    "description": "hPa change."
                  },
                  "windchillHigh": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "Celsius. Observed null on every hourly entry -- correlated with the offline temperature sensor, see tempHigh."
                  },
                  "windspeedHigh": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "description": "km/h. Observed null on roughly half of the hourly entries."
                  }
                },
                "description": "Metric-unit measurements for the hour.",
                "additionalProperties": true
              },
              "uvHigh": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Observed null on roughly half of the hourly entries in the one populated call."
              },
              "qcStatus": {
                "type": "number",
                "description": "Quality-control flag from the vendor. Observed as 1 on every hourly entry in the one populated call."
              },
              "stationID": {
                "type": "string",
                "description": "Echoes the input station_id."
              },
              "obsTimeUtc": {
                "type": "string",
                "description": "Observation timestamp in UTC, ISO 8601, e.g. '2026-08-31T23:59:45Z'."
              },
              "winddirAvg": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Compass degrees. Observed null on roughly half of the hourly entries in the one populated call."
              },
              "humidityAvg": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Percent. Observed null on every hourly entry in the one populated call -- see humidityHigh."
              },
              "humidityLow": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Percent. Observed null on every hourly entry in the one populated call -- see humidityHigh."
              },
              "humidityHigh": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Percent. Observed null on every hourly entry in the one populated call -- this station's humidity sensor appears offline/unconfigured for the captured window."
              },
              "obsTimeLocal": {
                "type": "string",
                "description": "Observation timestamp in the station's local time, e.g. '2026-09-01 00:59:45'."
              },
              "solarRadiationHigh": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "W/m^2. Observed null on roughly half of the hourly entries in the one populated call."
              }
            },
            "additionalProperties": true
          },
          "description": "96 hourly entries on the one populated call observed (a full 7-day span reported by that particular station's cadence -- not confirmed to always be exactly 96)."
        }
      },
      "description": "Absent entirely on a station id that does not resolve (the result is `{}`).",
      "additionalProperties": true
    },
    "status": {
      "type": "string",
      "description": "'success' on the one populated call observed."
    }
  },
  "description": "The weather record.",
  "additionalProperties": true
}