diff options
Diffstat (limited to 'weather-widget')
| -rw-r--r-- | weather-widget/README.md | 15 | ||||
| -rw-r--r-- | weather-widget/weather-widget.png | bin | 0 -> 17366 bytes | |||
| -rw-r--r-- | weather-widget/weather.lua | 79 | 
3 files changed, 94 insertions, 0 deletions
diff --git a/weather-widget/README.md b/weather-widget/README.md new file mode 100644 index 0000000..70f0677 --- /dev/null +++ b/weather-widget/README.md @@ -0,0 +1,15 @@ +# Weather widget + + + +Note that widget uses the Arc icon theme, so it should be [installed](https://github.com/horst3180/arc-icon-theme#installation) first under **/usr/share/icons/Arc/** folder. + +## Installation + + - install lua socket +```bash +$ sudo apt-get install luasockets +``` + + - download json parser for lua: https://github.com/rxi/json.lua + - get Open Weather Map app id here: https://openweathermap.org/appid
\ No newline at end of file diff --git a/weather-widget/weather-widget.png b/weather-widget/weather-widget.png Binary files differnew file mode 100644 index 0000000..1d744b2 --- /dev/null +++ b/weather-widget/weather-widget.png diff --git a/weather-widget/weather.lua b/weather-widget/weather.lua new file mode 100644 index 0000000..0762073 --- /dev/null +++ b/weather-widget/weather.lua @@ -0,0 +1,79 @@ +local wibox = require("wibox") +local http = require("socket.http") +local json = require("json") +local naughty = require("naughty") + +local city = "Montreal,ca" +local open_map_key = "<openWeatherMap api key>" +local path_to_icons = "/usr/share/icons/Arc/status/symbolic/" + +local icon_widget = wibox.widget { +    { +        id = "icon", +        resize = false, +        widget = wibox.widget.imagebox, +    }, +    layout = wibox.container.margin(brightness_icon, 0, 0, 3), +    set_image = function(self, path) +        self.icon.image = path +    end, +} + +local temp_widget = wibox.widget{ +    font = "Play 9", +    widget = wibox.widget.textbox, +} + +weather_widget = wibox.widget { +    icon_widget, +    temp_widget, +    layout = wibox.layout.fixed.horizontal, +} + +-- helps to map openWeatherMap icons to Arc icons +local icon_map = { +    ["01d"] = "weather-clear-symbolic.svg", +    ["02d"] = "weather-few-clouds-symbolic.svg", +    ["03d"] = "weather-clouds-symbolic.svg", +    ["04d"] = "weather-overcast-symbolic.svg", +    ["09d"] = "weather-showers-scattered-symbolic.svg", +    ["10d"] = "weather-showers-symbolic.svg", +    ["11d"] = "weather-storm-symbolic.svg", +    ["13d"] = "weather-snow-symbolic.svg", +    ["50d"] = "weather-fog-symbolic.svg", +    ["01n"] = "weather-clear-night-symbolic.svg", +    ["02n"] = "weather-few-clouds-night-symbolic.svg", +    ["03n"] = "weather-clouds-night-symbolic.svg", +    ["04n"] = "weather-overcast-symbolic.svg", +    ["09n"] = "weather-showers-scattered-symbolic.svg", +    ["10n"] = "weather-showers-symbolic.svg", +    ["11n"] = "weather-storm-symbolic.svg", +    ["13n"] = "weather-snow-symbolic.svg", +    ["50n"] = "weather-fog-symbolic.svg" +} + +-- handy function to convert temperatire in Kelvin to Celcius +function to_celcius(kelvin) +    return math.floor(tonumber(kelvin) - 273.15) +end + +local weather_timer = timer({ timeout = 600 }) +local resp + +weather_timer:connect_signal("timeout", function () +    local resp_json = http.request("http://api.openweathermap.org/data/2.5/weather?q=" .. city .."&appid=" .. open_map_key) +    resp = json.decode(resp_json) +    icon_widget.image = path_to_icons .. icon_map[resp.weather[1].icon] +    temp_widget:set_text(to_celcius(resp.main.temp)) +end) +weather_timer:emit_signal("timeout") + +weather_widget:connect_signal("mouse::enter", function() +    naughty.notify{ +        icon = path_to_icons .. icon_map[resp.weather[1].icon], +        icon_size=20, +        text = '<b>Humidity:</b> ' .. resp.main.humidity .. '%<br><b>Temperature: </b>' .. to_celcius(resp.main.temp), +        timeout = 5, hover_timeout = 0.5, +        width = 200, +    } +end)
\ No newline at end of file  | 
