Realtime Buoy Data#

A common use for NDBC’s API is to extract weather data and use them for analysis.

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

import pybuoy

buoy = pybuoy.Buoy()

Get Meteorological Data#

realtime_meteorological_data = buoy.realtime.get(station_id="44065", dataset="txt")

Note

If you are only analyzing Meteorological data, providing dataset is optional.

realtime_meteorological_data returns an iterable instance of MeteorologicalObservations.

Observations([
    MeteorologicalObservation(
        datetime=datetime.datetime(2022, 9, 11, 17, 10),
        wind_direction=ObservationDatum(Wind Direction: nan degrees),
        wind_speed=ObservationDatum(Wind Speed: 0.0 m/s),
        wind_gust=ObservationDatum(Wind Gust: 1.0 m/s),
        wave_height=ObservationDatum(Wave Height: nan m),
        dominant_wave_period=ObservationDatum(Dominant Wave Period: nan seconds),
        average_wave_period=ObservationDatum(Average Wave Period: nan seconds),
        wave_direction=ObservationDatum(Wave Direction: nan degrees),
        sea_level_pressure=ObservationDatum(Sea Level Pressure: 1019.5 hPa),
        air_temperature=ObservationDatum(Air Temperature: nan celcius),
        water_temperature=ObservationDatum(Water Temperature: 23.0 celcius),
        dewpoint_temperature=ObservationDatum(Dewpoint Temperature: nan celcius),
        visibility=ObservationDatum(Visibility: nan nmi),
        pressure_tendency=ObservationDatum(Pressure Tendency: nan hPa),
        tide=ObservationDatum(Tide: nan ft)
    ),
    ...
    MeteorologicalObservation(
        datetime=datetime.datetime(2022, 7, 28, 0, 0),
        wind_direction=ObservationDatum(Wind Direction: 190.0 degrees),
        wind_speed=ObservationDatum(Wind Speed: 7.0 m/s),
        wind_gust=ObservationDatum(Wind Gust: 8.0 m/s),
        wave_height=ObservationDatum(Wave Height: nan m),
        dominant_wave_period=ObservationDatum(Dominant Wave Period: nan seconds),
        average_wave_period=ObservationDatum(Average Wave Period: nan seconds),
        wave_direction=ObservationDatum(Wave Direction: nan degrees),
        sea_level_pressure=ObservationDatum(Sea Level Pressure: 1011.1 hPa),
        air_temperature=ObservationDatum(Air Temperature: nan celcius),
        water_temperature=ObservationDatum(Water Temperature: nan celcius),
        dewpoint_temperature=ObservationDatum(Dewpoint Temperature: nan celcius),
        visibility=ObservationDatum(Visibility: nan nmi),
        pressure_tendency=ObservationDatum(Pressure Tendency: -0.8 hP),
        tide=ObservationDatum(Tide: nan ft)
    )
])

Note

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

Get Wave Summary Data#

realtimewave_summary_data = buoy.realtime.get(station_id="44065", dataset="spec")

realtimewave_summary_data returns an iterable instance of WaveSummaryObservations.

Observations([
    WaveSummaryObservation(
        datetime=datetime.datetime(2022, 9, 11, 16, 40),
        significant_wave_height=ObservationDatum(Significant Wave Height: 1.1 meters),
        swell_height=ObservationDatum(Swell Height: 1.1 meters),
        swell_period=ObservationDatum(Swell Period: 12.9 seconds),
        wind_wave_height=ObservationDatum(Wind Wave Height: 0.2 meters),
        wind_wave_period=ObservationDatum(Wind Wave Period: 3.1 seconds),
        swell_direction=ObservationDatum(Swell Direction: 'ESE'),
        wind_wave_direction=ObservationDatum(Wind Wave Direction: 'S'),
        steepness=ObservationDatum(Steepness: 'SWELL'),
        average_wave_period=ObservationDatum(Average Wave Period: 8.0 seconds),
        dominant_wave_direction=ObservationDatum(Dominant Wave Direction: 116.0 degrees)
    ),
    ...
    WaveSummaryObservation(
        datetime=datetime.datetime(2022, 7, 28, 0, 40),
        significant_wave_height=ObservationDatum(Significant Wave Height: 0.8 meters),
        swell_height=ObservationDatum(Swell Height: 0.6 meters),
        swell_period=ObservationDatum(Swell Period: 6.2 seconds),
        wind_wave_height=ObservationDatum(Wind Wave Height: 0.6 meters),
        wind_wave_period=ObservationDatum(Wind Wave Period: 3.0 seconds),
        swell_direction=ObservationDatum(Swell Direction: 'SSE'),
        wind_wave_direction=ObservationDatum(Wind Wave Direction: 'S'),
        steepness=ObservationDatum(Steepness: 'AVERAGE'),
        average_wave_period=ObservationDatum(Average Wave Period: 4.2 seconds),
        dominant_wave_direction=ObservationDatum(Dominant Wave Direction: 164.0 degrees)
    ),
])

Note

If no value was recorded (e.g., “Steepness: N/A”), it is set to None.