Releases: clayauld/satcom-forecast
v0.1.0
What's Changed
- Analyze weather api migration feasibility by @clayauld in #3
- Draft api forecast specification documents by @clayauld in #4
- Migrate satcom forecast to NWS API by @clayauld in #5
- Fix cursor bot by @clayauld in #8
Full Changelog: v0.0.7...v0.1.0
Note: Version numbers have been automatically updated to 0.1.0 in the release artifacts.
v0.0.7
SatCom Forecast v0.0.7 Release Notes
Overview
SatCom Forecast is a Home Assistant integration that fetches National Weather Service (NWS) weather forecasts and sends them via email to satellite communicators like ZOLEO and InReach devices. This release focuses on improving the test suite, enhancing code quality, updating terminology for accuracy, and refining the user experience.
What's New in v0.0.7
🧪 Enhanced Test Suite
- Comprehensive pytest-based testing: Added 55 tests with 0 skips for robust regression testing
- Independent test execution: Tests run without Home Assistant dependencies for faster execution (~0.12s)
- Improved test coverage: Added comprehensive tests for forecast formatting and splitting utilities
- Better test isolation: Refactored test imports to avoid Home Assistant dependencies
🔧 Code Quality Improvements
- Enhanced forecast text formatting: Improved logic for better readability and consistency
- Better message splitting: Enhanced utilities for handling device-specific character limits
- Code cleanup: Removed redundant files and improved project structure
- Documentation updates: Enhanced README with test suite information and improved user guidance
📚 Documentation Enhancements
- Test suite documentation: Added comprehensive information about the pytest-based test suite
- Installation guidance: Improved documentation for both HACS and manual installation methods
- Troubleshooting: Enhanced documentation for common issues and solutions
🎯 Terminology Update
- Accurate data source representation: Updated all references from "NOAA" to "National Weather Service (NWS)" to accurately reflect the data source
- Consistent terminology: Standardized usage of "NWS" throughout codebase and documentation
- Enhanced error messages: Updated error handling and logging to use "NWS" terminology
- Improved clarity: Better representation of the integration's actual data source (NWS forecast.weather.gov API)
Technical Details
Test Suite Improvements
- 55 comprehensive tests covering all major functionality
- Fast execution (~0.12s) without external dependencies
- Coverage reporting with detailed analysis
- Independent execution from Home Assistant environment
Code Refactoring
- Removed redundant files: Cleaned up coverage.json, GITHUB_ACTIONS_SUMMARY.md, and other temporary files
- Improved imports: Better organization and dependency management
- Enhanced error handling: More robust error messages and validation
- Updated terminology: Consistent use of "NWS" instead of "NOAA" throughout codebase
Terminology Updates
- pyproject.toml: Updated description to reflect NWS integration
- README.md: Updated all references to use National Weather Service (NWS)
- Code files: Updated logging, error messages, and comments to use NWS terminology
- Documentation: Updated all docs to accurately represent NWS as the data source
Installation
HACS Installation (Recommended)
- Open HACS in your Home Assistant sidebar
- Go to Integrations
- Click the + button in the bottom right
- Search for "SatCom Forecast"
- Click Download
- Restart Home Assistant
- Go to Settings > Devices & Services > Add Integration
- Search for "SatCom Forecast" and configure
Manual Installation
- Copy the
custom_components/satcom_forecastfolder to your Home Assistantconfig/custom_components/directory - Restart Home Assistant
- Add the integration via the UI
Configuration
The integration uses a two-step configuration process:
Step 1: Email Configuration
- IMAP Host: Your email provider's IMAP server (e.g., imap.gmail.com)
- IMAP Port: IMAP port (usually 993 for SSL, 143 for STARTTLS, 143 for None)
- IMAP Security: Choose SSL (recommended), STARTTLS, or None (unencrypted)
- Username: Your email address or username
- Password: Your email password or app password
- SMTP Host: Your email provider's SMTP server (e.g., smtp.gmail.com)
- SMTP Port: SMTP port (usually 587 for TLS)
- SMTP Username: Your email address
- SMTP Password: Your email password or app password
Step 2: Forecast Configuration
- Mail Folder: Select from available folders in your email account
- Forecast Format: Choose summary, compact, or full format
- Device Type: Select ZOLEO or InReach
- Character Limit: Set message length limit (0 = no limit)
- Debug Logging: Enable detailed logging for troubleshooting
- Scanning Interval: How often to check for new emails (1-1440 minutes)
Usage
To request a weather forecast, send an email to the monitored address with GPS coordinates:
Basic Syntax:
61.11027, -149.79715
With format specification:
61.11027, -149.79715
format: summary
Forecast Formats
- Summary: Concise time-based summaries with weather events and probabilities (1500 character limit)
- Compact: Detailed multi-line format with weather highlights and temperature/wind info (1500 character limit)
- Full: Complete NWS forecast text (2000+ character limit)
Weather Event Detection
All formats support comprehensive weather event detection:
- Precipitation: Rain, showers, drizzle, sprinkles
- Winter Weather: Snow, blizzard, flurries, sleet, freezing rain
- Wind: Significant wind events (15+ mph) with direction and speed
- Thunderstorms: Thunderstorms, severe thunderstorms
- Fog: Fog, dense fog, patchy fog, mist
- Smoke: Areas of smoke, widespread haze, wildfire smoke, heavy smoke (with alarm emoji 🚨)
- Extreme Events: Blizzard, ice storm, tornado, hurricane, severe thunderstorm, high wind warning, flood warning, dense fog, smoke
Special Features
- Warning Indicators: Extreme events and smoke conditions are marked with 🚨
- Temperature Formatting: High/low temperatures with degree symbols (°)
- Wind Detection: Only shows wind events for significant speeds (15+ mph)
- Probability Inference: Provides meaningful percentages when NWS doesn't specify them
- Smart Truncation: Cuts at sentence boundaries to maintain readability
- Standard Abbreviations: Uses standard forecast abbreviations (Tngt for Tonight, Aft for This Afternoon)
Testing
The integration includes a comprehensive test suite that can be run independently:
# Run all tests (55 tests, ~0.12s)
pytest tests/ -v
# Run with coverage
pytest tests/ --cov=custom_components/satcom_forecast --cov-report=htmlBreaking Changes
None in this release.
Known Issues
None currently identified.
Dependencies
- aiohttp>=3.8.0: For HTTP requests to NWS API
- beautifulsoup4>=4.11.0: For HTML parsing
- aiofiles>=23.0.0: For async file operations
- email-validator>=2.0.0: For email validation
Support
- GitHub Issues: Report issues here
- Discussions: Join discussions here
- Documentation: Full documentation
Changelog
v0.0.7 (Current Release)
- ✅ Enhanced test suite with 55 comprehensive tests
- ✅ Improved forecast text formatting and splitting logic
- ✅ Refactored test imports to avoid Home Assistant dependencies
- ✅ Enhanced README and documentation
- ✅ Code cleanup and project structure improvements
- ✅ Updated terminology: Changed all references from "NOAA" to "National Weather Service (NWS)" for accuracy
- ✅ Consistent NWS terminology: Updated code, documentation, and error messages to use NWS terminology
- ✅ Improved data source representation: Better reflects the actual NWS forecast.weather.gov API integration
v0.0.6
- ✅ Fixed linter and GitHub Action errors
- ✅ Implemented comprehensive pre-commit configuration
- ✅ Enhanced CI/CD pipeline
v0.0.5
- ✅ Improved email payload decoding and handling
- ✅ Enhanced message splitting with device-specific limits
- ✅ Better IMAP folder validation and error handling
v0.0.4
- ✅ Added default_days configuration option
- ✅ Enhanced forecast parser with smoke event detection
- ✅ Improved wind detection and event formatting
v0.0.3
- ✅ Initial release with basic functionality
- ✅ IMAP email monitoring
- ✅ NWS forecast fetching
- ✅ Email delivery to satellite communicators
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Contributing
We welcome contributions! Please see our Contributing Guide for details on how to submit pull requests, report issues, and contribute to the project.
Thank you for using SatCom Forecast! 🌤️📡
If you find this integration helpful, please consider supporting the project by buying me a coffee.
Note: Version numbers have been automatically updated to 0.0.7 in the release artifacts.
v0.0.6
v0.0.5
v0.0.4
Release Notes for SatCom Forecast v0.0.4
🚨 Critical Fixes
Fixed Asyncio Blocking Operations Error
- Issue: Home Assistant was throwing asyncio blocking operations errors during integration startup
- Root Cause: The integration was using blocking file I/O, IMAP, and SMTP operations in async contexts
- Solution: Converted all blocking operations to async equivalents:
- Replaced with for file operations
- Replaced with for IMAP operations
- Replaced with for SMTP operations
- Added proper keywords throughout the codebase
Fixed Infinite Loop in Text Splitting
- Issue: Integration would hang indefinitely when processing certain text splitting scenarios
- Root Cause: Negative or zero character limits caused infinite loops in the text splitting algorithm
- Solution: Added proper validation and safety checks:
- Minimum safe limit validation (17 characters minimum)
- Fallback to device defaults for invalid limits
- Safety checks in function
- Proper handling of empty text input
🔧 Technical Improvements
Enhanced Error Handling
- Added comprehensive error handling for IMAP connection failures
- Improved SMTP error reporting and recovery
- Better logging for debugging integration issues
- Graceful fallbacks for edge cases
Code Quality Improvements
- Converted all I/O operations to async patterns following Home Assistant best practices
- Added proper exception handling throughout the codebase
- Improved logging with debug information for troubleshooting
- Enhanced code documentation and type hints
📦 Dependency Updates
New Dependencies
-
- For async file operations
-
- For async IMAP operations
-
- For async SMTP operations
Removed Dependencies
- Removed problematic third-party async libraries that caused permission issues in Home Assistant containers
🧪 Testing Improvements
New Test Suite
- Added comprehensive text length and splitting tests ()
- Tests cover device character limits (ZOLEO 200 chars, InReach 160 chars)
- Tests for custom character limit overrides
- Tests for edge cases and boundary conditions
- Tests for text utilization and word boundary protection
Test Coverage
- Device type default limits
- Custom limit priority overrides
- Part numbering overhead calculations
- Empty and short text handling
- Very long text splitting scenarios
- Different format types (summary, compact, full)
🔄 Migration Notes
For Existing Users
- No configuration changes required - all existing configurations will continue to work
- Automatic migration - the integration will automatically update to use async operations
- Improved reliability - fewer crashes and hanging issues
For New Users
- Enhanced setup experience with better error messages
- More robust IMAP and SMTP connection handling
- Improved debugging capabilities
🐛 Bug Fixes
- Fixed integration startup failures due to asyncio blocking operations
- Fixed infinite loops in text splitting algorithm
- Fixed IndexError when processing empty text
- Fixed permission issues with third-party async libraries
- Improved error handling for network timeouts and connection failures
📈 Performance Improvements
- Faster startup - No more blocking operations during integration initialization
- Better resource utilization - Proper async I/O prevents event loop blocking
- Improved reliability - More robust error handling and recovery
🔍 Debugging Enhancements
- Added comprehensive debug logging throughout the codebase
- Better error messages for troubleshooting
- Debug service for enabling/disabling debug logging at runtime
- Detailed logging of IMAP and SMTP operations
📋 Known Issues
- None reported in this release
🔮 Future Enhancements
- Enhanced text splitting algorithms for better character utilization
- Additional device type support
- Improved forecast parsing and formatting
- Enhanced error recovery mechanisms
📞 Support
For issues, questions, or feature requests:
- GitHub Issues: https://github.com/clayauld/satcom-forecast/issues
- Documentation: https://github.com/clayauld/satcom-forecast
Previous Versions
Version 0.0.2
- Initial public release
- Basic IMAP/SMTP functionality
- NOAA weather forecast integration
- Device-specific character limits
Version 0.0.1
- Initial development release
- Core functionality implementation
Full Changelog: Compare v0.0.3...v0.0.4
Download: v0.0.4.zip
Note: Version numbers have been automatically updated to 0.0.4 in the release artifacts.
v0.0.3
Release Notes for SatCom Forecast v0.0.3
🚀 Major Features & Improvements
🔥 Advanced Smoke Detection & Labeling
- Robust Smoke Event Detection: Improved detection of smoke-related phrases including "areas of smoke", "widespread haze", "wildfire smoke", and "heavy smoke"
- Clear Visual Indicators: All smoke events now display with alarm emoji (🚨) and consistent "Smoke" labeling
- Priority Handling: Smoke keywords now override fog/haze detection to ensure proper categorization
- Distinct Probability Levels:
- Areas of smoke: 65%
- Wildfire smoke: 75%
- Heavy smoke: 90%
- Widespread haze: 50%
📅 Standard Forecast Abbreviations
- Tonight: Now uses standard "Tngt" abbreviation instead of "Tnt" or "Ton"
- This Afternoon: Added support with "Aft" abbreviation
- Consistent Formatting: All forecast periods now use industry-standard abbreviations
🌧️ Enhanced Precipitation Handling
- Explicit Percentages: Explicit precipitation percentages are now always used when available
- Bug Fix: Smoke events no longer incorrectly inherit precipitation percentages
- Smart Inference: Improved probability inference when NOAA doesn't specify percentages
🧪 Modern Test Suite
- Pytest Integration: Migrated from legacy test runner to modern pytest framework
- Test Consolidation: Merged 15+ legacy test files into a single, comprehensive test suite
- Comprehensive Coverage: Tests now cover all core functionality, smoke detection, period detection, and edge cases
- Better Organization: Tests organized in classes with clear, descriptive method names
- Parametrized Testing: Efficient testing of multiple scenarios with pytest.mark.parametrize
🔧 Code Quality Improvements
- Case-Insensitive Matching: Event detection now uses lowercase matching for robustness
- Keyword Conflict Resolution: Removed "haze" from fog keywords to prevent conflicts with smoke detection
- Debug Enhancements: Added and removed debug prints as needed for better troubleshooting
- Error Handling: Improved error handling throughout the codebase
📋 Detailed Changes
Forecast Parser Updates
- Updated period abbreviation logic to use "Tngt" for "Tonight"
- Enhanced smoke detection with specific probability levels
- Improved event detection priority (smoke overrides fog/haze)
- Better handling of explicit vs. inferred precipitation percentages
Test Suite Modernization
- Before: 15+ separate test files with legacy runner
- After: Single
tests/test_forecast_parser.pywith pytest framework - Coverage: All core functionality, weather events, period detection, and real-world scenarios
- Commands:
pytest tests/ -vinstead ofpython run_tests.py
Documentation Updates
- Updated all documentation to reflect new features
- Added comprehensive testing instructions
- Updated format comparison examples with new abbreviations
- Enhanced troubleshooting guides with pytest instructions
🎯 Breaking Changes
- Abbreviation Change: "Tonight" now displays as "Tngt" instead of "Tnt" in summary format
- Test Commands: Legacy test runner deprecated in favor of pytest
🚨 Bug Fixes
- Fixed smoke events incorrectly inheriting precipitation percentages
- Resolved case sensitivity issues in weather event detection
- Fixed "widespread haze" not being detected as smoke due to keyword conflicts
- Corrected summary logic to properly include "This Afternoon" and "Tonight" for day 0
📊 Test Results
- ✅ All 15 pytest tests passing
- ✅ Comprehensive coverage of core functionality
- ✅ Smoke detection with probability levels working correctly
- ✅ Period detection and abbreviations functioning properly
- ✅ Real-world forecast scenarios validated
🔄 Migration Guide
For Users
- No action required - all changes are backward compatible
- New "Tngt" abbreviation will appear in summary format
- Enhanced smoke detection will provide better alerts
For Developers
- Update test commands: use
pytest tests/ -vinstead of legacy runner - New test structure in
tests/test_forecast_parser.py - Updated documentation reflects all changes
📦 Installation
- HACS: Update through HACS UI
- Manual: Replace existing files and restart Home Assistant
- Git: Pull latest changes and restart
🧪 Testing
# Run all tests
pytest tests/ -v
# Run specific test categories
pytest tests/test_forecast_parser.py -v
pytest tests/test_imap_handler.py -v📚 Documentation
- Updated README.md with new features
- Enhanced format comparison documentation
- Modernized test suite documentation
- Updated troubleshooting and installation guides
Full Changelog: Compare v0.0.2...v0.0.3
Download: v0.0.3.zip
v0.0.2
Release Notes for SatCom Forecast v0.0.2
🚀 Major Enhancements
🌤️ Enhanced Weather Event Detection
- Smoke Detection: Added comprehensive wildfire smoke detection as a separate event from fog
- Wind Filtering: Implemented significant wind detection (15+ mph) to reduce noise from light breezes
- Extreme Event Highlighting: Added
⚠️ warning indicators for extreme weather events (blizzard, tornado, hurricane, severe thunderstorm, high wind warning, flood warning, dense fog, smoke)
📊 Improved Forecast Formats
- Summary Format: Enhanced with temperature information (H:64°, L:45°) and wind data for significant events
- Compact Format: Increased character limit from 1000 to 1500 characters for longer forecasts like Fairbanks
- Probability Display: All formats now show meaningful probability percentages for weather events
- Temperature Formatting: Consistent degree symbol (°) usage across all formats
🔧 Technical Improvements
- Wind Parsing: Fixed "becoming 5 to 10 mph" parsing to output "SE5-10mph" instead of "510mph"
- Event Consolidation: Improved merging logic for duplicate weather events across time periods
- Smart Truncation: Enhanced sentence boundary detection to prevent mid-sentence cuts
🐛 Bug Fixes
- Fixed wind speed range parsing in summary format (was showing "510mph", now shows "5-10mph")
- Resolved duplicate warning indicators in compact format
- Fixed temperature formatting consistency across all formats
- Corrected wind event detection for "becoming" phrases
📚 Documentation Updates
- README.md: Updated to reflect all new features including smoke detection, warning indicators, and wind filtering
- Format Comparison: Comprehensive documentation of all three forecast formats with current examples
- Test Suite: Updated all tests to match current implementation and expected outputs
🧪 Testing Enhancements
- Updated core functionality tests to reflect current implementation
- Fixed test expectations for wind parsing and temperature formatting
- Enhanced test coverage for new weather event detection features
⚠️ Breaking Changes
- None: This release maintains backward compatibility with existing configurations
📋 System Requirements
- Home Assistant 2023.1+
- Python 3.8+
- Internet connection for NOAA API access
🚀 Installation
# HACS Installation (Recommended)
1. Open HACS in Home Assistant
2. Go to Integrations
3. Search for "SatCom Forecast"
4. Click Download and restart Home Assistant
5. Add integration via Settings > Devices & Services🎯 New Features in Detail
Smoke Detection
- Detects wildfire smoke, smoke conditions, and smoke from fires
- Separate from fog detection for more accurate weather reporting
- Includes probability inference (70-90% depending on intensity)
- Marked with
⚠️ warning indicator as an extreme event
Wind Event Filtering
- Only shows wind events for speeds 15+ mph
- Reduces noise from light breezes in forecasts
- Maintains wind direction and speed information for significant events
- Works across all forecast formats
Enhanced Temperature Display
- High/low temperatures with degree symbols (°)
- Consistent formatting: H:64°, L:45°
- Includes wind information for significant events
- Available in both summary and compact formats
🔧 Configuration
No configuration changes required for existing users. New features are automatically enabled.
📞 Support
- GitHub Issues: https://github.com/clayauld/satcom-forecast/issues
- Documentation: https://github.com/clayauld/satcom-forecast
Thank you for using SatCom Forecast! 🌤️📡
This release significantly improves the accuracy and usefulness of weather forecasts for satellite communicators, with particular attention to extreme weather events and user experience.
v0.0.1 Initial Release
Initial Release
Full Changelog: https://github.com/clayauld/satcom-forecast/commits/v0.0.1