External data¶
Neptoon can attach external data that are needed for CRNS processing and diagnostics. The most common sources are:
- NMDB.eu neutron-monitor data for incoming-radiation corrections.
- DWD weather-station data for pressure, temperature, relative humidity, precipitation and solar-radiation context in Germany.
external_meteoproviders for ordered public meteorological fallback data, including DWD.remote_sensingproducts for gridded Earth-observation reference series such as vegetation indices, biomass and land cover. See remote-sensing reference data.
External data are attached before the main correction and soil-moisture workflow uses the required columns. Local sensor columns remain the preferred source unless a provider is configured to overwrite them.
NMDB neutron-monitor data¶
The NMDB.eu database collates high-energy neutron-monitor measurements from stations around the world. Neptoon can download these data directly and use them for incoming-radiation correction.
Standalone NMDB downloader¶
from neptoon import NMDBDataDownloader
df = NMDBDataDownloader.download(
"JUNG",
"2022-01-01",
"2022-01-10",
"10Min",
)
The downloader returns a UTC-indexed pandas DataFrame with a count column. It reuses Neptoon's NMDB cache by default; pass use_cache=False for a fresh request or cache_dir=... to choose the cache location. Integer minute resolutions and pandas-compatible intervals such as "10Min" or "1h" are accepted. When no explicit cache is supplied, NEPTOON_CACHE_DIR can override the platform cache location. An explicitly configured override must be writable; Neptoon surfaces an error rather than silently using a different cache. If no override is set and the normal platform cache is unavailable or read-only, Neptoon logs a warning and falls back to <system-temp>/neptoon/cache; cache data may therefore be ephemeral in locked-down containers.
The existing neptoon.external.fetch_nmdb_data(...) function remains available as a cache-free compatibility API.
The same downloader is available from the command line:
neptoon nmdb download \
--station JUNG \
--start-date 2022-01-01 \
--end-date 2022-01-10 \
--resolution 10min \
--cache-dir ./cache/nmdb \
--output nmdb_jung.csv
The CLI caches downloads by default. Use --no-cache to force a fresh,
cache-free request. --resolution accepts whole-minute values either as a
number of minutes or as a pandas-compatible duration, including 1, 10,
10min, 60min, 1h, and 1d. Sub-minute intervals are rejected because
NMDB requests are minute based. Use --no-cache-fallback when a failed refresh
must not return already cached observations.
To list built-in reference stations:
Attach NMDB data in Python¶
Common station codes include AATB, INVK, JUNG, KERG, KIEL, MXCO, NEWK, OULU, PSNM, SOPO, TERA, and THUL. Use the revised original table revori unless you have a reason to use another NMDB table.
Meteorological source order¶
Meteorological inputs such as pressure, air temperature and relative humidity can be provided by local columns, DWD, or ordered external_meteo fallback providers. Generic providers are applied in YAML order while preserving local values by default. The legacy dedicated dwd block is a separate post-alignment step; provider: dwd instead makes DWD participate directly in the generic provider order.
By default, DWD and external_meteo fill missing local values only. Set prefer_dwd_values: true or prefer_external_values: true only when provider values should overwrite local measurements where both are available.
Interpolation is separate from external filling
Provider attachment fills or adds values from the provider. The later missing_value_interpolation step is a separate sensor-config option. Keep this distinction clear when diagnosing gaps: provider values explain source provenance, interpolation explains synthetic gap filling.
DWD weather data¶
DWD support is intended for German stations and nearby sites where DWD observations are appropriate. It can fill missing pressure, temperature and relative humidity and can attach precipitation or solar-radiation columns for diagnostics and report plots.
DWD from column markers¶
A convenient way to request DWD filling is to use the special marker DWD in the meteorological column lists. This enables the DWD configuration automatically for the requested variables.
time_series_data:
key_column_info:
pressure_columns: [DWD]
temperature_columns: [DWD]
relative_humidity_columns: [DWD]
You can still add a dwd block to control station selection, cache and overwrite behaviour:
dwd:
enabled: true
station: nearest
max_distance_km: 100
request_timeout: 30
cache_dir: ./cache/dwd
use_cache: true
max_nearest_timedelta: 1h
fill_pressure: true
fill_temperature: true
fill_relative_humidity: true
include_precipitation: false
include_solar_radiation: false
precipitation_daily_fallback: true
precipitation_product: auto
prefer_dwd_values: false
required: false
station: nearest selects the nearest DWD station that can provide the requested product. Use an explicit DWD station id when you need exact reproducibility or a manually reviewed station choice.
DWD through the generic provider path¶
DWD can alternatively participate in the normal ordered provider chain. This is useful when Germany-specific station data should be tried at a particular position among other fallbacks rather than in the separate post-alignment DWD step. The generic route delegates to the same DWD CDC implementation.
external_meteo:
- enabled: true
provider: dwd
station: nearest
product: hourly
max_distance_km: 100
fill_pressure: true
fill_temperature: true
fill_relative_humidity: true
include_precipitation: true
include_solar_radiation: false
prefer_external_values: false
required: false
options:
dwd_request_retries: 3
dwd_precipitation_daily_fallback: true
dwd_precipitation_product: null
prefer_external_values is the generic equivalent of
prefer_dwd_values. The DWD-specific options are optional; omitting them
uses the same safe defaults as the dedicated integration. Do not enable the
same DWD source in both paths unless that duplication is deliberate.
DWD configuration reference¶
| Option | Default | Description |
|---|---|---|
enabled |
false |
Enables DWD attachment. This can also be turned on automatically by DWD column markers. |
station |
nearest |
DWD station id or nearest. Numeric ids are normalised to five digits. |
max_distance_km |
null |
Optional maximum nearest-station distance. If no station is within the limit, the provider cannot fill data. |
request_timeout |
30 |
HTTPS timeout in seconds. |
cache_dir |
null |
Optional cache directory for downloaded DWD products. Relative YAML paths resolve relative to the config file. |
use_cache |
true |
Reuse downloaded DWD products when possible and write new downloads to cache. |
max_nearest_timedelta |
1h |
Maximum time offset allowed when aligning provider values to CRNS timestamps. Use a pandas-compatible timedelta string. |
fill_pressure |
true |
Fill missing air_pressure values from DWD pressure data. |
fill_temperature |
true |
Fill missing air_temperature values from DWD temperature data. |
fill_relative_humidity |
true |
Fill missing air_relative_humidity values from DWD humidity data. |
include_precipitation |
false |
Attach DWD precipitation as an additional weather/report column. |
include_solar_radiation |
false |
Attach DWD solar/global-radiation data as an additional weather/report column. |
precipitation_daily_fallback |
true |
Fall back to daily precipitation products when hourly precipitation cannot be downloaded or parsed. |
dwd.precipitation_product / precipitation_product |
auto |
Manual precipitation product. Supported values are auto, hourly, hourly_rr, daily, daily_rr, daily_more_precip, and daily_kl. |
prefer_dwd_values |
false |
If true, DWD overwrites local values where DWD values exist. If false, DWD only fills local gaps. |
required |
false |
If true, DWD download/parse/attachment failures abort the pipeline. If false, processing continues where possible. |
DWD station lookup CLI¶
Use the station lookup before writing a production config:
neptoon dwd-stations --lat 51.369597 --lon 12.557120 \
--variables pressure,temperature,relative_humidity \
--max-distance-km 100 \
--limit 10
Write the full table to CSV when you want to review candidates:
neptoon dwd-stations --lat 51.369597 --lon 12.557120 \
--variables pressure,temperature \
--output dwd_station_candidates.csv
Supported --variables names include pressure, temperature, relative humidity, precipitation and solar radiation. Run neptoon dwd-stations --help to see the exact names supported by your installed version.
DWD provenance columns¶
When DWD data are attached, Neptoon also keeps provenance information where available. Typical columns include station identifiers, station names, distances and source-product labels, for example:
dwd_station_id
dwd_station_name
dwd_station_distance_km
dwd_pressure_source_product
dwd_pressure_source_column
dwd_temperature_source_product
dwd_temperature_source_column
dwd_relative_humidity_source_product
dwd_relative_humidity_source_column
dwd_precipitation_station_id
dwd_precipitation_station_name
dwd_precipitation_station_distance_km
Exact provenance columns depend on the requested variables and available DWD products. The meteorological source columns also record when a provider filled a value, for example dwd:<product-label>.
external_meteo providers¶
For a compact comparison of every included meteorological provider, country/coverage, credentials, selection mode, and canonical variable support, see the Meteorological provider overview.
Use external_meteo for ordered public meteorological data, including DWD when desired. Multiple providers can be listed; they are applied in YAML order. This makes it possible to prefer a local national provider first and then fall back to a global gridded provider.
external_meteo:
- enabled: true
provider: open_meteo
station: nearest
product: hourly
max_distance_km: null
request_timeout: 30
cache_dir: ./cache/open_meteo
use_cache: true
max_nearest_timedelta: 1h
fill_pressure: true
fill_temperature: true
fill_relative_humidity: true
include_precipitation: true
include_solar_radiation: false
include_wind_speed: false
include_reference_et0: false
prefer_external_values: false
required: false
- enabled: true
provider: meteostat
station: nearest
product: hourly
max_distance_km: 100
fill_temperature: true
fill_relative_humidity: true
include_precipitation: true
Provider names and products¶
Supported canonical provider names are:
| Provider | Supported product | Typical use | Notes |
|---|---|---|---|
open_meteo |
hourly |
Global gridded archive fallback. | Token-free Open-Meteo archive adapter. |
era5_open_meteo |
hourly |
ERA5 via Open-Meteo. | Alias era5. |
era5_land_open_meteo |
hourly |
ERA5-Land via Open-Meteo. | Alias era5_land. |
nasa_power |
hourly |
NASA POWER global gridded point meteorology. | Token-free; requests UTC hourly data directly from POWER. |
meteostat |
hourly |
Global station data. | No true GHI product in this adapter. |
noaa_isd |
hourly |
NOAA Integrated Surface Database. | Good station fallback for pressure/temperature/humidity/precipitation where available. |
noaa_ghcn_daily |
daily |
NOAA GHCN-Daily. | Daily only; broad coverage for precipitation/temperature. |
noaa_uscrn |
hourly or daily |
NOAA US Climate Reference Network. | High-quality US reference stations. |
noaa_nws |
hourly |
NOAA/NWS api.weather.gov surface observations. |
Token-free; requires an identifying User-Agent. Current surface-observation coverage is primarily CONUS. |
inmet |
hourly |
Brazilian INMET automatic SYNOP stations. | Token-free WIS2/OGC API with WIGOS station metadata. |
jma_amedas |
hourly |
Japan JMA AMeDAS recent observations. | Token-free public web feed with limited remote retention; local JSON is supported for pinned/older runs. |
eobs |
daily |
E-OBS European gridded data. | Local E-OBS files are required by the config validator. |
aemet |
daily |
AEMET OpenData climatological station observations for Spain. | Requires an AEMET API key; supports explicit or nearest station selection. |
meteoswiss |
hourly |
Swiss station/open-data files. | Uses local files or configured open-data URL/STAC collection. |
knmi |
hourly or daily |
Dutch station observations. | Uses local files or KNMI Data Platform settings. |
meteo_france |
hourly or daily |
Météo-France/DPClim. | Local files or configured API; nearest station benefits from a station catalog. |
chmi |
hourly or daily |
Czech Hydrometeorological Institute (ČHMÚ/CHMI) station observations. | Token-free CHMI climate Open Data; nearest-station selection uses WIGOS station metadata. |
arso |
hourly or daily |
Slovenian Environment Agency (ARSO / meteo.si) automatic-station observations. | Token-free public XML; nearest-station selection uses ARSO station coordinates. The public per-station history is a rolling recent window. |
rmi_belgium |
hourly |
Belgian RMI/KMI automatic weather stations. | Public token-free WFS; aliases: kmi_be, rmi, irm. |
vmm_waterinfo |
hourly |
Flemish VMM meteorological stations. | Anonymous KIWIS access for pressure, temperature, relative humidity and precipitation; aliases: vmm, waterinfo, waterinfo_be. |
met_office_datahub |
hourly |
UK Met Office Weather DataHub. | Local files or API key + API URL. No true solar-radiation product in this adapter. |
fmi |
hourly |
Finnish Meteorological Institute. | Token-free URL/file/WFS adapter. |
smhi |
hourly |
Swedish Meteorological and Hydrological Institute observations. | Token-free metobs API with nearest-station selection across requested variables; aliases include smhi_open_data. |
imgw |
hourly |
Polish IMGW-PIB synoptic observations. | Token-free public synop API; pressure, temperature, RH and wind are mapped. Local snapshots support reproducible runs. |
met_eireann |
hourly |
Met Éireann Open Data. | Token-free 60-minute OGC EDR/CoverageJSON observations with nearest-station selection. |
ipma |
hourly |
Portugal IPMA Open Data. | Token-free latest-24-hour station observations with station: nearest; aliases include ipma_open_data. |
eccc_geomet |
hourly |
Environment and Climate Change Canada GeoMet. | Token-free OGC API/file adapter. |
bom |
hourly |
Australian Bureau of Meteorology. | station: nearest uses the national station catalog and public rolling 72-hour JSON observations; explicit URL/files remain available for archives. |
geosphere_austria |
hourly |
GeoSphere Austria quality-checked station data. | Token-free klima-v2-1h API with nearest-station selection; aliases include geosphere, geosphere_at and zamg. |
frost |
hourly |
MET Norway Frost observations. | Nearest-station historical observations; requires a Frost client id for API access. Aliases include met_norway and metno_frost. |
dmi |
hourly |
Danish Meteorological Institute Open Data. | Token-free Meteorological Observation API with nearest-station selection; alias dmi_open_data. |
dwd |
hourly |
German DWD Climate Data Center station observations. | Token-free; reuses the dedicated DWD CDC implementation and supports nearest-station selection. |
Provider aliases such as openmeteo, era5, power, nasa_power_hourly, aemet_open_data, ghcn, ghcnd, uscrn, nws, weather_gov, brazil_inmet, amedas, jma, meteofrance, kmi_be, rmi, irm, vmm, waterinfo, waterinfo_be, metoffice, swissmetnet, eccc, smhi_open_data, imgw_pib, met_eireann_open_data, ipma_open_data, portugal_ipma, bureau_of_meteorology, geosphere, zamg, met_norway, metno_frost, dmi_open_data, dwd_open_data, deutscher_wetterdienst, chmu, čhmú, meteosi, meteo.si and meteo_si are normalised internally, but canonical names are recommended in shared configs.
product: auto chooses the provider default: daily for aemet, eobs and noaa_ghcn_daily, otherwise hourly. Only knmi, meteo_france, noaa_uscrn, chmi and arso support both hourly and daily in the current adapter registry.
Common external_meteo configuration reference¶
| Option | Default | Description |
|---|---|---|
enabled |
false |
Enables this provider block. Disabled entries can remain in template configs. |
external_meteo.provider / provider |
meteostat |
Canonical provider name or supported alias. |
station |
nearest |
Provider station id or nearest. Gridded providers use the CRNS coordinates. |
product |
auto |
auto, hourly or daily, subject to provider support. |
max_distance_km |
null |
Optional maximum nearest-station distance. |
request_timeout |
30 |
HTTPS timeout in seconds. |
cache_dir |
null |
Optional cache directory for downloaded catalogs and data files. Relative YAML paths resolve relative to the config file. |
use_cache |
true |
Reuse downloaded provider files when possible and write new downloads to cache. |
max_nearest_timedelta |
1h |
Maximum time offset allowed when aligning provider values to CRNS timestamps. Daily providers often need a wider value such as 12h. |
fill_pressure |
false |
Fill missing air_pressure values from this provider when available. |
fill_temperature |
false |
Fill missing air_temperature values from this provider when available. |
fill_relative_humidity |
false |
Fill missing air_relative_humidity values from this provider when available. |
include_precipitation |
true |
Attach/fill precipitation from this provider. |
include_solar_radiation |
false |
Attach global-radiation/solar-radiation where the provider product exposes it. |
include_wind_speed |
false |
Attach canonical wind speed in m/s. Available through NASA POWER, Open-Meteo/ERA5, AEMET, NOAA/NWS, INMET, JMA AMeDAS, BoM, GeoSphere Austria, Frost, DMI, CHMI, ARSO, SMHI, IMGW and Met Éireann; unsupported providers skip it unless required: true. |
include_reference_et0 |
false |
Attach hourly FAO-56 reference ET0 amounts in mm. Available through Open-Meteo archive adapters and usable as the direct reference-ET input of the soil-profile model. |
temporal_semantics |
{} |
Advanced per-variable override of provider time semantics (state, interval_total, or interval_mean, plus duration and label). Built-in provider fields already use provider-specific defaults; override only custom/local extracts whose timestamp contract differs. |
prefer_external_values |
false |
If true, this provider overwrites local/DWD values where provider data exist. If false, it only fills gaps. |
required |
false |
If true, provider failures abort the pipeline. If false, processing continues where possible. |
station_candidate_limit |
25 |
Number of nearest station candidates to try before giving up. Applies to providers with station catalogs. |
Temporal semantics and accumulated weather values¶
Neptoon distinguishes point/state observations from values which represent a time interval. This distinction is important for precipitation and reference ET0: copying a one-hour total onto four 15-minute rows would multiply the later water balance, while selecting one hourly value for a three-hour target grid would lose water. Interval totals are therefore rebinned by exact time overlap, so the amount is conserved when changing resolution in either direction. Interval means such as hourly mean radiation use overlap-duration weighting instead.
The normal user does not need to configure this. Provider adapters attach their native contract before Neptoon aligns the data. Important built-in defaults include:
| Provider/source | Built-in temporal treatment |
|---|---|
Open-Meteo / ERA5 precipitation, et0_fao_evapotranspiration |
one-hour total ending at the provider timestamp |
Open-Meteo / ERA5 shortwave_radiation |
one-hour mean ending at the provider timestamp |
| NASA POWER hourly precipitation | one-hour total starting at the UTC provider timestamp |
| NASA POWER pressure, temperature, RH, solar radiation and wind | one-hour mean starting at the UTC provider timestamp |
| AEMET daily precipitation | one-day total starting at the UTC calendar date |
MeteoSwiss rre150z0 / rre150h0 |
10-minute / one-hour precipitation total ending at the timestamp |
MeteoSwiss gre000z0 / gre000h0 |
10-minute / one-hour radiation mean ending at the timestamp |
KNMI RH |
one-hour precipitation total ending at the timestamp; raw values are converted from 0.1 mm and trace -1 to canonical mm |
KNMI Q |
hourly radiation energy is converted to the canonical mean flux before interval alignment |
Météo-France RR1, RR3, RR6, RR12, RR24 |
total over the stated preceding N-hour interval; overlapping rolling totals are rejected instead of double-counted |
BoM rain_since_9am |
cumulative rain is de-accumulated into non-overlapping increments using the 09:00 local reset before alignment |
GeoSphere Austria rr |
one-hour precipitation total ending at the timestamp; cglo is a one-hour radiation mean |
MET Norway Frost sum(precipitation_amount PT1H) |
one-hour precipitation total ending at referenceTime |
DMI precip_past1h |
one-hour precipitation total ending at observed; *_past1h state drivers and global radiation are treated as preceding-hour means |
NOAA ISD one-hour AA* / NOAA USCRN Hourly02 |
one-hour amount ending at the observation timestamp |
NOAA/NWS precipitationLastHour |
one-hour amount ending at the observation timestamp |
| INMET WIS2 SYNOP total precipitation | one-hour SYNOP amount ending at phenomenonTime |
JMA AMeDAS precipitation1h |
one-hour amount ending at the JST observation timestamp; timestamps are converted to UTC |
FMI r_1h, precipitation1h, prd_pt1h_acc |
one-hour amount ending at the timestamp |
IPMA precAcumulada |
one-hour precipitation total ending at the timestamp; hourly radiation energy in kJ/m2 is converted to mean W/m2 |
| SMHI parameter 7 | one-hour precipitation total ending at the observation timestamp |
| Met Éireann hourly precipitation / solar radiation | one-hour total / one-hour mean ending at the timestamp |
| CHMI, ARSO, RMI Belgium, VMM Waterinfo hourly adapters | source observations are first aggregated to Neptoon-owned left-labelled hourly buckets; precipitation is then treated as a one-hour total |
Provider parsers also retain which native source field was selected. If several local
files would mix incompatible contracts for the same canonical variable (for example
Météo-France RR1 and RR3), Neptoon rejects the attachment instead of silently
falling back to a generic one-hour assumption.
For a custom/local extract with a different contract, override the relevant canonical variable explicitly:
external_meteo:
- enabled: true
provider: open_meteo
include_precipitation: true
temporal_semantics:
precipitation:
kind: interval_total
duration: 30min
label: end
kind: state has no duration and uses label: instant. Interval values use
kind: interval_total or kind: interval_mean together with label: start or
label: end. Overrides take precedence over provider defaults, so they should only be
used when the actual source-file contract is known.
Provider-specific options¶
| Provider | Options |
|---|---|
aemet |
aemet_api_key or aemet_api_key_env, plus optional aemet_base_url. Remote API access requires the key. |
nasa_power |
Optional nasa_power_base_url for endpoint override/testing. No credential is required. |
noaa_isd |
noaa_station_history_path for a local isd-history.csv station catalog. |
noaa_ghcn_daily |
noaa_ghcn_stations_path, noaa_ghcn_inventory_path for local GHCN-Daily metadata. |
noaa_uscrn |
noaa_uscrn_station_catalog_url, noaa_uscrn_station_catalog_path for station catalog overrides. |
noaa_nws |
nws_base_url, nws_user_agent, nws_file_paths, nws_station_catalog_path. No API key is used; nws_user_agent is an identifying HTTP header, not a secret. |
inmet |
inmet_base_url, inmet_file_paths, inmet_station_catalog_path. Remote access uses the token-free INMET WIS2 OGC API. |
jma_amedas |
jma_base_url, jma_file_paths, jma_station_catalog_path. Remote access is intended for recent observations; local files are the reproducible/archive path. |
meteostat |
meteostat_station_db_path for a local Meteostat stations.db. |
open_meteo, era5_open_meteo, era5_land_open_meteo |
open_meteo_model, for example era5 or era5_land. The dedicated ERA5 provider aliases set the model implicitly. |
eobs |
eobs_data_dir and/or eobs_file_paths. At least one of these is required when provider: eobs is enabled. |
meteoswiss |
meteoswiss_file_paths, meteoswiss_data_url, meteoswiss_stac_collection_url. |
knmi |
knmi_api_key or knmi_api_key_env, plus knmi_dataset_name, knmi_dataset_version, knmi_file_paths, knmi_max_files. If knmi_dataset_version is set, knmi_dataset_name must also be set. |
meteo_france |
meteo_france_api_key or meteo_france_api_key_env, plus meteo_france_api_url, meteo_france_file_paths, meteo_france_station_catalog_url, meteo_france_station_catalog_path. |
chmi |
chmi_file_paths, chmi_station_catalog_path, chmi_station_catalog_url, chmi_base_url, chmi_allowed_quality_values, chmi_allowed_flag_values. |
arso |
arso_file_paths, arso_station_catalog_path, arso_station_catalog_url, arso_base_url, arso_allowed_state_values. |
rmi_belgium |
rmi_belgium_wfs_url to override the public opendata.meteo.be WFS endpoint. No API key is used. |
vmm_waterinfo |
vmm_waterinfo_url plus the configurable pressure, temperature, relative-humidity and precipitation group ids. Anonymous requests need no API key, but Waterinfo applies request/data limits and recommends tokens for sustained automation. |
met_office_datahub |
met_office_api_key or met_office_api_key_env, plus met_office_api_url, met_office_file_paths. Without local files, an API key source and API URL are normally both needed. |
fmi |
fmi_data_url, fmi_file_paths, fmi_stored_query_id, fmi_parameters. |
smhi |
smhi_base_url, smhi_file_paths, smhi_period. The token-free metobs adapter uses parameter-specific station metadata and can combine recent and corrected archive periods. |
imgw |
imgw_data_url, imgw_file_paths, imgw_station_catalog_url, imgw_station_catalog_path. Remote synop access is token-free; nearest-station selection uses Neptoon's built-in IMGW synoptic coordinate inventory unless a catalogue override is supplied. Local snapshots are recommended for pinned historical use. |
met_eireann |
met_eireann_base_url, met_eireann_collection_id, met_eireann_file_paths, met_eireann_station_catalog_path. The default collection is the token-free 60-minute EDR observation collection. |
ipma |
ipma_data_url, ipma_file_paths, ipma_station_catalog_url, ipma_station_catalog_path. Public remote observations cover the latest 24 hours and require no API key. |
eccc_geomet |
eccc_api_url, eccc_collection_id, eccc_file_paths. |
bom |
bom_data_url, bom_file_paths, bom_station_catalog_url, bom_station_catalog_path, bom_product_id. Without URL/files, station: nearest uses the official national station list and state-specific public 72-hour observation product. |
geosphere_austria |
geosphere_austria_base_url, geosphere_austria_resource_id, geosphere_austria_file_paths, geosphere_austria_station_catalog_path. The default resource is klima-v2-1h; no API key is required. |
frost |
frost_client_id or frost_client_id_env, plus frost_base_url, frost_file_paths, frost_source_file. API access requires the Frost client id as Basic-auth username with an empty password; local observation files do not. |
dmi |
dmi_base_url, dmi_file_paths, dmi_station_catalog_path. The public DMI Meteorological Observation API requires no key. |
dwd |
dwd_request_retries, dwd_station_products_path, dwd_precipitation_daily_fallback, dwd_precipitation_product. DWD Open Data requires no key. |
For credential-bearing providers, the *_env option names an environment variable whose value is resolved only at the runtime attachment boundary. Direct secret fields take precedence over environment values. ConfigSaver omits direct secret values but preserves the non-secret *_env reference, so configuration can remain portable without embedding credentials. The provider registry exposes these credential contracts programmatically for future CLI/GUI consumers.
The default VMM group identifiers are 192918 for air pressure, 192922 for air temperature, 192919 for relative humidity and 192897 for hourly precipitation. Pressure, temperature and relative humidity are aggregated to hourly means; precipitation is aggregated to hourly sums. Waterinfo does not guarantee that group identifiers remain stable, so every identifier can be overridden with vmm_waterinfo_pressure_group_id, vmm_waterinfo_temperature_group_id, vmm_waterinfo_relative_humidity_group_id and vmm_waterinfo_precipitation_group_id. The separate VMM irradiance series is not mapped to Neptoon global radiation because its measurement semantics have not been verified as equivalent.
United States, Brazil and Japan token-free station providers¶
provider: noaa_nws uses NOAA/NWS api.weather.gov station observations. Neptoon sends the identifying User-Agent required by weather.gov, but no API key or login is needed. station: nearest resolves the point's NWS observation-station collection and chooses the nearest coordinate subject to max_distance_km. The NWS surface-observation endpoint is currently limited primarily to contiguous-US locations, so the global NOAA archive providers remain better choices outside that operational footprint.
provider: inmet uses Brazil's public WIS2 OGC API and the automatic SYNOP network. station can be a WIGOS identifier or traditional INMET identifier; station: nearest uses the WIS2 station collection. Station pressure is deliberately mapped from non_coordinate_pressure; mean-sea-level pressure is not substituted for CRNS pressure correction.
provider: jma_amedas uses the public JMA AMeDAS station table and recent three-hour point JSON blocks. AMeDAS timestamps are interpreted in Asia/Tokyo and converted to UTC. The public web feed is treated as near-real-time rather than an archival SLA: configure jma_file_paths for old or pinned observations.
external_meteo:
- enabled: true
provider: noaa_nws
station: nearest
fill_pressure: true
fill_temperature: true
fill_relative_humidity: true
include_precipitation: true
include_wind_speed: true
- enabled: false
provider: inmet
station: nearest
fill_pressure: true
fill_temperature: true
fill_relative_humidity: true
include_precipitation: true
include_wind_speed: true
- enabled: false
provider: jma_amedas
station: nearest
fill_pressure: true
fill_temperature: true
fill_relative_humidity: true
include_precipitation: true
include_wind_speed: true
Sweden, Poland and Ireland token-free national providers¶
Sweden is available as provider: smhi. The adapter uses the stable SMHI metobs 1.0 parameter endpoints for temperature, relative humidity, hourly precipitation and wind speed. For station: nearest, Neptoon intersects station availability across all requested variables before selecting the nearest common station. Requests older than the recent rolling period use the corrected archive automatically, while ranges crossing the boundary combine corrected and recent observations.
Poland is available as provider: imgw. The public IMGW-PIB synop endpoint supplies current station pressure, temperature, relative humidity and wind without authentication. station: nearest uses a built-in synoptic coordinate inventory derived from IMGW's public meteorological yearbook and intersects it with stations actually present in the observation payload; imgw_station_catalog_path or imgw_station_catalog_url can override those coordinates. The upstream suma_opadu field is deliberately not attached as canonical precipitation because the live field's accumulation interval is not explicit enough for Neptoon's interval-conserving precipitation semantics; local pinned snapshots can be used for reproducible processing.
Ireland is available as provider: met_eireann. Neptoon uses the public 60-minute OGC EDR observation collection, discovers station locations for station: nearest, and parses CoverageJSON into pressure, temperature, relative humidity, precipitation, solar radiation and wind speed. Local CoverageJSON can be supplied for offline or pinned workflows.
external_meteo:
- enabled: true
provider: smhi
station: nearest
fill_temperature: true
fill_relative_humidity: true
include_precipitation: true
include_wind_speed: true
- enabled: false
provider: imgw
station: nearest
fill_pressure: true
fill_temperature: true
fill_relative_humidity: true
include_precipitation: false
include_wind_speed: true
- enabled: false
provider: met_eireann
station: nearest
fill_pressure: true
fill_temperature: true
fill_relative_humidity: true
include_precipitation: true
include_solar_radiation: true
include_wind_speed: true
Portugal IPMA Open Data¶
Portugal is available as provider: ipma. The adapter uses IPMA's official token-free stations.json catalogue and hourly observations.json feed. With station: nearest, Neptoon filters the catalogue to stations present in the current observations and chooses the closest station subject to max_distance_km. The public observations feed contains the latest 24 hours and is updated hourly, so historical workflows should pin downloaded JSON through ipma_file_paths. IPMA's documented -99.0 no-data values become missing values; precAcumulada is treated as the one-hour precipitation total ending at the timestamp, and hourly radiation energy in kJ/m2 is converted to canonical mean W/m2.
external_meteo:
- enabled: true
provider: ipma
station: nearest
max_distance_km: 100
fill_pressure: true
fill_temperature: true
fill_relative_humidity: true
include_precipitation: true
include_solar_radiation: true
include_wind_speed: true
Australia, Austria, Norway and Denmark national providers¶
The bom provider can now resolve station: nearest without a manually supplied product URL. Neptoon downloads BoM's national stations.txt, keeps active stations that have a WMO id and a supported state/territory public product, orders them by distance and tries the rolling public observation JSON in nearest-first order. Those anonymous fwo products contain only the previous 72 hours; use bom_data_url or bom_file_paths for older or pinned data.
GeoSphere Austria is available as provider: geosphere_austria. The default klima-v2-1h dataset is quality-checked, hourly, UTC and token-free. station: nearest uses the resource station metadata before requesting only the selected station and requested parameters.
MET Norway is available as provider: frost. Frost requires a client id even for open data; configure it as frost_client_id. Neptoon asks Frost for nearby SensorSystem sources that expose the requested elements, then retrieves the preferred/default time series and accepted quality codes. Local Frost JSON can be supplied through frost_file_paths for reproducible/offline processing.
DMI Open Data is available as provider: dmi. It uses the token-free Meteorological Observation API, resolves the nearest active station and requests only the selected parameters. DMI's hourly mean/accumulation products are used where available; direct station pressure is averaged from the provider's 10-minute observations into hourly values.
external_meteo:
- enabled: true
provider: geosphere_austria
station: nearest
max_distance_km: 100
fill_pressure: true
fill_temperature: true
fill_relative_humidity: true
include_precipitation: true
include_solar_radiation: true
include_wind_speed: true
- enabled: false
provider: frost
station: nearest
frost_client_id: YOUR_FROST_CLIENT_ID
fill_pressure: true
fill_temperature: true
fill_relative_humidity: true
include_precipitation: true
include_wind_speed: true
- enabled: false
provider: dmi
station: nearest
fill_pressure: true
fill_temperature: true
fill_relative_humidity: true
include_precipitation: true
include_solar_radiation: true
include_wind_speed: true
CHMI / ČHMÚ Open Data¶
The chmi provider reads Czech Hydrometeorological Institute climate Open Data from https://opendata.chmi.cz/meteorology/climate. It supports station: nearest using WIGOS station identifiers and station coordinates, or an explicit WSI such as 0-20000-0-11450. Hourly mode combines the provider's 10-minute and one-hour products: state variables are averaged, precipitation is summed, and a dedicated one-hour value takes precedence when both resolutions provide the same canonical variable. Daily mode prefers the provider daily station products and falls back to aggregation of the hourly inputs.
CHMI publishes FLAG and QUALITY fields with separate metadata describing their meaning. Neptoon therefore does not assign undocumented good/bad semantics by default. Use chmi_allowed_quality_values and/or chmi_allowed_flag_values only when your project has chosen an explicit quality policy. For CRNS pressure filling, Neptoon maps the direct station-pressure element P and deliberately does not treat the distinct P_hm element as interchangeable. Cache entries are scoped by the full CHMI source URL so identically named now, recent, and historical files cannot collide; rolling now and root-level recent products are fetched fresh because CHMI updates them in place. Local chmi_file_paths and chmi_station_catalog_path are useful for offline and fully reproducible runs. With station: nearest, Neptoon tries the nearest candidates in distance order until one returns usable data, subject to max_distance_km and station_candidate_limit.
ARSO / meteo.si automatic-station XML¶
The arso provider reads Slovenian Environment Agency (ARSO / meteo.si) automatic-station XML. With station: nearest, Neptoon reads the all-station latest XML catalog, orders stations by distance from the CRNS coordinates, and tries candidates until one provides usable observations. An explicit ARSO domain_meteosiId is also accepted; aliases meteosi, meteo.si and meteo_si normalise to arso.
ARSO's native observations are commonly sub-hourly, so Neptoon aggregates them to the configured hourly or daily product. ARSO validity timestamps are treated as interval ends when assigning sub-hourly observations to aggregation bins. Temperature, relative humidity, pressure, wind speed and global radiation prefer ARSO interval-average fields when present. Precipitation uses rr_val, the amount for the observation interval, and is summed during aggregation; rolling accumulations such as tp_1h_acc are deliberately not summed. For CRNS pressure filling, Neptoon uses the station-pressure fields p/pavg rather than mean-sea-level pressure msl/mslavg.
ARSO publishes per-field *_state values, but this adapter does not guess undocumented good/bad semantics. Set arso_allowed_state_values only when a project has adopted an explicit state-value policy. Public per-station history XML is a rolling recent product (approximately 48 hours), so use arso_file_paths for archived XML and reproducible or older runs. arso_station_catalog_path can pin station metadata offline; arso_station_catalog_url and arso_base_url are available for endpoint overrides.
external_meteo:
- enabled: true
provider: arso
station: nearest
product: hourly
max_distance_km: 100
fill_pressure: true
fill_temperature: true
fill_relative_humidity: true
include_precipitation: true
include_solar_radiation: true
include_wind_speed: true
prefer_external_values: false
required: false
Local provider files and reproducibility¶
Some providers can use explicit local input files for reproducible offline runs, for example E-OBS, MeteoSwiss, KNMI, Météo-France, CHMI, ARSO, FMI, IPMA, ECCC GeoMet, BoM, GeoSphere Austria, Frost, DMI and selected NOAA catalog files:
external_meteo:
- enabled: true
provider: eobs
product: daily
station: nearest
max_nearest_timedelta: 12h
eobs_data_dir: ./external/eobs
fill_temperature: true
include_precipitation: true
Relative local paths in YAML are resolved relative to the config-file directory. This includes cache_dir, station-catalog files and provider data files.
Provider capabilities and source columns¶
Not every provider exposes every variable. Neptoon will only attach the requested variables that are available in the selected provider product. For example, vmm_waterinfo provides pressure, temperature, relative humidity and precipitation from VMM station time series; noaa_ghcn_daily is useful for daily precipitation and temperature but does not provide pressure in this adapter; meteostat, noaa_isd and met_office_datahub do not provide a true global-radiation product here; noaa_uscrn, Open-Meteo, E-OBS, MeteoSwiss, KNMI, Météo-France, CHMI, ARSO, FMI, IPMA, ECCC GeoMet, BoM, GeoSphere Austria and DMI can provide solar/global-radiation fields when present in the selected product. Frost deliberately does not advertise solar radiation in this adapter. The Open-Meteo adapters additionally expose optional canonical wind_speed and reference_et0 columns; BoM, IPMA, GeoSphere Austria, Frost, DMI, CHMI and ARSO expose canonical wind_speed when available. Pure era5_land_open_meteo retains reference ET0 but does not request unavailable wind, precipitation or solar-radiation fields; use open_meteo/ERA5 where those atmospheric drivers are required.
The canonical Open-Meteo/ERA5 wind field is a 10 m wind product. If that column is
used to calculate soil-profile Penman-Monteith ET0 locally rather than attaching the
provider's direct reference_et0, configure
ProfileModelConfig(wind_speed_measurement_height_m=10.0) so Neptoon converts the
wind to the FAO 2 m reference height. Missing wind remains harmless because the ET0
hierarchy falls back per day when Penman-Monteith inputs are incomplete.
Provider attachment also records provenance columns where possible. The exact names depend on the provider and variable, but source/provenance columns are intended to show whether values came from local data, DWD, or a specific external provider product. Use these columns to diagnose why a meteorological value was used in corrections or shown in a report.
ERA5-Land soil moisture and snow¶
The Open-Meteo adapters also carry ERA5-Land soil moisture and snow depth as
reference series. These are reanalysis of the land surface: not measurements at
your site, and not remote sensing either, which is why they live in
external_meteo rather than under remote_sensing:. Like
every gridded reference series in Neptoon they are written, scaled, plotted,
reported and audited, and they enter no neutron correction, no N0 calibration and
no soil-moisture product.
external_meteo:
- enabled: true
provider: era5_land
include_precipitation: false
include_soil_moisture: true
soil_moisture_layers:
- 7_28cm
soil_moisture_scaling:
method: offset
offset: -0.045
include_snow_depth: true
| Option | Default | Description |
|---|---|---|
include_soil_moisture |
false |
Attach ERA5-Land soil moisture in m³/m³, one column per requested layer. |
soil_moisture_layers |
[7_28cm] |
Which of the four native layers to attach: 0_7cm, 7_28cm, 28_100cm, 100_255cm. The provider spellings (0_to_7cm and so on) are accepted. |
soil_moisture_scaling |
method: none |
Optional explicit adjustment. Same schema and same rules as remote_sensing.scaling. |
include_snow_depth |
false |
Attach ERA5-Land snow depth on the ground, in metres. |
include_snow_water_equivalent |
false |
Declared, but not served by this route, see below. |
Columns are named for their origin: era5_land_soil_moisture_7_28cm,
era5_land_snow_depth. A scaled series adds era5_land_soil_moisture_7_28cm_scaled
beside the raw column rather than replacing it, so the adjustment stays auditable
and can be undone without re-fetching. Provenance columns record the product, the
provenance class, the native resolution, the retrieval time and the grid cell that
actually answered, the distance from your station to that cell centre is the
difference between "the reanalysis at this site" and "the reanalysis somewhere
within 9 km of it".
Why the default layer is 7–28 cm and not the topmost one¶
ERA5-Land has four native soil layers, and Neptoon defaults to the second one. The reason is physical rather than empirical:
- a CRNS integrates roughly 15–40 cm of soil, depending on water content;
- ERA5-Land's top layer is the uppermost 7 cm, which dries and rewets far faster than the depth the neutron signal represents.
Comparing a CRNS series against the 0–7 cm layer therefore shows a disagreement produced by the comparison rather than by either dataset: the shallow layer swings through a drying event while the CRNS footprint, weighted over a deeper column, does not. The 7–28 cm layer overlaps the CRNS integration depth and is the honest default.
You can request any of the four layers, and several at once, but only those four. Interpolating to some other depth would mean inventing a soil profile, so a request for one is refused rather than approximated.
Two things this route cannot do¶
Both were measured against the live endpoint, and both are stated here so they do not have to be rediscovered.
Snow water equivalent is not available. The Open-Meteo Historical Weather API
accepts snow_depth_water_equivalent and then returns null for it under every
archive model, era5_land, era5, era5_seamless and best_match alike, with
the unit reported as undefined. Measured on 2026-08-20 for 2021-02-10 at
52.09 N, 11.226 E, a date with 0.21 m of modelled snow: snow depth came back,
water equivalent did not. The same variable is served by the forecast API in mm,
so the name is right and the archive coverage is not. ERA5-Land itself publishes
snow depth water equivalent, so the gap is in this route rather than in the
reanalysis; reaching the value needs the Copernicus CDS API, which requires a
personal access token. Enabling include_snow_water_equivalent reports the gap
instead of attaching a column of nulls, and deriving it from snow depth is not
offered because that needs a snow density this route does not supply either.
The provider must really be ERA5-Land. Soil and snow variables are refused
unless the effective Open-Meteo archive model is era5_land, and the refusal
happens when the configuration is loaded rather than when the fetch runs. That is
deliberate: the columns are named era5_land_*, so filling them from ERA5 or from
Open-Meteo's best-match blend would mislabel the data in the one place a later
reader looks. Use provider: era5_land, or any Open-Meteo provider together with
open_meteo_model: era5_land.
A station whose coordinates fall on open water fails loudly rather than producing an empty column. ERA5-Land is a land-surface reanalysis and returns null over sea at every timestamp, so the same coverage check that reads pixels for satellite products detects the land boundary here with no special case. A single missing hour is still just a gap.
Failure handling¶
Use required: true for production configurations where external meteorology is mandatory. Leave it as false when external data are useful fallbacks but processing should continue if a provider is temporarily unavailable.
When you combine several providers, put the most trusted or most local provider first and set prefer_external_values: false for fallback behaviour. Use prefer_external_values: true only when the provider is deliberately the authoritative source.
Independently logged soil moisture¶
Soil-moisture reference sensors stored in separate CSV files use a distinct input path because they are not meteorological fallback providers. Neptoon can map files to sensor IDs and depths, normalise them to m³/m³, aggregate each sensor independently and join the result to the final CRNS time index. See External soil-moisture time series.