National Data Buoy Centre (NOAA - NDBC) Real-Time Lake/Ocean Observations Integration

With the loss of the Magicseaweed integration in Home Assistant core due to a dependency breakage, I wanted a way to get nearby wave, wind, temperature etc observations. The most reliable source I could find for public data is the NDBC (National Data Buoy Centre) run by the NOAA.

Add this integration to HACS as a custom repository and then you can add the NDBC integration for as many nearby buoys as you would like. It will create sensors for:

  • Air Temperature
  • Water Temperature
  • Dewpoint
  • Air Pressure
  • Air Pressure Tendency
  • Visibility
  • Wave Height
  • Wave Period
  • Wave Average Period
  • Wave Direction
  • Wind Speed
  • Wind Gust Speed
  • Wind Direction
  • Tide Height

When you add the integration you will have to select a buoy for data. You can get the buoy ID from the NDBC website by browsing the map and selecting the buoy you are interested in: https://www.ndbc.noaa.gov/

You’ll find the integration at: https://github.com/djtimca/handbc

Please report any issues or challenges with it there.

Thanks!

2 Likes

Nice! I’ve been using the NOAA Tides integration, but this one looks great. Now if only NOAA could make their data more reliable, but I guess that’s out of our hands.

1 Like

I am getting the following error… is this a value mismatch on the floating value being returned from the buoy?

2023-02-28 01:17:04.007 ERROR (MainThread) [custom_components.ndbcrealtime] Unexpected error fetching NDBC NORTHWESTERN HAWAII TWO - 186 NM NW of Kauai Is., HI    data: invalid literal for int() with base 10: '7.3'
Traceback (most recent call last):
  File "/config/custom_components/ndbcrealtime/__init__.py", line 117, in _async_update_data
    observation = await ndbc.get_data()
  File "/usr/local/lib/python3.10/site-packages/ndbcrealtime/__init__.py", line 114, in get_data
    observation["waves"]["average_period"] = int(data[1]["APD"])
**ValueError: invalid literal for int() with base 10: '7.3'**

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 239, in _async_refresh
    self.data = await self._async_update_data()
  File "/config/custom_components/ndbcrealtime/__init__.py", line 123, in _async_update_data
    raise ConfigEntryNotReady from error

I have two bouys locally that configured, but when I choose new ones I now get message invalid_station_id even though the station id comes from the drop down list. I am trying to get wave data that does not come from my closest bouy…any ideas on how to fix invalid station id?