NDBC Salinity Gauges

Latest buoy salinity with low / normal / high thresholds

Code
library(dplyr)
library(htmltools)
library(scales)

source("R/fetch_ndbc_observations.R")
source("R/plot_salinity_gauges.R")

ndbc_result <- fetch_ndbc_latest_readings(
  param = "sea_water_practical_salinity",
  value_col = "salinity",
  lookback_hours = 25
)

salinity_data <- ndbc_result$data |>
  arrange(station)

start_time <- ndbc_result$start_time
end_time <- ndbc_result$end_time
data_as_of <- ndbc_result$data_as_of
report_time <- format(Sys.time(), "%Y-%m-%d %H:%M %Z", tz = ndbc_display_tz)
data_as_of_label <- format_ndbc_time(data_as_of)
query_window_label <- paste(
  format_ndbc_erddap_iso(start_time),
  "to",
  format_ndbc_erddap_iso(end_time)
)
n_low <- sum(salinity_data$salinity < SALINITY_LOW_THRESHOLD, na.rm = TRUE)
n_high <- sum(salinity_data$salinity > SALINITY_HIGH_THRESHOLD, na.rm = TRUE)
n_normal <- sum(
  !is.na(salinity_data$salinity) &
    salinity_data$salinity >= SALINITY_LOW_THRESHOLD &
    salinity_data$salinity <= SALINITY_HIGH_THRESHOLD
)
n_missing <- sum(is.na(salinity_data$salinity))

Data are pulled from SECOORA ERDDAP using a 25-hour window ending at the latest available ERDDAP time (2026-07-27 05:06 EDT). Each gauge shows the latest non-missing reading for an Everglades National Park buoy.

Report generated: 2026-07-27 10:17 EDT
Latest ERDDAP data: 2026-07-27 05:06 EDT
Query window: 2026-07-26 04:06 EDT to 2026-07-27 05:06 EDT

Thresholds

Gauges use practical salinity units (PSU) on a 10–50 scale suited to Florida Bay and the Keys:

Code
htmltools::tagList(salinity_gauge_legend())
Low: < 25 PSU
Normal: 25–35 PSU
High: > 35 PSU
  • Low (`< 25 PSU): fresher conditions, stronger freshwater or runoff influence
  • Normal (25–35 PSU): typical estuarine range for the region
  • High (`> 35 PSU): more marine or hypersaline conditions

Current summary: 0 low, 4 normal, 15 high, 0 missing.

Station gauges

Code
if (all(is.na(salinity_data$salinity))) {
  stop("No salinity data returned from ERDDAP for the current time window.")
}

htmltools::tagList(plot_salinity_gauges(salinity_data))
Blackwater_Sound
Blackwater_Sound (bws)
10 25 35 50
38.7 PSU
High
2026-07-27 05:00 EDT
Bob_Allen_Key
Bob_Allen_Key (bob)
10 25 35 50
41.5 PSU
High
2026-07-27 05:00 EDT
Buoy_Key
Buoy_Key (bky)
10 25 35 50
46.3 PSU
High
2026-07-27 05:00 EDT
Butternut_Kay
Butternut_Kay (bnk)
10 25 35 50
39.5 PSU
High
2026-07-27 05:00 EDT
Duck_Key
Duck_Key (dkk)
10 25 35 50
38.2 PSU
High
2026-07-27 05:00 EDT
Garfield_Bight
Garfield_Bight (gbt)
10 25 35 50
50.7 PSU
High
2026-07-27 05:00 EDT
Highway_Creek
Highway_Creek (hce)
10 25 35 50
31.5 PSU
Normal
2026-07-27 05:00 EDT
Joe_Bay
Joe_Bay (jby)
10 25 35 50
30.8 PSU
Normal
2026-07-27 05:00 EDT
Johnson_Key
Johnson_Key (jky)
10 25 35 50
45.4 PSU
High
2026-07-27 05:00 EDT
Little_Blackwater_Sound
Little_Blackwater_Sound (lbs)
10 25 35 50
37.8 PSU
High
2026-07-27 05:00 EDT
Little_Madeira_Bay
Little_Madeira_Bay (lmd)
10 25 35 50
33.7 PSU
Normal
2026-07-27 05:00 EDT
Little_Rabbit_Key
Little_Rabbit_Key (lrk)
10 25 35 50
46.3 PSU
High
2026-07-27 05:00 EDT
Long_Sound
Long_Sound (lsn)
10 25 35 50
35.3 PSU
High
2026-07-27 05:00 EDT
Middle_Key
Middle_Key (mdk)
10 25 35 50
33.8 PSU
Normal
2026-07-27 05:00 EDT
Murray_Key
Murray_Key (muk)
10 25 35 50
41.6 PSU
High
2026-07-27 05:00 EDT
Peterson_Key
Peterson_Key (pky)
10 25 35 50
41.2 PSU
High
2026-07-27 05:00 EDT
Terrapin_Bay
Terrapin_Bay (tby)
10 25 35 50
42.2 PSU
High
2026-07-27 05:00 EDT
Thursday_Point
Thursday_Point (thr)
10 25 35 50
36.6 PSU
High
2026-07-27 05:00 EDT
Whipray_Basin
Whipray_Basin (wrb)
10 25 35 50
45.4 PSU
High
2026-07-27 05:00 EDT

Thresholds are intended for quick situational awareness across stations. They are not regulatory standards and can be adjusted in R/plot_salinity_gauges.R if monitoring goals change.