{"id":31020290,"url":"https://github.com/sentinelbyte/weatherforcastmas","last_synced_at":"2026-02-14T18:01:48.756Z","repository":{"id":313496545,"uuid":"1051619373","full_name":"SentinelByte/WeatherForcastMAS","owner":"SentinelByte","description":"Multi-Agent-System that fetches real-time weather data, generates activity suggestions, and organizes a 7-day forecast.","archived":false,"fork":false,"pushed_at":"2025-09-15T13:37:55.000Z","size":32,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-15T14:46:14.780Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SentinelByte.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-06T11:30:14.000Z","updated_at":"2025-09-15T13:37:56.000Z","dependencies_parsed_at":"2025-09-06T13:30:40.135Z","dependency_job_id":"19bae4bd-88b5-4be7-aed1-612a548e9df6","html_url":"https://github.com/SentinelByte/WeatherForcastMAS","commit_stats":null,"previous_names":["sentinelbyte/weatherforcastmas"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SentinelByte/WeatherForcastMAS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SentinelByte%2FWeatherForcastMAS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SentinelByte%2FWeatherForcastMAS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SentinelByte%2FWeatherForcastMAS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SentinelByte%2FWeatherForcastMAS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SentinelByte","download_url":"https://codeload.github.com/SentinelByte/WeatherForcastMAS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SentinelByte%2FWeatherForcastMAS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29451909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T15:52:44.973Z","status":"ssl_error","status_checked_at":"2026-02-14T15:52:11.208Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-13T10:27:41.912Z","updated_at":"2026-02-14T18:01:48.751Z","avatar_url":"https://github.com/SentinelByte.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WeatherForecastMAS 🌦️\n\nWeatherForecastMAS is a **Multi-Agent System (MAS)** that fetches live weather data, plans daily activities, and maintains a 7-day forecast.  \nIt is designed for learning MAS concepts and for practical use as a personal weather + activity assistant.\n\n---\n\n`Owner: DanCohVax`\n\n## 🚀 Features\n- **Daily Weather Plan** → Fetches today’s conditions \u0026 suggests a randomized activity.\n- **Weekly Forecast** → Stores 7-day weather outlook.\n- **Automatic Updates** → Refreshes forecast every 6 hours via UpdateAgent.\n- **Dashboard** → View data in a Streamlit-powered local web app.\n- **Event-Driven MAS** → Agents communicate via a simple Pub/Sub EventBus.\n- **History Tracking** → Maintains daily weather and activity history with timestamps.\n- **Lightweight \u0026 Free** → Uses free-tier weather APIs.\n\n---\n\n## 📂 Project Structure\n```\n\nweather\\_mas/\n│\n├── agents/                          # all agents live here\n│   ├── weather\\_agent.py              # fetch today’s weather, update history, publish event\n│   ├── planner\\_agent.py              # suggest activities, update history, subscribe to weather events\n│   ├── forecast\\_agent.py             # fetch 7-day forecast, update history\n│   ├── update\\_agent.py               # refresh forecast \u0026 notify planner periodically\n│   └── display\\_agent.py              # output via console or Streamlit dashboard\n│\n├── data/                             # storage for JSON / DB\n│   ├── today.json                     # latest weather\n│   ├── forecast.json                  # 7-day forecast\n│   └── history/                       # historical records\n│       ├── weather\\_history.json       # daily weather records with timestamps\n│       └── activity\\_history.json      # daily activity suggestions with timestamps\n│\n├── dashboard/                        # Streamlit dashboard files\n│   └── app.py\n│\n├── utils/                            # helpers (logging, API calls, config)\n│   ├── api\\_client.py\n│   ├── config.py                      # API keys, city, units\n│   └── event\\_bus.py                   # simple Pub/Sub EventBus implementation\n│\n├── main.py                            # entry point → runs daily workflow using agents\n├── main\\_event\\_mas.py                  # optional: MAS workflow with EventBus and dashboard\n├── update.py                          # entry point → runs every 6h (Update Agent)\n├── requirements.txt                   # dependencies: requests, streamlit, etc.\n└── README.md\n\n````\n\n---\n\n## ⚙️ Configuration\nCreate a `utils/config.py` file with your weather API key:\n\n```python\nAPI_KEY = \"your_weather_api_key\"\nCITY = \"Berlin\"\nUNITS = \"metric\"  # \"imperial\" for Fahrenheit\n````\n\nYou can use [WeatherStack](https://weatherstack.com/) or another free API.\n\n\u003e ⚠️ Do **not** commit `config.py` to GitHub. Use `config.example.py` instead.\n\n---\n\n## 🛠️ Installation\n\n1. Clone the repo:\n\n   ```bash\n   git clone https://github.com/SentinelByte/WeatherForcastMAS.git\n   cd WeatherForecastMAS\n   ```\n\n2. Install dependencies:\n\n   ```bash\n   pip install -r requirements.txt\n   ```\n\n---\n\n## ▶️ Usage\n\n### Run Daily Workflow (fetch today’s weather + weekly forecast)\n\n```bash\npython main.py\n```\n\n### Run EventBus MAS (optional, with dashboard \u0026 inter-agent events)\n\n```bash\npython main_event_mas.py\n```\n\n### Run Forecast Updater (every 6h, via cron/Task Scheduler)\n\n```bash\npython update.py\n```\n\n### Run Dashboard (local visualization)\n\n```bash\nstreamlit run dashboard/app.py\n```\n\n---\n\n## 📅 Automation\n\nUse cron (Linux/macOS) or Task Scheduler (Windows) to automate:\n\n```bash\n# Run daily plan at 7 AM\n0 7 * * * /usr/bin/python3 /path/to/weather_mas/main.py\n\n# Run forecast updater every 6 hours\n0 */6 * * * /usr/bin/python3 /path/to/weather_mas/update.py\n```\n\n---\n\n## 📌 Roadmap\n\n* [ ] Add support for multiple cities\n* [ ] Store historical weather in SQLite\n* [ ] Email/Telegram notifications\n* [ ] Grafana/Streamlit advanced dashboard\n* [ ] Add AI-powered activity recommendations\n\n---\n\n## 📜 License\n\nMIT License – feel free to use and modify.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsentinelbyte%2Fweatherforcastmas","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsentinelbyte%2Fweatherforcastmas","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsentinelbyte%2Fweatherforcastmas/lists"}