A powerful WeeWX extension that automatically uploads comprehensive weather station data to Nuvoler.com.
weewx-nuvoler is a WeeWX extension that automatically monitors archive records from your weather station and uploads comprehensive meteorological data to Nuvoler.com, a weather data collection service supporting 10+ weather parameters.
The extension features advanced wind minimum estimation using a 3-parameter Weibull distribution with intelligent fallback methods, ensuring accurate wind speed statistics regardless of your station’s data availability.
Visit Nuvoler Sign Up to register your weather station and obtain your station ID and password.
wget -O weewx-nuvoler.zip https://github.com/rc-chuah/weewx-nuvoler/releases/latest/download/weewx-nuvoler.zip
For WeeWX v4 and earlier:
wee_extension --install weewx-nuvoler.zip
For WeeWX v5:
weectl extension install weewx-nuvoler.zip
Edit /etc/weewx/weewx.conf and add the required configuration:
[StdRESTful]
[[Nuvoler]]
station_id = YOUR_STATION_ID_HERE
station_pass = YOUR_STATION_PASSWORD_HERE
Optional parameters:
[StdRESTful]
[[Nuvoler]]
# Station credentials (required)
station_id = YOUR_STATION_ID_HERE
station_pass = YOUR_STATION_PASSWORD_HERE
# Enable or disable extension (default: true)
enabled = true
# Nuvoler server URL (default: https://www.nuvoler.com/data/recibir.php)
server_url = https://www.nuvoler.com/data/recibir.php
# Upload interval in seconds (default: 60)
post_interval = 60
# Maximum backlog of records to upload (default: unlimited)
max_backlog = 10
# Data upload timeout in seconds (default: 60)
timeout = 60
# Maximum upload retry attempts (default: 3)
max_tries = 3
sudo systemctl restart weewx
Check that the extension loaded successfully:
tail -f /var/log/syslog | grep -i nuvoler
Expected log output:
nuvoler: version is 0.1
nuvoler: Data will be uploaded to https://www.nuvoler.com/data/recibir.php
The extension operates through the following workflow:
| Parameter | Unit | WeeWX Field | Description |
|---|---|---|---|
| temperature | °C | outTemp | Outdoor temperature |
| rh | % | outHumidity | Relative humidity |
| mslp | mbar/hPa | barometer | Mean sea level pressure |
| wind_dir | ° | windDir | Wind direction (0-360°) |
| wind_avg | knots | windSpeed | Average wind speed |
| wind_min | knots | (estimated) | Minimum wind speed (3-param Weibull) |
| wind_max | knots | windGust | Maximum wind speed/gust |
| precip | mm (L/m²) | hourRain | Hourly precipitation |
| uv | Index | UV | UV index (unitless) |
| dewpoint | °C | dewpoint | Dew point temperature |
The extension uses an intelligent 4-level hierarchy to estimate wind minimum, automatically selecting the best method based on available data:
Used when both average wind speed and wind gust (maximum) are available.
Mathematical Formula:
θ (location) ≈ wind_avg × 0.30 (minimum threshold)
k (shape) = 2.0 (Rayleigh-like, typical for surface winds)
λ (scale) = (wind_max - θ) / (-ln(0.01))^(1/k) (spread parameter)
wind_min = θ + λ × (-ln(0.05))^(1/k) (5th percentile)
Advantages:
Example:
Input: wind_avg = 4.86 m/s, wind_max = 7.78 m/s
Estimated parameters:
θ = 1.458 m/s (minimum threshold)
k = 2.0 (Rayleigh-like)
λ = 2.946 m/s (spread)
Result: wind_min ≈ 2.125 m/s (4.13 knots)
Used if 3-parameter Weibull encounters numerical issues, or when explicitly selected.
Formula:
variance_scale = 1.253 × 1.65 = 2.067
estimated_std = (wind_max - wind_avg) / variance_scale
wind_min = wind_avg - (0.7 × estimated_std)
Advantages:
Used when only average wind speed is available.
Formula:
wind_min = wind_avg / 1.65
Basis:
Advantages:
Used when only maximum wind speed is available.
Formula:
wind_min = wind_max / 2.5
Basis:
Advantages:
If (wind_avg available) AND (wind_max available):
Use 3-Parameter Weibull
Else if (wind_avg available):
Use Climatological Ratio
Else if (wind_max available):
Use Extreme Value Theory
Else:
Raise error (at least one wind parameter required)
The extension automatically converts wind speeds from m/s to knots using WeeWX’s built-in conversion:
knots = m/s × 1.94384449
All wind values are rounded to 1 decimal place.
The extension uploads weather data to Nuvoler using HTTP GET with the following format:
GET /data/recibir.php?station_id=YOUR_STATION_ID_HERE&station_pass=YOUR_STATION_PASSWORD_HERE&temperature=22.5&rh=65&mslp=1013.2&wind_dir=180&wind_avg=9.4&wind_max=15.1&wind_min=4.1&precip=2.4&uv=5&dewpoint=14.2 HTTP/1.1
Host: www.nuvoler.com
Parameters:
station_id - Your Nuvoler station IDstation_pass - Your Nuvoler station passwordtemperature - Temperature in Celsius (1 decimal place)rh - Relative humidity in % (integer)mslp - Mean sea level pressure in mbar/hPa (1 decimal place)wind_dir - Wind direction in degrees (integer, 0-360)wind_avg - Average wind speed in knots (1 decimal place)wind_max - Maximum wind speed/gust in knots (1 decimal place)wind_min - Minimum wind speed in knots (1 decimal place, estimated)precip - Hourly precipitation in mm (L/m²) (1 decimal place)uv - UV index (1 decimal place)dewpoint - Dew point in Celsius (1 decimal place)The extension converts your station’s native units to the following for Nuvoler:
| Category | Field | Conversion | Result |
|---|---|---|---|
| Temperature | outTemp | Fahrenheit → Celsius or pass-through | °C |
| Humidity | outHumidity | Pass-through | % |
| Pressure | barometer | inHg/Mb → mbar/hPa | mbar/hPa |
| Wind Speeds | windSpeed, windGust | mph/km/h/m/s → m/s → knots | knots |
| Wind Minimum | (estimated) | 3-param Weibull → m/s → knots | knots |
| Precipitation | hourRain | inches/cm/mm → mm (L/m²) | mm (L/m²) |
| UV Index | UV | Pass-through | Index |
| Dew Point | dewpoint | Fahrenheit → Celsius or pass-through | °C |
All conversions are automatic and transparent to the user. The extension handles US, Metric, and MetricWX unit systems seamlessly.
Check WeeWX logs for nuvoler messages:
tail -f /var/log/syslog | grep nuvoler
Or on systemd systems:
journalctl -u weewx -f | grep nuvoler
To see detailed debug information, enable debug mode in /etc/weewx/weewx.conf:
debug = 2
Then restart WeeWX:
sudo systemctl restart weewx
Debug logs will show:
Run the built-in test suite to verify correct conversions and wind estimation:
cd /usr/share/weewx
PYTHONPATH=bin python bin/user/nuvoler.py
This executes three unit system tests and detailed Weibull analysis. Expected output:
================================================================================
Test 1 - Purely US Units (weewx.US)
Input: US units (°F, mph, inHg, inches)
================================================================================
https://www.nuvoler.com/data/recibir.php?station_id=50&station_pass=12345&temperature=22.5&rh=65&mslp=1013.2&wind_dir=180&wind_avg=9.5&wind_max=15.3&wind_min=4.2&precip=2.4&uv=5&dewpoint=14.2
================================================================================
Test 2 - Purely Metric Units (weewx.METRIC)
Input: Metric units (°C, km/h, mbar/hPa, cm)
================================================================================
https://www.nuvoler.com/data/recibir.php?station_id=50&station_pass=12345&temperature=22.5&rh=65&mslp=1013.2&wind_dir=180&wind_avg=9.4&wind_max=15.1&wind_min=4.1&precip=2.4&uv=5&dewpoint=14.2
================================================================================
Test 3 - Purely MetricWX Units (weewx.METRICWX)
Input: MetricWX units (°C, m/s, mbar/hPa, mm (L/m²))
================================================================================
https://www.nuvoler.com/data/recibir.php?station_id=50&station_pass=12345&temperature=22.5&rh=65&mslp=1013.2&wind_dir=180&wind_avg=9.4&wind_max=15.1&wind_min=4.1&precip=2.4&uv=5&dewpoint=14.2
================================================================================
3-PARAMETER WEIBULL ESTIMATION ANALYSIS
================================================================================
Test Case: wind_avg=4.86 m/s (~9.45 knots), wind_max=7.78 m/s (~15.1 knots)
================================================================================
METHOD 1: 3-Parameter Weibull Distribution
================================================================================
Estimated parameters:
θ (location) = 1.458 m/s (minimum threshold)
k (shape) = 2.000 (distribution curvature)
λ (scale) = 2.946 m/s (spread parameter)
5% percentile (wind_min): 2.125 m/s (4.13 knots)
10% percentile (wind_min): 2.414 m/s (4.69 knots)
25% percentile (wind_min): 3.038 m/s (5.91 knots)
50% percentile (wind_min): 3.911 m/s (7.60 knots)
Theoretical statistics:
Mean = 4.069 m/s (observed avg: 4.86 m/s)
Std Dev = 1.365 m/s
Estimated minimum (5th percentile): 2.125 m/s (4.13 knots)
================================================================================
COMPARISON: All Available Methods
================================================================================
3-Parameter Weibull (PRIMARY): 2.125 m/s (4.13 knots)
2-Parameter Weibull (FALLBACK): 3.871 m/s (7.53 knots)
Climatological Ratio (FALLBACK):2.945 m/s (5.73 knots)
Extreme Value Theory (FALLBACK):3.112 m/s (6.05 knots)
Auto-selected method: 2.125 m/s (4.13 knots)
================================================================================
EXPECTED OUTPUTS (for all three unit tests - should be identical):
================================================================================
temperature=22.5 (°C)
rh=65 (%)
mslp=1013.2 (mbar/hPa)
wind_dir=180 (°)
wind_avg=9.4 or 9.5 (knots)
wind_max=15.1 or 15.3 (knots)
wind_min≈4.1 to 7.5 (knots from advanced estimation)
precip=2.4 (mm (L/m²))
uv=5 (index)
dewpoint=14.2 (°C)
================================================================================
All three unit tests should produce nearly identical results, confirming correct unit conversion across all WeeWX unit systems.
| Issue | Cause | Solution |
|---|---|---|
| No uploads occurring | Credentials missing or incorrect | Verify station_id and station_pass in /etc/weewx/weewx.conf match your Nuvoler account |
| Missing parameters in upload | Weather station lacks sensors | Extension only uploads available parameters; ensure your station has required sensors (temperature, humidity, pressure, wind, etc.) |
| Connection errors | Network or firewall issue | Test connectivity: curl -v "https://www.nuvoler.com/data/recibir.php?station_id=YOUR_STATION_ID_HERE&station_pass=YOUR_STATION_PASSWORD_HERE&temperature=22.5&rh=65&mslp=1013.2&wind_dir=180&wind_avg=12.5&wind_min=8.0&wind_max=16.0&precip=2.4&uv=5&dewpoint=14.2" |
| Incorrect unit conversion | Wrong unit system configured | Check /etc/weewx/weewx.conf for correct unit_system setting (US, Metric, or MetricWX) |
| Wind minimum unrealistic | Insufficient wind data | Wind minimum estimation improves with both avg & max; if only avg available, climatological ratio used; if only max, extreme value theory used |
| Extension not loading | Python path or import error | Verify WeeWX installation; check logs with debug = 2 enabled |
curl -v "https://www.nuvoler.com/data/recibir.php?station_id=YOUR_STATION_ID_HERE&station_pass=YOUR_STATION_PASSWORD_HERE&temperature=22.5&rh=65&mslp=1013.2&wind_dir=180&wind_avg=12.5&wind_min=8.0&wind_max=16.0&precip=2.4&uv=5&dewpoint=14.2"
This extension uses only Python’s standard library. No external packages are required.
Python modules used:
Queue (Python 2) / queue (Python 3) - Thread-safe queue for data bufferingurllib (Python 2) / urllib.parse (Python 3) - URL encoding and query parameter constructionsys, time, math - System utilities and mathematical functionslogging / syslog - Logging with fallback for legacy WeeWX versionsWeeWX modules used:
weewx.restx - REST API framework for uploadsweewx.units - Unit conversion (m/s to knots, Fahrenheit to Celsius, etc.)weewx.manager - Managing WeeWX databaseweeutil.weeutil - Utility functions (boolean parsing)The extension uses a thread-safe queue-based architecture inherited from WeeWX’s RESTful framework:
This design ensures that weather data uploads don’t block WeeWX’s main weather station loops, maintaining responsive station operation.
Copyright © 2026 RC Chuah
Distributed under the terms of the GNU General Public License (GPLv3)