RemoteWeather is a professional weather monitoring system that collects data from your weather station, stores it for historical analysis, and shares it through multiple channels including a beautiful live website, weather services, and amateur radio networks.
- Live Weather Website - Creates a professional weather website with real-time updates, interactive charts, and mobile-friendly design (see example)
- Historical Data Storage - Stores all weather readings in TimescaleDB for long-term analysis, trends, and graphing
- Weather Service Integration - Automatically uploads your data to popular services like Weather Underground, PWS Weather, and Aeris Weather
- Amateur Radio Support - Transmits weather data via APRS/CWOP for ham radio operators and citizen weather observers
- Multiple Access Methods - View your data via web browser, mobile device, or custom applications using gRPC streaming
RemoteWeather supports the following weather stations:
- Campbell Scientific stations with dataloggers (CR series)
- Davis Instruments VantagePro, VantagePro2, and Vue
- AirGradient air quality monitors
- Ambient Weather customized stations
- Snow gauge monitoring systems
- Generic stations via gRPC receiver
- Serial/USB - Direct connection using WeatherLink or compatible cables
- Network - Ethernet or Wi-Fi connection for network-enabled stations
- Radio Frequency - 900MHz RF receivers (Campbell RF407, Davis Wireless Envoy)
- TCP/IP - For stations with network interfaces
- Operating System: Linux (Ubuntu, Debian, CentOS, or similar)
- Database: TimescaleDB (PostgreSQL extension) for weather data storage
- Configuration: SQLite database for system configuration
- Docker (optional but recommended): For simplified installation
-
Download RemoteWeather
wget https://github.com/chrissnell/remoteweather/releases/latest/download/remoteweather-linux-amd64 chmod +x remoteweather-linux-amd64
-
First Run - Bootstrap Configuration
When you run RemoteWeather for the first time, it automatically creates a configuration database:
./remoteweather-linux-amd64
The system will:
- Create a SQLite configuration database at
~/.config/remoteweather/config.db - Generate a secure access token for the management interface
- Start the management API on
http://localhost:8081
Important: Save the access token displayed during bootstrap - you'll need it to configure the system!
- Create a SQLite configuration database at
-
Access the Management Interface
Open your web browser and go to:
http://localhost:8081Enter the access token from the bootstrap process when prompted.
-
Set Up Your Weather Station
In the management interface:
- Click "Weather Stations" → "Add Station"
- Select your station type (Davis, Campbell Scientific, etc.)
- Enter connection details (serial port, IP address, etc.)
- Test the connection to verify it's working
-
Configure TimescaleDB Storage
- Click "Storage Backends" → "Add Storage"
- Select "TimescaleDB"
- Enter your database connection details:
- Host:
localhost(or your database server) - Port:
5432 - Database name:
weather - Username and password
- Host:
- The system will automatically create the necessary tables
-
Enable Services (Optional)
Add any weather services you want to use:
- Web Interface: Enable the REST server controller for the live weather website
- Weather Underground: Add your station ID and API key
- PWS Weather: Add your station ID and password
- APRS/CWOP: Add your callsign (ham radio) or CWOP ID
Once configured, RemoteWeather will automatically start collecting and sharing weather data.
For continuous operation, set up RemoteWeather as a system service:
# Create systemd service file
sudo nano /etc/systemd/system/remoteweather.service
# Add the following content:
[Unit]
Description=RemoteWeather Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/remoteweather
Restart=always
User=weather
[Install]
WantedBy=multi-user.target
# Enable and start the service
sudo systemctl enable remoteweather
sudo systemctl start remoteweather- Web Interface: Access your weather website at
http://your-server:8080(or configured port) - Management API: Access configuration at
http://your-server:8081 - Mobile Access: The web interface is fully responsive and works on all devices
RemoteWeather includes these controllers for different purposes:
- REST Server - Provides the main weather website and API
- Management API - System configuration and monitoring interface
- Weather Underground - Uploads data to wunderground.com
- PWS Weather - Uploads data to pwsweather.com
- Aeris Weather - Integration with Aeris Weather network
- APRS - Transmits data to APRS-IS network
- TimescaleDB - Primary storage for all weather readings with time-series optimization
- APRS - Routes data to APRS/CWOP networks
- gRPC Stream - Provides real-time data streaming for custom applications
# If running directly
./remoteweather -v # Verbose output
# If running as systemd service
sudo journalctl -u remoteweather -f-
"Cannot connect to weather station"
- Verify the station is powered on
- Check cable connections
- Ensure correct serial port or IP address in configuration
-
"Database connection failed"
- Verify TimescaleDB is running:
sudo systemctl status postgresql - Check database credentials in configuration
- Ensure database exists and user has permissions
- Verify TimescaleDB is running:
-
"Management API not accessible"
- Check if RemoteWeather is running
- Verify firewall allows port 8081
- Ensure you're using the correct access token
For easier deployment, RemoteWeather is available as a Docker image:
# Pull the latest image
docker pull chrissnell/remoteweather:latest
# Run with bootstrap (first time)
docker run -it --rm \
-v remoteweather-config:/root/.config/remoteweather \
-p 8080:8080 \
-p 8081:8081 \
chrissnell/remoteweather:latest
# Save the access token shown during bootstrap!
# For production, use docker-compose:
docker-compose up -dExample docker-compose.yml:
version: '3'
services:
remoteweather:
image: chrissnell/remoteweather:latest
ports:
- "8080:8080" # Weather website
- "8081:8081" # Management API
volumes:
- remoteweather-config:/root/.config/remoteweather
- /dev/ttyUSB0:/dev/ttyUSB0 # For serial weather stations
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
restart: unless-stopped
timescaledb:
image: timescale/timescaledb:latest-pg14
environment:
POSTGRES_PASSWORD: weatherpass
POSTGRES_DB: weather
volumes:
- timescale-data:/var/lib/postgresql/data
restart: unless-stopped
volumes:
remoteweather-config:
timescale-data:RemoteWeather provides a gRPC interface for building custom applications:
- Real-time Data Stream - Subscribe to live weather updates
- Historical Queries - Request specific date ranges
- Custom Clients - Build desktop widgets, mobile apps, or integrations
Example client: grpc-weather-bar for Linux desktop
You can export your weather data directly from TimescaleDB:
-- Connect to database
psql -U weather -d weather
-- Export last 30 days as CSV
\COPY (SELECT * FROM readings WHERE time > NOW() - INTERVAL '30 days')
TO '/tmp/weather_export.csv' CSV HEADER;- Issues: Report bugs at GitHub Issues
- Documentation: Check the docs/ directory for detailed guides
- Examples: See example configurations in the repository
- Weather Station Forums: Hardware-specific help
- TimescaleDB Community: Database optimization tips
- Amateur Radio Groups: APRS/CWOP configuration assistance
RemoteWeather is open source software. See LICENSE file for details.