A complete, production-ready weather forecasting system for the Seeed Studio reComputer J4012 (NVIDIA Jetson Orin NX 16GB). This system provides:
- 18-hour HRRR forecasts from NOAA (High-Resolution Rapid Refresh model)
- 2-hour radar nowcasting using PySTEPS and NEXRAD data
- Web dashboard for viewing forecasts and radar
- Automated data pipeline with continuous operation
- Optimized for edge deployment on Jetson hardware
- Hourly ingestion of NOAA HRRR GRIB2 data
- Point forecasts for Franklin, TN (configurable for any location)
- 18-hour forecasts with temperature, wind, precipitation, cloud cover
- Historical forecast storage for accuracy verification
- Real-time NEXRAD Level 2/3 radar from Nashville (KOHX)
- PySTEPS-based ensemble nowcasting (1-2 hours)
- Fallback to optical flow or persistence methods
- GPU-accelerated inference with TensorRT optimization
- Animated forecast loops
- Real-time current conditions
- Interactive 18-hour forecast charts
- Radar nowcast visualization
- System statistics and monitoring
- Mobile-responsive design
- Automated data pipeline with error handling
- systemd service integration
- Docker containerization option
- Resource limits for Jetson memory constraints
- Logging and monitoring
- Automatic data cleanup
- Device: Seeed Studio reComputer J4012 (Jetson Orin NX 16GB)
- OS: Ubuntu 20.04/22.04 (L4T)
- JetPack: 5.x (tested with 5.1.2)
- CUDA: 11.4+
- cuDNN: 8.6+
- TensorRT: 8.5+
- Storage: 64GB+ recommended (for data retention)
- Network: Reliable internet connection for data downloads
cd ~
git clone <your-repo-url>
cd weatherEdit config/config.yaml:
location:
name: "Your City, State"
latitude: 35.9251 # Your latitude
longitude: -86.8689 # Your longitude (negative for West)
radar_site: "KOHX" # Nearest NEXRAD siteFind your nearest NEXRAD site: https://www.ncei.noaa.gov/maps/nexrad/
chmod +x scripts/install.sh
./scripts/install.shThe installer will:
- Install all system dependencies
- Set up Python packages
- Initialize the database
- Configure deployment (systemd or Docker)
Installation takes 15-30 minutes on Jetson.
Open your browser to: http://your-jetson-ip:8080
The dashboard will show data once the first ingestion cycle completes (within 1 hour).
The following packages are installed automatically:
- Python 3.8+ development tools
- HDF5, NetCDF, GRIB libraries (for weather data)
- GEOS, PROJ (geospatial processing)
- FFTW, OpenBLAS (numerical computing)
- OpenCV (image processing)
- SQLite (database)
Key dependencies (see requirements.txt for complete list):
- herbie-data: HRRR GRIB2 data download
- nexradaws: NEXRAD radar data from AWS
- pyart: Radar data processing
- pysteps: Precipitation nowcasting
- xarray, dask: Scientific data handling
- Flask: Web framework
- SQLAlchemy: Database ORM
This system is designed for JetPack 5.x. Package versions are carefully selected to ensure ARM compatibility and avoid dependency conflicts.
Important: Some packages may need to compile from source on ARM, which is why installation takes longer than on x86_64.
Automated services that run on boot:
# View service status
sudo systemctl status weather-web
sudo systemctl status weather-hrrr.timer
sudo systemctl status weather-radar.timer
sudo systemctl status weather-nowcast.timer
# View logs
sudo journalctl -u weather-hrrr -f
sudo journalctl -u weather-nowcast -f
# Restart services
sudo systemctl restart weather-webService Schedule:
- HRRR ingestion: Every hour at :05
- Radar ingestion: Every 5 minutes
- Nowcast generation: Every 10 minutes
- Data cleanup: Daily at 2 AM
- Web dashboard: Always running
cd deployment/docker
# Build images
docker-compose build
# Start all services
docker-compose up -d
# View logs
docker-compose logs -f weather-web
# Stop services
docker-compose downNote: Requires NVIDIA Container Toolkit for GPU access.
# Run full pipeline once
python3 scripts/run_pipeline.py
# Run individual components
python3 scripts/run_pipeline.py --hrrr-only
python3 scripts/run_pipeline.py --radar-only
python3 scripts/run_pipeline.py --nowcast-only
# Start web server (production-safe)
gunicorn --bind 0.0.0.0:8080 --factory src.web.app:create_appweather/
├── config/
│ └── config.yaml # Main configuration
├── src/
│ ├── ingestion/
│ │ ├── hrrr_ingestor.py # HRRR data download
│ │ └── nexrad_ingestor.py # NEXRAD radar download
│ ├── forecasting/
│ │ └── nowcast_engine.py # PySTEPS nowcasting
│ ├── database/
│ │ ├── models.py # Database schema
│ │ └── db_manager.py # Database operations
│ ├── web/
│ │ ├── app.py # Flask application
│ │ ├── templates/ # HTML templates
│ │ └── static/ # CSS, JavaScript
│ └── utils/
│ ├── logger.py # Logging utilities
│ └── helpers.py # Helper functions
├── scripts/
│ ├── run_pipeline.py # Main pipeline orchestrator
│ └── install.sh # Installation script
├── deployment/
│ ├── systemd/ # systemd service files
│ └── docker/ # Docker configuration
├── data/ # Data storage (created at runtime)
├── logs/ # Log files (created at runtime)
├── requirements.txt # Python dependencies
└── README.md # This file
Edit config/config.yaml to customize:
location:
name: "Franklin, TN"
latitude: 35.9251
longitude: -86.8689
timezone: "America/Chicago"
radar_site: "KOHX"hrrr:
enabled: true
forecast_hours: 18
retention_days: 7
nexrad:
enabled: true
data_source: "aws" # or "noaa"
retention_hours: 24nowcast:
enabled: true
method: "pysteps" # or "persistence", "optical_flow"
forecast_minutes: 120
ensemble_members: 3 # Reduce if memory constrainedperformance:
max_memory_mb: 12288 # 12GB (leave 4GB for system)
cpu_threads: 6 # Jetson Orin NX has 8 cores
gpu_memory_fraction: 0.7The Jetson Orin NX has 16GB of unified memory. This system is configured to stay within safe limits:
- HRRR ingestion: ~1-2GB
- Radar ingestion: ~1-2GB
- Nowcasting: ~4-6GB (peak during PySTEPS)
- Web dashboard: ~500MB
- System overhead: ~2-3GB
Tips for Memory-Constrained Operation:
-
Reduce ensemble members in nowcast:
nowcast: ensemble_members: 1
-
Use simpler nowcast method:
nowcast: method: "optical_flow" # Uses less memory than PySTEPS
-
Reduce forecast hours:
hrrr: forecast_hours: 12
Solution: Some packages need to compile on ARM. Ensure build tools are installed:
sudo apt-get install build-essential python3-dev gfortranPossible causes:
- Network connectivity issues
- NOAA server downtime
- Incorrect herbie-data installation
Check logs:
tail -f logs/hrrr_ingestor.logPossible causes:
- AWS S3 access issues
- Incorrect radar site code
- NEXRAD maintenance
Verify radar site: Check that your radar site is correct in config/config.yaml
Solution: Reduce resource usage:
nowcast:
ensemble_members: 1
method: "persistence"Check:
- Are services running?
sudo systemctl status weather-hrrr.timer - Check logs:
sudo journalctl -u weather-hrrr -n 100 - Verify database:
sqlite3 data/weather.db "SELECT COUNT(*) FROM hrrr_forecasts;"
Monitor with:
# Install jtop (Jetson stats)
sudo pip3 install jetson-stats
sudo jtopReduce load:
- Increase timer intervals in systemd service files
- Reduce concurrent downloads in
config.yaml
- Provider: NOAA/NCEP
- Resolution: 3 km
- Update: Hourly
- Forecast: 18 hours
- Access: Via herbie-data (AWS S3 mirror)
- Provider: NOAA/NWS
- Sites: 159 across USA
- Update: ~5 minutes
- Access: AWS S3 (NOAA Big Data Program)
Typical execution times on Jetson Orin NX:
- HRRR ingestion (18 hours): 2-5 minutes
- Radar download: 10-30 seconds
- PySTEPS nowcast (2 hours): 1-3 minutes
- Optical flow nowcast: 10-20 seconds
- Database cleanup: < 10 seconds
The web dashboard exposes these REST API endpoints:
GET /api/current- Current conditionsGET /api/forecast- 18-hour HRRR forecastGET /api/nowcast- 2-hour radar nowcastGET /api/stats- System statisticsGET /health- Health check
Example:
curl http://localhost:8080/api/current | jq .# Install test dependencies
pip3 install pytest pytest-cov
# Run tests
pytest tests/- Edit
config/config.yaml - Find coordinates: https://www.latlong.net/
- Find nearest NEXRAD: https://www.ncei.noaa.gov/maps/nexrad/
- Restart services
Edit files in src/web/:
templates/index.html- HTML structurestatic/css/style.css- Stylingstatic/js/app.js- Frontend logic
Contributions welcome! Areas for improvement:
- Additional nowcast methods (ML-based)
- Bias correction using local observations
- Multi-location support
- Mobile app
- Alert notifications
- Verification metrics dashboard
MIT License - See LICENSE file for details
- NOAA for HRRR and NEXRAD data
- PySTEPS team for nowcasting library
- Herbie developers for GRIB2 access
- NVIDIA for Jetson platform
For issues and questions:
- Create a GitHub Issue
- Check the troubleshooting section above
- Review logs in
logs/directory
Built for edge computing and hyperlocal weather forecasting