Forecast#

Forecast information is provided by NOAA’s National Digital Forecast Database.

As always, you need to begin by creating an instance of Buoy:

from pybuoy import Buoy

buoy = Buoy()

Get Forecast Data#

from datetime import datetime, timedelta

start = datetime.today().isoformat()
end = (datetime.today() + timedelta(7)).isoformat()

station_44065 = [40.369, -73.703] # lat, lon

forecast_data = buoy.forecasts.get(
    lat=station_44065[0],
    lon=station_44065[1],
    start_date=start,
    end_date=end
)

Note

start_date and end_date MUST BE a valid ISO Date string.

forecast_data returns an iterable instance of ForecastObservations.

ForecastObservations(
    reports=[
        ForecastObservation(
            datetime=datetime.datetime(2022, 12, 4, 19, 0, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400))),
            wind_direction=ObservationDatum(Wind Direction: 280.0 degrees),
            wind_speed=ObservationDatum(Wind Speed: 9.0 knots),
            wind_gust=ObservationDatum(Wind Gust: 11.0 knots),
            wave_height=ObservationDatum(Wave Height: 2.0 feet)
        ),
        ForecastObservation(
            datetime=datetime.datetime(2022, 12, 4, 22, 0, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400))),
            wind_direction=ObservationDatum(Wind Direction: 270.0 degrees),
            wind_speed=ObservationDatum(Wind Speed: 9.0 knots),
            wind_gust=ObservationDatum(Wind Gust: 12.0 knots),
            wave_height=ObservationDatum(Wave Height: 2.0 feet)
        ),
        ForecastObservation(
            datetime=datetime.datetime(2022, 12, 5, 1, 0, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400))),
            wind_direction=ObservationDatum(Wind Direction: 270.0 degrees),
            wind_speed=ObservationDatum(Wind Speed: 9.0 knots),
            wind_gust=ObservationDatum(Wind Gust: 12.0 knots),
            wave_height=ObservationDatum(Wave Height: 2.0 feet)
        ),
        ...
        ForecastObservation(
            datetime=datetime.datetime(2022, 12, 11, 7, 0, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400))),
            wind_direction=ObservationDatum(Wind Direction: 20.0 degrees),
            wind_speed=ObservationDatum(Wind Speed: 16.0 knots),
            wind_gust=ObservationDatum(Wind Gust: nan knots),
            wave_height=ObservationDatum(Wave Height: nan feet)
        ),
        ForecastObservation(
            datetime=datetime.datetime(2022, 12, 11, 13, 0, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400))),
            wind_direction=ObservationDatum(Wind Direction: 30.0 degrees),
            wind_speed=ObservationDatum(Wind Speed: 13.0 knots),
            wind_gust=ObservationDatum(Wind Gust: nan knots),
            wave_height=ObservationDatum(Wave Height: nan feet)
        ),
        ForecastObservation(
            datetime=datetime.datetime(2022, 12, 11, 19, 0, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400))),
            wind_direction=ObservationDatum(Wind Direction: 50.0 degrees),
            wind_speed=ObservationDatum(Wind Speed: 13.0 knots),
            wind_gust=ObservationDatum(Wind Gust: nan knots),
            wave_height=ObservationDatum(Wave Height: nan feet)
        )
    ],
    size=41
)

Note

If no value was recorded (e.g., “Wave Height: nan ft”), it is set to None.