diff --git a/.config/waybar/config b/.config/waybar/config index 7b14f00..7a57cf8 100644 --- a/.config/waybar/config +++ b/.config/waybar/config @@ -20,6 +20,7 @@ "modules-right": [ "tray", "custom/watson", + "custom/weather", "custom/calc", "pulseaudio", // "network", @@ -37,7 +38,7 @@ }, "disk": { "interval": 30, - "format": "{percentage_used}% ", + "format": "{percentage_used}% 💾", }, "sway/mode": { "format": "{}" @@ -192,7 +193,7 @@ "on-click": "playerctl -p tuijam play-pause" }, "custom/watson": { - "format": "{} ", + "format": "{} ⏱️", //"max-length": 15, "interval": 10, "exec": "watson-status", @@ -203,6 +204,14 @@ "interval": 1000, "on-click": "qalculate-gtk" }, + "custom/weather": { + "format": "{}", + "tooltip": true, + "interval": 3600, + "exec": "waybar-wttr.py", + "return-type": "json", + "on-click": "mpv https://radar.weather.gov/ridge/lite/KJAX_loop.gif --loop-file=inf" + }, "custom/playerctl": { "format": "{}", "exec": "" diff --git a/waybar-wttr.py b/waybar-wttr.py new file mode 100755 index 0000000..86a598b --- /dev/null +++ b/waybar-wttr.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python + +import json +import requests +from datetime import datetime + +WEATHER_CODES = { + '113': '☀️', + '116': '⛅️', + '119': '☁️', + '122': '☁️', + '143': '🌫', + '176': '🌦', + '179': '🌧', + '182': '🌧', + '185': '🌧', + '200': '⛈', + '227': '🌨', + '230': '❄️', + '248': '🌫', + '260': '🌫', + '263': '🌦', + '266': '🌦', + '281': '🌧', + '284': '🌧', + '293': '🌦', + '296': '🌦', + '299': '🌧', + '302': '🌧', + '305': '🌧', + '308': '🌧', + '311': '🌧', + '314': '🌧', + '317': '🌧', + '320': '🌨', + '323': '🌨', + '326': '🌨', + '329': '❄️', + '332': '❄️', + '335': '❄️', + '338': '❄️', + '350': '🌧', + '353': '🌦', + '356': '🌧', + '359': '🌧', + '362': '🌧', + '365': '🌧', + '368': '🌨', + '371': '❄️', + '374': '🌧', + '377': '🌧', + '386': '⛈', + '389': '🌩', + '392': '⛈', + '395': '❄️' +} + +data = {} + + +weather = requests.get("https://wttr.in/palm-coast?format=j1").json() + + +def format_time(time): + return time.replace("00", "").zfill(2) + + +def format_temp(temp): + return (hour['FeelsLikeF']+"°").ljust(3) + + +def format_chances(hour): + chances = { + "chanceoffog": "Fog", + "chanceoffrost": "Frost", + "chanceofovercast": "Overcast", + "chanceofrain": "Rain", + "chanceofsnow": "Snow", + "chanceofsunshine": "Sunshine", + "chanceofthunder": "Thunder", + "chanceofwindy": "Wind" + } + + conditions = [] + for event in chances.keys(): + if int(hour[event]) > 0: + conditions.append(chances[event]+" "+hour[event]+"%") + return ", ".join(conditions) + + +data['text'] = WEATHER_CODES[weather['current_condition'][0]['weatherCode']] + \ + " "+weather['current_condition'][0]['FeelsLikeF']+"°" + +data['tooltip'] = f"{weather['current_condition'][0]['weatherDesc'][0]['value']} {weather['current_condition'][0]['temp_F']}°\n" +data['tooltip'] += f"Feels like: {weather['current_condition'][0]['FeelsLikeF']}°\n" +data['tooltip'] += f"Wind: {weather['current_condition'][0]['windspeedMiles']}mph\n" +data['tooltip'] += f"Humidity: {weather['current_condition'][0]['humidity']}%\n" +for i, day in enumerate(weather['weather']): + data['tooltip'] += f"\n" + if i == 0: + data['tooltip'] += "Today, " + if i == 1: + data['tooltip'] += "Tomorrow, " + data['tooltip'] += f"{day['date']}\n" + data['tooltip'] += f"⬆️ {day['maxtempF']}° ⬇️ {day['mintempF']}° " + data['tooltip'] += f"🌅 {day['astronomy'][0]['sunrise']} 🌇 {day['astronomy'][0]['sunset']}\n" + for hour in day['hourly']: + if i == 0: + if int(format_time(hour['time'])) < datetime.now().hour: + continue + data['tooltip'] += f"{format_time(hour['time'])} {WEATHER_CODES[hour['weatherCode']]} {format_temp(hour['FeelsLikeF'])} {hour['weatherDesc'][0]['value']}, {format_chances(hour)}\n" + + +print(json.dumps(data)) +