adding readme.md
This commit is contained in:
173
README.md
Normal file
173
README.md
Normal file
@@ -0,0 +1,173 @@
|
||||
# Weather Alerts
|
||||
|
||||
A Python application that monitors weather forecasts and sends push notifications when conditions match your alert rules.
|
||||
|
||||
## How It Works
|
||||
|
||||
1. Queries the Visual Crossing Weather API for upcoming forecast data
|
||||
2. Evaluates forecast conditions against configurable alert rules
|
||||
3. Sends notifications to an ntfy server when alert conditions are triggered
|
||||
4. Tracks sent alerts to prevent duplicate notifications
|
||||
|
||||
## Configuration
|
||||
|
||||
All configuration is managed in `app/config/settings.yaml`. Copy from `settings.example.yaml` to get started:
|
||||
|
||||
```bash
|
||||
cp app/config/settings.example.yaml app/config/settings.yaml
|
||||
```
|
||||
|
||||
## Location Configuration
|
||||
|
||||
Set your location in `settings.yaml` under the `weather.location` field.
|
||||
|
||||
### Supported Location Formats
|
||||
|
||||
Visual Crossing supports several location formats:
|
||||
|
||||
| Format | Example | Notes |
|
||||
|--------|---------|-------|
|
||||
| City, State (US) | `"Chicago,IL"` | State abbreviation or full name |
|
||||
| City, Country | `"Paris,France"`, `"Tokyo,Japan"` | For international locations |
|
||||
| City, State, Country | `"Chicago,IL,USA"` | Most explicit format |
|
||||
| Full Address | `"620 Herndon Parkway, Herndon, Virginia, 20170, USA"` | Street-level precision |
|
||||
| ZIP/Postal Code | `"20170"` | US ZIP codes work directly |
|
||||
| Coordinates | `"40.7128,-74.0060"` | Latitude,longitude in decimal degrees |
|
||||
|
||||
### Location Best Practices
|
||||
|
||||
- **Include state/country** to avoid ambiguity (many cities share names like "Springfield")
|
||||
- **Coordinates are fastest** and most precise - no geocoding lookup required
|
||||
- **URL encoding is handled automatically** by the application
|
||||
|
||||
### Coordinate Format
|
||||
|
||||
For latitude/longitude coordinates:
|
||||
- Latitude: -90 to 90 (negative values = southern hemisphere)
|
||||
- Longitude: -180 to 180 (negative values = western hemisphere)
|
||||
- Format: `"latitude,longitude"` (e.g., `"35.8456,-86.4244"` for Viola, TN)
|
||||
|
||||
## Alert Rules Configuration
|
||||
|
||||
Configure alert rules under `alerts.rules` in settings.yaml. Each rule can be independently enabled or disabled.
|
||||
|
||||
### Temperature Alerts
|
||||
|
||||
```yaml
|
||||
temperature:
|
||||
enabled: true
|
||||
below: 32 # Alert when temperature falls below (freezing warning)
|
||||
above: 95 # Alert when temperature exceeds (heat warning)
|
||||
```
|
||||
|
||||
Both thresholds are optional - set only the ones you need.
|
||||
|
||||
### Precipitation Alerts
|
||||
|
||||
```yaml
|
||||
precipitation:
|
||||
enabled: true
|
||||
probability_above: 60 # Alert when rain/snow chance exceeds this percentage
|
||||
```
|
||||
|
||||
### Wind Alerts
|
||||
|
||||
```yaml
|
||||
wind:
|
||||
enabled: true
|
||||
speed_above: 25 # Sustained wind threshold (mph for "us" units)
|
||||
gust_above: 30 # Wind gust threshold (mph for "us" units)
|
||||
```
|
||||
|
||||
Either threshold can trigger an alert independently.
|
||||
|
||||
### Severe Weather Alerts
|
||||
|
||||
```yaml
|
||||
severe_weather:
|
||||
enabled: true # Forward NWS severe weather alerts from the API
|
||||
```
|
||||
|
||||
When enabled, forwards official severe weather alerts (tornado warnings, flash flood warnings, etc.) from the National Weather Service via the Visual Crossing API.
|
||||
|
||||
## Other Configuration Options
|
||||
|
||||
### Weather Settings
|
||||
|
||||
```yaml
|
||||
weather:
|
||||
location: "viola,tn" # Your location (see formats above)
|
||||
hours_ahead: 24 # How many hours of forecast to check
|
||||
unit_group: "us" # "us" for Fahrenheit/mph, "metric" for Celsius/kph
|
||||
```
|
||||
|
||||
### Notification Settings
|
||||
|
||||
```yaml
|
||||
notifications:
|
||||
ntfy:
|
||||
server_url: "https://ntfy.sneakygeek.net"
|
||||
topic: "weather-alerts"
|
||||
priority: "high" # min, low, default, high, urgent
|
||||
tags: ["cloud", "warning"] # Emoji tags for notifications
|
||||
```
|
||||
|
||||
### State Management
|
||||
|
||||
```yaml
|
||||
state:
|
||||
file_path: "./data/state.json"
|
||||
dedup_window_hours: 24 # Prevent duplicate alerts within this time window
|
||||
```
|
||||
|
||||
The deduplication window prevents the same alert from being sent repeatedly. A "High Wind Warning" at 3 PM won't be sent again until 24 hours later (with default settings).
|
||||
|
||||
### Application Settings
|
||||
|
||||
```yaml
|
||||
app:
|
||||
name: "weather-alerts"
|
||||
version: "1.0.0"
|
||||
log_level: "INFO" # DEBUG, INFO, WARNING, ERROR
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
Create a `.env` file in the project root with your secrets:
|
||||
|
||||
```bash
|
||||
VISUALCROSSING_API_KEY=your_api_key_here
|
||||
NTFY_ACCESS_TOKEN=your_ntfy_token_here
|
||||
```
|
||||
|
||||
| Variable | Required | Description |
|
||||
|----------|----------|-------------|
|
||||
| `VISUALCROSSING_API_KEY` | Yes | API key from [Visual Crossing](https://www.visualcrossing.com/) |
|
||||
| `NTFY_ACCESS_TOKEN` | Yes* | Authentication token for ntfy server (*if server requires auth) |
|
||||
|
||||
## Example Configuration
|
||||
|
||||
Here's a complete example for monitoring weather in New York City:
|
||||
|
||||
```yaml
|
||||
weather:
|
||||
location: "New York,NY,USA"
|
||||
hours_ahead: 12
|
||||
unit_group: "us"
|
||||
|
||||
alerts:
|
||||
rules:
|
||||
temperature:
|
||||
enabled: true
|
||||
below: 20 # Alert for very cold temps
|
||||
above: 95 # Alert for heat waves
|
||||
precipitation:
|
||||
enabled: true
|
||||
probability_above: 70
|
||||
wind:
|
||||
enabled: true
|
||||
speed_above: 30
|
||||
gust_above: 45
|
||||
severe_weather:
|
||||
enabled: true
|
||||
```
|
||||
Reference in New Issue
Block a user