{"id":35644669,"url":"https://github.com/malkosvetnik/desktop-weather-widget","last_synced_at":"2026-01-18T09:56:07.979Z","repository":{"id":331218799,"uuid":"1125753427","full_name":"malkosvetnik/desktop-weather-widget","owner":"malkosvetnik","description":"🌤️ Beautiful desktop weather widget for Windows - Better than Microsoft's built-in!","archived":false,"fork":false,"pushed_at":"2026-01-13T22:57:55.000Z","size":52744,"stargazers_count":6,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-14T00:05:16.919Z","etag":null,"topics":["desktop-app","desktop-widget","open-source","openweathermap","pyqt5","python","serbian","weather","weather-api","windows"],"latest_commit_sha":null,"homepage":"","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/malkosvetnik.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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-12-31T09:44:12.000Z","updated_at":"2026-01-13T22:57:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/malkosvetnik/desktop-weather-widget","commit_stats":null,"previous_names":["malkosvetnik/desktop-weather-widget"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/malkosvetnik/desktop-weather-widget","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malkosvetnik%2Fdesktop-weather-widget","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malkosvetnik%2Fdesktop-weather-widget/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malkosvetnik%2Fdesktop-weather-widget/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malkosvetnik%2Fdesktop-weather-widget/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/malkosvetnik","download_url":"https://codeload.github.com/malkosvetnik/desktop-weather-widget/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malkosvetnik%2Fdesktop-weather-widget/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28534203,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["desktop-app","desktop-widget","open-source","openweathermap","pyqt5","python","serbian","weather","weather-api","windows"],"created_at":"2026-01-05T12:21:31.588Z","updated_at":"2026-01-18T09:56:07.961Z","avatar_url":"https://github.com/malkosvetnik.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🌤️ Desktop Weather Widget v2.2.3\n\n**Elegant, minimalist desktop weather widget with Windows Location support, multi-language localization, and advanced features.**\n\n![Main Widget - Serbian](screenshots/main_widget_serbian.png)\n\n---\n\n## ✨ Key Features\n\n### 🌍 **Location**\n- 🔄 **API Auto-detection** (IP geolocation)\n- 📍 **Windows Location API** (GPS/Wi-Fi triangulation)\n- 🔍 **Manual search** for cities worldwide\n- 🌐 **Reverse geocoding** for city name display\n\n### 🌡️ **Weather Data**\n- 🌤️ **Current weather** with detailed data\n- 📊 **5-day forecast** (min/max temperature)\n- 🕐 **Hourly forecast** for the next 12 hours (tooltip)\n- 🌧️ **Precipitation** with precise predictions (minutely_15)\n- 🌫️ **Air quality** (European AQI) with detailed pollutants\n- ☀️ **UV Index** with color coding by level\n- 👁️ **Visibility**, pressure, cloudiness, wind with direction\n- 🌅 **Sunrise/sunset** times\n\n### 🌐 **Localization**\n- 🇷🇸 **Serbian** (Latin + Cyrillic)\n- 🇬🇧 **English**\n- 🔤 **Automatic conversion** from Cyrillic to Latin\n- 📅 **Localized dates** and days of the week\n\n### ⚙️ **Settings**\n- 🌡️ **Celsius / Fahrenheit** (independent from others)\n- 🕐 **12h / 24h** time format\n- 📏 **Metric / Imperial** units (wind, pressure, visibility)\n- 📍 **API / Windows Location** sources\n- 🔄 **Refresh interval** (5min, 10min, 15min, 30min, 60min)\n- 📐 **Monitor resolution** (8 presets: XGA → 8K UHD)\n\n### 🎨 **UI/UX**\n- 🔒 **Lock/Unlock** widget position\n- 👻 **Click-Through Mode** (mouse transparency)\n- 🖥️ **Widget-only Mode** (without tray icon)\n- 🚀 **Auto-start** with Windows\n- 🔋 **Battery status** (laptops only)\n- 🕐 **Live clock** with seconds\n- 💡 **Tooltips** with detailed data\n- 🌙 **Dark theme** with semi-transparent backgrounds\n\n---\n\n## 📸 Screenshots\n\n### 🇷🇸 Serbian Language\n![Main Widget - Serbian](screenshots/main_widget_serbian.png)\n*Main display with all data*\n\n![Main Widget - 24h format](screenshots/main_widget_24h.png)\n*24-hour time format*\n\n![Main Widget - Celsius](screenshots/main_widget_celsius.png)\n*Celsius temperature (default)*\n\n![Main Widget - Fahrenheit](screenshots/main_widget_fahrenheit.png)\n*Fahrenheit temperature*\n\n![Main Widget - Imperial](screenshots/main_widget_imperial.png)\n*Imperial units (mph, inHg)*\n\n### 🇬🇧 English Language\n![Main Widget - English](screenshots/main_widget_english.png)\n*English language interface*\n\n### 📊 Tooltips\n![Hourly Forecast Tooltip](screenshots/hourly_forecast_tooltip.png)\n*Hourly forecast for 12 hours with tooltip*\n\n![Hourly Forecast 12h](screenshots/hourly_forecast_tooltip_12h.png)\n*Hourly forecast in 12h format*\n\n![Air Quality Tooltip](screenshots/air_quality_tooltip.png)\n*Detailed air pollutants*\n\n![Precipitation Alert](screenshots/precipitation_alert.png)\n*Precipitation warning*\n\n### ⚙️ Menus\n![Tray Menu - Full](screenshots/tray_menu_full.png)\n*Complete tray menu*\n\n![Tray Menu](screenshots/tray_menu.png)\n*Standard tray menu*\n\n![Tray Menu - English](screenshots/tray_menu_english.png)\n*Tray menu in English*\n\n![Language Menu](screenshots/language_menu.png)\n*Language selection*\n\n![Location Menu - Serbian](screenshots/location_menu_serbian.png)\n*Location source menu (Serbian)*\n\n![Location Menu - English](screenshots/location_menu_english.png)\n*Location source menu (English)*\n\n![Temperature Menu - Celsius](screenshots/temperature_menu_celsius.png)\n*Temperature unit selection*\n\n![Time Format Menu](screenshots/time_format_menu.png)\n*Time format selection*\n\n![Unit System Menu](screenshots/unit_system_menu.png)\n*Unit system selection*\n\n---\n\n## 🚀 Installation\n\n### Prerequisite: Python 3.8+\n\n```bash\n# Check Python version\npython --version\n```\n\n### Installing dependencies\n\n```bash\npip install -r requirements.txt\n```\n\n**requirements.txt:**\n```\nPyQt5\u003e=5.15.0\nrequests\u003e=2.25.0\npsutil\u003e=5.8.0\n```\n\n### Running\n\n```bash\npython weather_widget_final.pyw\n```\n\n---\n\n## 🔧 Configuration\n\n### Windows Location Setup\n\nTo use Windows Location API:\n\n1. Open **Settings** (⊞ Win + I)\n2. Go to **Privacy \u0026 Security → Location**\n3. Turn ON **Location services**\n4. Enable **Let apps access your location**\n\nWidget will automatically detect Windows Location status.\n\n### Auto-start with Windows\n\nRight-click on tray icon → **✓ Start with Windows**\n\nWidget will add entry to Windows Registry:\n```\nHKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\n```\n\n---\n\n## 📋 Changelog - v2.2.3 (2025-01-12)\n\n### 🔥 **CRITICAL CHANGES:**\n\n#### ✅ **Windows Location FIX**\n- **Problem:** `geocoder.windows()` method doesn't exist → fell back to IP geolocation\n- **Solution:** Implemented **PowerShell + .NET System.Device.Location API**\n- **Result:** 100% real Windows Location with GPS/Wi-Fi triangulation\n- **Accuracy:** Displays location precision in meters\n- **No dependencies:** No need for `geocoder` library\n\n**Details:**\n```python\n# Old code (DOESN'T WORK):\nimport geocoder\ng = geocoder.windows('me')  # ❌ Doesn't exist!\n\n# New code (WORKS):\nPowerShell → .NET System.Device.Location API → JSON → Python\n```\n\n**Output:**\n```\n🔍 Attempting to get Windows Location (PowerShell)...\n✅ Windows Location successful: (43.9134, 22.2777)\n   Accuracy: 106m\n✅ Windows Location: Zaječar (43.9134, 22.2777)\n```\n\n### 🌐 **Multi-language support:**\n- 🇷🇸 Serbian (Latin)\n- 🇬🇧 English\n- ✅ All labels, menus, tooltips, warnings localized\n- ✅ Automatic conversion from Cyrillic to Latin\n\n### 🌡️ **Temperature \u0026 Unit System:**\n- ✅ Independent **Celsius/Fahrenheit** selection for temperature\n- ✅ **Metric/Imperial** for other units (wind, pressure, visibility)\n- ✅ Consistency between API calls and display\n\n### 🕐 **Time Format:**\n- ✅ 12-hour format with AM/PM\n- ✅ 24-hour format\n- ✅ Localized dates (Monday vs Ponedeljak)\n\n### 🔋 **Battery Status:**\n- ✅ Displays only on laptops\n- ✅ Different icons: 🔌 (charging), 🔋 (full), 🪫 (low/critical)\n- ✅ Dynamic colors (green/white/orange/red)\n- ✅ Real-time updates every 5 seconds\n\n### 🌧️ **Precipitation:**\n- ✅ Minutely_15 forecast (0-2h) for precision\n- ✅ \"Rain NOW!\" / \"Snow NOW!\" warnings\n- ✅ Predictions with \"Rain in 15min\" / \"Snow in 15min\"\n- ✅ Precise weather codes (71-77 = snow, rest = rain)\n\n### 🕐 **Hourly forecast:**\n- ✅ Shows NEXT hour (current skipped)\n- ✅ Tooltip with 12 future hours\n- ✅ Icon, temperature, precipitation probability\n- ✅ Automatic detection of precipitation type (rain/snow)\n\n### 🌫️ **Air Quality:**\n- ✅ European AQI standard\n- ✅ Categories: Excellent/Good/Moderate/Poor/Very Poor\n- ✅ Tooltip with details: PM10, PM2.5, CO, NO₂, SO₂, O₃\n- ✅ Dynamic colors by AQI level\n\n### 🔄 **Sleep/Wake detection:**\n- ✅ Detects laptop sleep/hibernate\n- ✅ Waits 30s before first refresh after wake\n- ✅ Exponential backoff if network not ready\n- ✅ Doesn't destroy last data during offline period\n\n### 🎨 **UI Improvements:**\n- ✅ Consistent colors and font sizes\n- ✅ Transparent backgrounds for all labels\n- ✅ Clickable labels with hover effects for tooltips\n- ✅ Dark tooltip theme\n\n---\n\n## 🐛 Bug Fixes\n\n### v2.2.3:\n- ✅ **CRITICAL:** Windows Location now works (PowerShell implementation)\n- ✅ JSON parsing with regex fallback for PowerShell whitespace\n- ✅ Visibility API consistency (always km, conversion to mi later)\n- ✅ Precipitation API consistency (always mm, conversion to in later)\n- ✅ Wind speed API consistency (m/s → km/h → mph)\n- ✅ Automatic fallback to API location if Windows Location unavailable\n\n### v2.2.2:\n- ✅ Visibility data now from `current` block (not from `hourly`)\n- ✅ Pressure consistency between Metric/Imperial\n- ✅ Temperature_unit parameter in API call\n\n### v2.2.1:\n- ✅ Precipitation unit consistency\n- ✅ Wind speed unit consistency\n\n### v2.2.0:\n- ✅ Click-through mode with Windows API transparent flag\n- ✅ Widget-only mode with tray-removal option\n\n---\n\n## 🛠️ Technical Details\n\n### APIs used:\n- **Weather:** [Open-Meteo](https://open-meteo.com/) (free, no API key)\n- **Air Quality:** [Open-Meteo Air Quality API](https://open-meteo.com/en/docs/air-quality-api)\n- **Geocoding:** [Open-Meteo Geocoding API](https://open-meteo.com/en/docs/geocoding-api)\n- **Reverse Geocoding:** [OpenStreetMap Nominatim](https://nominatim.openstreetmap.org/)\n- **IP Geolocation:** [ip-api.com](http://ip-api.com/)\n- **Windows Location:** .NET System.Device.Location (via PowerShell)\n\n### Architecture:\n- **Framework:** PyQt5\n- **Language:** Python 3.8+\n- **Settings:** QSettings (persistent storage)\n- **Networking:** requests library with retry logic\n- **Sleep detection:** Timer-based with exponential backoff\n\n### Performance:\n- **Refresh rate:** 5-60 minutes (configurable)\n- **Battery update:** Every 5 seconds (laptop only)\n- **Clock update:** Every second\n- **Memory footprint:** ~50-70 MB\n- **CPU usage:** \u003c1% (idle), ~5% (refresh)\n\n---\n\n## 📝 License\n\nMIT License - free to use, modify, and distribute.\n\n---\n\n## 🤝 Contributing\n\nPull requests are welcome! For major changes, please open an issue first to discuss what you'd like to change.\n\n### Development setup:\n\n```bash\n# Clone repo\ngit clone https://github.com/malkosvetnik/Desktop-Weather-Widget.git\ncd Desktop-Weather-Widget\n\n# Install dependencies\npip install -r requirements.txt\n\n# Run\npython weather_widget_final.pyw\n```\n\n---\n\n## 🙏 Acknowledgments\n\n- [Open-Meteo](https://open-meteo.com/) for excellent free Weather API\n- [OpenStreetMap Nominatim](https://nominatim.openstreetmap.org/) for reverse geocoding\n- PyQt5 community for excellent documentation\n- All testers and contributors!\n\n---\n\n## 📞 Contact\n\n- **GitHub:** [@malkosvetnik](https://github.com/malkosvetnik)\n- **Project:** [Desktop Weather Widget](https://github.com/malkosvetnik/Desktop-Weather-Widget)\n\n---\n\n## 🔮 Planned Features\n\n- [ ] Skin system with custom design support\n- [ ] Widget resize with drag-and-drop\n- [ ] Multiple API providers (AccuWeather, WeatherAPI)\n- [ ] Notifications for extreme weather\n- [ ] Weather history with graphs\n- [ ] Export data to CSV/JSON\n\n---\n\n**Enjoy the widget! 🌤️**\n\n---\n\n*Version: 2.2.3 | Released: January 12, 2026*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalkosvetnik%2Fdesktop-weather-widget","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmalkosvetnik%2Fdesktop-weather-widget","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalkosvetnik%2Fdesktop-weather-widget/lists"}