86e6499895e684ffa36482271c24fcdc0422e518
🌤️ Weather or Not
A weather-based activity decision engine that tells you whether to ride your motorcycle or mow the lawn today.
Features
- Motorcycle ride check — evaluates temperature, precipitation, wind, humidity, and road conditions
- Lawn mowing check — evaluates weather conditions AND tracks when you last mowed (with configurable cooldown)
- Extensible — add new activities by implementing
BaseActivity - CLI tool — run from terminal or schedule via cron
- Notifications — sends results via Mattermost or Hermes
Quick Start
# Install
pip install -e .
# Run a check (uses config.yaml for location)
weather-or-not
# With verbose output
weather-or-not -v
# Override location
weather-or-not --lat 48.8566 --lon 2.3522 # Paris
# Record that you performed an activity
weather-or-not record mow_lawn
weather-or-not record motorcycle_ride
# Send notification
weather-or-not notify send
Configuration
Copy config.yaml and customize:
location:
latitude: 40.7128 # Your latitude
longitude: -74.0060 # Your longitude
activities:
motorcycle_ride:
enabled: true
min_temp_c: 10
max_temp_c: 35
max_precipitation_mm: 0
max_wind_speed_kmh: 30
mow_lawn:
enabled: true
cooldown_days: 3
max_precipitation_today_mm: 0
max_precipitation_past_24h_mm: 5
Adding New Activities
Create a new file in src/weather_or_not/ that extends BaseActivity:
from weather_or_not.activities import BaseActivity, RuleResult, Verdict
from weather_or_not.weather import WeatherForecast
class MyActivity(BaseActivity):
name = "my_activity"
description = "Check if it's good for my activity"
async def check_rules(self, weather: WeatherForecast) -> list[RuleResult]:
return [
RuleResult(
rule_name="My Rule",
passed=weather.current_temp_c > 15,
message="Temperature is above 15°C",
),
]
Then register it in cli.py's run_check() function.
Data Storage
Activity history is stored in ~/.local/share/weather-or-not/history.json.
License
MIT
Description
Weather-based activity decision engine - tells you whether to ride your motorcycle or mow the lawn
Languages
TypeScript
95%
CSS
4%
JavaScript
1%