From 9604aef6ba70bfddc20160a6d1b57d6cb4fa1425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Jaenisch?= Date: Thu, 10 Oct 2024 16:27:23 +0200 Subject: [PATCH 1/7] feat: show hourly forecast MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This took me quite some trial and error to figure out. Signed-off-by: André Jaenisch --- weather-api-widget/README.md | 3 +- weather-api-widget/weather.lua | 194 ++++++++++++++++++++++++++++++++- 2 files changed, 190 insertions(+), 7 deletions(-) diff --git a/weather-api-widget/README.md b/weather-api-widget/README.md index f752dbb..9bfc5bc 100644 --- a/weather-api-widget/README.md +++ b/weather-api-widget/README.md @@ -18,7 +18,8 @@ following config parameters: | units | `metric` | `metric` for celsius, `imperial` for fahrenheit | | icon_pack_name | `weather-underground-icons` | Name of the icon pack, could be `weather-underground-icon` or `VitalyGorbachev` or create your own, more details below | | icons_extension | `.png` | File extension of icons in the pack | -| show_forecast | false | Show forecast for next three days | +| show_daily_forecast | false | Show forecast for next three days | +| show_hourly_forecast | false | Show hourly forecast section | | timeout | 120 | How often in seconds the widget refreshes | ### Icons: diff --git a/weather-api-widget/weather.lua b/weather-api-widget/weather.lua index 34a542f..6f9d601 100644 --- a/weather-api-widget/weather.lua +++ b/weather-api-widget/weather.lua @@ -171,14 +171,16 @@ local function worker(user_args) local api_key = args.api_key local font_name = args.font_name or beautiful.font:gsub("%s%d+$", "") local units = args.units or 'metric' + local time_format_12h = args.time_format_12h local both_units_widget = args.both_units_widget or false local icon_pack_name = args.icons or 'weather-underground-icons' local icons_extension = args.icons_extension or '.png' - local show_forecast = args.show_forecast or false + local show_daily_forecast = args.show_daily_forecast or false + local show_hourly_forecast = args.show_hourly_forecast or false local timeout = args.timeout or 120 local ICONS_DIR = WIDGET_DIR .. '/icons/' .. icon_pack_name .. '/' - -- Forecast endpoint includes current. I could map show_forecast to days here. + -- Forecast endpoint includes current. I could map show_daily_forecast to days here. -- Currently overfetching but only showing when opting in. local weather_api = ('https://api.weatherapi.com/v1/forecast.json' .. @@ -304,7 +306,7 @@ local function worker(user_args) end } - local forecast_widget = { + local daily_forecast_widget = { forced_width = 300, layout = wibox.layout.flex.horizontal, update = function(self, forecast) @@ -364,6 +366,181 @@ local function worker(user_args) end } + local hourly_forecast_graph = wibox.widget { + step_width = 12, + color = '#EBCB8B', + background_color = beautiful.bg_normal, + forced_height = 100, + forced_width = 300, + widget = wibox.widget.graph, + set_max_value = function(self, new_max_value) + self.max_value = new_max_value + end, + set_min_value = function(self, new_min_value) + self.min_value = new_min_value + end, + } + + local hourly_forecast_negative_graph = wibox.widget { + step_width = 12, + color = '#5E81AC', + background_color = beautiful.bg_normal, + forced_height = 100, + forced_width = 300, + widget = wibox.widget.graph, + set_max_value = function(self, new_max_value) + self.max_value = new_max_value + end, + set_min_value = function(self, new_min_value) + self.min_value = new_min_value + end, + } + + local hourly_forecast_widget = { + layout = wibox.layout.fixed.vertical, + update = function(self, hourly) + local hours_below = { + id = 'hours', + forced_width = 300, + layout = wibox.layout.flex.horizontal + } + local temp_below = { + id = 'temp', + forced_width = 300, + layout = wibox.layout.flex.horizontal + } + + local max_temp = -1000 + local min_temp = 1000 + local values= {} + + -- Yeah, this looks weird. I would expect to have to use ipairs + for i, hour in pairs(hourly) do + if i > 25 then + break + end + + values[i] = hour.temp_c + + if max_temp < hour.temp_c then + max_temp = hour.temp_c + end + + if min_temp > hour.temp_c then + min_temp = hour.temp_c + end + + if (i - 1) % 5 == 0 then + table.insert(hours_below, wibox.widget { + text = os.date(time_format_12h and '%I%p' or '%H:00', tonumber(hour.time_epoch)), + align = 'center', + font = font_name .. ' 9', + widget = wibox.widget.textbox + }) + + table.insert(temp_below, wibox.widget { + markup = ' 0 and '#2E3440' or '#ECEFF4') .. '">' + .. string.format('%.0f', hour.temp_c) .. '°' .. '', + align = 'center', + font = font_name .. ' 9', + widget = wibox.widget.textbox + }) + end + end + + hourly_forecast_graph:set_max_value(math.max(max_temp, math.abs(min_temp))) + hourly_forecast_graph:set_min_value(min_temp > 0 and min_temp * 0.7 or 0) -- move graph a bit up + + hourly_forecast_negative_graph:set_max_value(math.abs(min_temp)) + hourly_forecast_negative_graph:set_min_value(max_temp < 0 and math.abs(max_temp) * 0.7 or 0) + + for _, value in ipairs(values) do + if value >= 0 then + hourly_forecast_graph:add_value(value) + hourly_forecast_negative_graph:add_value(0) + else + hourly_forecast_graph:add_value(0) + hourly_forecast_negative_graph:add_value(math.abs(value)) + end + end + + local count = #self + for i = 0, count do + self[i] = nil + end + + -- all temperatures are positive + if min_temp > 0 then + table.insert(self, wibox.widget { + { + hourly_forecast_graph, + reflection = { horizontal = true }, + widget = wibox.container.mirror + }, + { + temp_below, + valign = 'bottom', + widget = wibox.container.place + }, + id = 'graph', + layout = wibox.layout.stack + }) + table.insert(self, hours_below) + + -- all temperatures are negative + elseif max_temp < 0 then + table.insert(self, hours_below) + table.insert(self, wibox.widget { + { + hourly_forecast_negative_graph, + reflection = { horizontal = true, vertical = true }, + widget = wibox.container.mirror + }, + { + temp_below, + valign = 'top', + widget = wibox.container.place + }, + id = 'graph', + layout = wibox.layout.stack + }) + + -- mixed temperatures + else + table.insert(self, wibox.widget { + { + hourly_forecast_graph, + reflection = { horizontal = true }, + widget = wibox.container.mirror + }, + { + temp_below, + valign = 'bottom', + widget = wibox.container.place + }, + id = 'graph', + layout = wibox.layout.stack + }) + + table.insert(self, wibox.widget { + { + hourly_forecast_negative_graph, + reflection = { horizontal = true, vertical = true }, + widget = wibox.container.mirror + }, + { + temp_below, + valign = 'top', + widget = wibox.container.place + }, + id = 'graph', + layout = wibox.layout.stack + }) + end + end + } + local function update_widget(widget, stdout, stderr) if stderr ~= '' then if not warning_shown then @@ -411,9 +588,14 @@ local function worker(user_args) } - if show_forecast then - forecast_widget:update(result.forecast.forecastday) - table.insert(final_widget, forecast_widget) + if show_hourly_forecast then + hourly_forecast_widget:update(result.forecast.forecastday[1].hour) + table.insert(final_widget, hourly_forecast_widget) + end + + if show_daily_forecast then + daily_forecast_widget:update(result.forecast.forecastday) + table.insert(final_widget, daily_forecast_widget) end weather_popup:setup({ From f5e81dea79f6e43f483e10377aee3d0ab71e8a4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Jaenisch?= Date: Fri, 11 Oct 2024 08:51:24 +0200 Subject: [PATCH 2/7] fix: remove superfluous quotation mark MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit NeoVim tried to be helpful. Signed-off-by: André Jaenisch --- weather-api-widget/weather.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weather-api-widget/weather.lua b/weather-api-widget/weather.lua index 6f9d601..35705ec 100644 --- a/weather-api-widget/weather.lua +++ b/weather-api-widget/weather.lua @@ -439,7 +439,7 @@ local function worker(user_args) }) table.insert(temp_below, wibox.widget { - markup = ' 0 and '#2E3440' or '#ECEFF4') .. '">' .. string.format('%.0f', hour.temp_c) .. '°' .. '', align = 'center', From 87259502cfac8ea92a18f28faeee17d73491e437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Jaenisch?= Date: Tue, 22 Oct 2024 09:04:01 +0200 Subject: [PATCH 3/7] feat: add preview on hover MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This was a nice contribution! Co-authored-by: trap000d Signed-off-by: André Jaenisch --- weather-api-widget/weather.lua | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/weather-api-widget/weather.lua b/weather-api-widget/weather.lua index 35705ec..20233ac 100644 --- a/weather-api-widget/weather.lua +++ b/weather-api-widget/weather.lua @@ -619,6 +619,18 @@ local function worker(user_args) end end))) + weather_widget:connect_signal("mouse::enter", function() + weather_widget:set_bg(beautiful.bg_focus) + weather_popup:move_next_to(mouse.current_widget_geometry) + end) + + weather_widget:connect_signal("mouse::leave", function() + if weather_popup.visible then + weather_widget:set_bg('#00000000') + weather_popup.visible = not weather_popup.visible + end + end) + watch( string.format(GET_FORECAST_CMD, weather_api), timeout, -- API limit is 1k req/day; day has 1440 min; every 2 min is good From d64dd366f3c5fcc3172e327dd4d50e0d42dcc370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Jaenisch?= Date: Tue, 22 Oct 2024 09:14:51 +0200 Subject: [PATCH 4/7] chore: track example_response.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This should ease the job of updating this widget. Signed-off-by: André Jaenisch --- weather-api-widget/example_response.json | 3057 ++++++++++++++++++++++ 1 file changed, 3057 insertions(+) create mode 100644 weather-api-widget/example_response.json diff --git a/weather-api-widget/example_response.json b/weather-api-widget/example_response.json new file mode 100644 index 0000000..dfc8e8d --- /dev/null +++ b/weather-api-widget/example_response.json @@ -0,0 +1,3057 @@ +{ + "location": { + "name": "Toronto", + "region": "Ontario", + "country": "Canada", + "lat": 43.667, + "lon": -79.417, + "tz_id": "America/Toronto", + "localtime_epoch": 1729581202, + "localtime": "2024-10-22 03:13" + }, + "current": { + "last_updated_epoch": 1729580400, + "last_updated": "2024-10-22 03:00", + "temp_c": 13.2, + "temp_f": 55.8, + "is_day": 0, + "condition": { + "text": "Clear", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 5.1, + "wind_kph": 8.3, + "wind_degree": 226, + "wind_dir": "SW", + "pressure_mb": 1022.0, + "pressure_in": 30.17, + "precip_mm": 0.0, + "precip_in": 0.0, + "humidity": 88, + "cloud": 0, + "feelslike_c": 12.7, + "feelslike_f": 54.9, + "windchill_c": 14.6, + "windchill_f": 58.2, + "heatindex_c": 14.8, + "heatindex_f": 58.6, + "dewpoint_c": 12.9, + "dewpoint_f": 55.2, + "vis_km": 14.0, + "vis_miles": 8.0, + "uv": 0.0, + "gust_mph": 10.8, + "gust_kph": 17.4 + }, + "forecast": { + "forecastday": [ + { + "date": "2024-10-22", + "date_epoch": 1729555200, + "day": { + "maxtemp_c": 22.1, + "maxtemp_f": 71.8, + "mintemp_c": 12.7, + "mintemp_f": 54.9, + "avgtemp_c": 17.2, + "avgtemp_f": 62.9, + "maxwind_mph": 9.6, + "maxwind_kph": 15.5, + "totalprecip_mm": 0.0, + "totalprecip_in": 0.0, + "totalsnow_cm": 0.0, + "avgvis_km": 10.0, + "avgvis_miles": 6.0, + "avghumidity": 76, + "daily_will_it_rain": 0, + "daily_chance_of_rain": 0, + "daily_will_it_snow": 0, + "daily_chance_of_snow": 0, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "uv": 0.6 + }, + "astro": { + "sunrise": "07:42 AM", + "sunset": "06:22 PM", + "moonrise": "10:20 PM", + "moonset": "02:02 PM", + "moon_phase": "Waning Gibbous", + "moon_illumination": 74, + "is_moon_up": 0, + "is_sun_up": 0 + }, + "hour": [ + { + "time_epoch": 1729569600, + "time": "2024-10-22 00:00", + "temp_c": 16.6, + "temp_f": 61.8, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 4.9, + "wind_kph": 7.9, + "wind_degree": 247, + "wind_dir": "WSW", + "pressure_mb": 1021.0, + "pressure_in": 30.16, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 84, + "cloud": 0, + "feelslike_c": 16.6, + "feelslike_f": 61.8, + "windchill_c": 16.6, + "windchill_f": 61.8, + "heatindex_c": 16.6, + "heatindex_f": 61.8, + "dewpoint_c": 13.7, + "dewpoint_f": 56.6, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.3, + "gust_kph": 16.6, + "uv": 0 + }, + { + "time_epoch": 1729573200, + "time": "2024-10-22 01:00", + "temp_c": 15.9, + "temp_f": 60.6, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 4.7, + "wind_kph": 7.6, + "wind_degree": 238, + "wind_dir": "WSW", + "pressure_mb": 1021.0, + "pressure_in": 30.15, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 86, + "cloud": 0, + "feelslike_c": 15.9, + "feelslike_f": 60.6, + "windchill_c": 15.9, + "windchill_f": 60.6, + "heatindex_c": 15.9, + "heatindex_f": 60.6, + "dewpoint_c": 13.5, + "dewpoint_f": 56.3, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 9.8, + "gust_kph": 15.8, + "uv": 0 + }, + { + "time_epoch": 1729576800, + "time": "2024-10-22 02:00", + "temp_c": 15.3, + "temp_f": 59.5, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 5.1, + "wind_kph": 8.3, + "wind_degree": 233, + "wind_dir": "SW", + "pressure_mb": 1021.0, + "pressure_in": 30.16, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 88, + "cloud": 0, + "feelslike_c": 15.2, + "feelslike_f": 59.3, + "windchill_c": 15.2, + "windchill_f": 59.3, + "heatindex_c": 15.3, + "heatindex_f": 59.5, + "dewpoint_c": 13.2, + "dewpoint_f": 55.7, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.8, + "gust_kph": 17.4, + "uv": 0 + }, + { + "time_epoch": 1729580400, + "time": "2024-10-22 03:00", + "temp_c": 13.2, + "temp_f": 55.8, + "is_day": 0, + "condition": { + "text": "Clear", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 5.1, + "wind_kph": 8.3, + "wind_degree": 226, + "wind_dir": "SW", + "pressure_mb": 1022.0, + "pressure_in": 30.17, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 88, + "cloud": 0, + "feelslike_c": 14.6, + "feelslike_f": 58.2, + "windchill_c": 14.6, + "windchill_f": 58.2, + "heatindex_c": 14.8, + "heatindex_f": 58.6, + "dewpoint_c": 12.9, + "dewpoint_f": 55.2, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 14.0, + "vis_miles": 8.0, + "gust_mph": 10.8, + "gust_kph": 17.4, + "uv": 0 + }, + { + "time_epoch": 1729584000, + "time": "2024-10-22 04:00", + "temp_c": 14.3, + "temp_f": 57.7, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 5.1, + "wind_kph": 8.3, + "wind_degree": 227, + "wind_dir": "SW", + "pressure_mb": 1022.0, + "pressure_in": 30.17, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 89, + "cloud": 0, + "feelslike_c": 14.0, + "feelslike_f": 57.2, + "windchill_c": 14.0, + "windchill_f": 57.2, + "heatindex_c": 14.3, + "heatindex_f": 57.7, + "dewpoint_c": 12.6, + "dewpoint_f": 54.7, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.8, + "gust_kph": 17.4, + "uv": 0 + }, + { + "time_epoch": 1729587600, + "time": "2024-10-22 05:00", + "temp_c": 13.8, + "temp_f": 56.9, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 5.1, + "wind_kph": 8.3, + "wind_degree": 225, + "wind_dir": "SW", + "pressure_mb": 1022.0, + "pressure_in": 30.17, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 90, + "cloud": 1, + "feelslike_c": 13.5, + "feelslike_f": 56.3, + "windchill_c": 13.5, + "windchill_f": 56.3, + "heatindex_c": 13.8, + "heatindex_f": 56.9, + "dewpoint_c": 12.2, + "dewpoint_f": 54.0, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.8, + "gust_kph": 17.4, + "uv": 0 + }, + { + "time_epoch": 1729591200, + "time": "2024-10-22 06:00", + "temp_c": 13.4, + "temp_f": 56.2, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 5.1, + "wind_kph": 8.3, + "wind_degree": 228, + "wind_dir": "SW", + "pressure_mb": 1022.0, + "pressure_in": 30.18, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 91, + "cloud": 1, + "feelslike_c": 13.0, + "feelslike_f": 55.4, + "windchill_c": 13.0, + "windchill_f": 55.4, + "heatindex_c": 13.4, + "heatindex_f": 56.2, + "dewpoint_c": 12.0, + "dewpoint_f": 53.6, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.7, + "gust_kph": 17.2, + "uv": 0 + }, + { + "time_epoch": 1729594800, + "time": "2024-10-22 07:00", + "temp_c": 13.1, + "temp_f": 55.5, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 5.4, + "wind_kph": 8.6, + "wind_degree": 227, + "wind_dir": "SW", + "pressure_mb": 1022.0, + "pressure_in": 30.19, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 92, + "cloud": 7, + "feelslike_c": 12.5, + "feelslike_f": 54.5, + "windchill_c": 12.5, + "windchill_f": 54.5, + "heatindex_c": 13.1, + "heatindex_f": 55.5, + "dewpoint_c": 11.7, + "dewpoint_f": 53.1, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 11.1, + "gust_kph": 17.9, + "uv": 0 + }, + { + "time_epoch": 1729598400, + "time": "2024-10-22 08:00", + "temp_c": 13.0, + "temp_f": 55.5, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 5.8, + "wind_kph": 9.4, + "wind_degree": 224, + "wind_dir": "SW", + "pressure_mb": 1022.0, + "pressure_in": 30.19, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 92, + "cloud": 8, + "feelslike_c": 12.5, + "feelslike_f": 54.5, + "windchill_c": 12.5, + "windchill_f": 54.5, + "heatindex_c": 13.0, + "heatindex_f": 55.5, + "dewpoint_c": 11.5, + "dewpoint_f": 52.6, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 11.8, + "gust_kph": 18.9, + "uv": 0.0 + }, + { + "time_epoch": 1729602000, + "time": "2024-10-22 09:00", + "temp_c": 13.9, + "temp_f": 57.0, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 5.8, + "wind_kph": 9.4, + "wind_degree": 217, + "wind_dir": "SW", + "pressure_mb": 1022.0, + "pressure_in": 30.19, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 87, + "cloud": 11, + "feelslike_c": 13.5, + "feelslike_f": 56.3, + "windchill_c": 13.5, + "windchill_f": 56.3, + "heatindex_c": 13.9, + "heatindex_f": 57.0, + "dewpoint_c": 10.9, + "dewpoint_f": 51.7, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.5, + "gust_kph": 16.9, + "uv": 0.2 + }, + { + "time_epoch": 1729605600, + "time": "2024-10-22 10:00", + "temp_c": 16.0, + "temp_f": 60.9, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 6.9, + "wind_kph": 11.2, + "wind_degree": 219, + "wind_dir": "SW", + "pressure_mb": 1022.0, + "pressure_in": 30.19, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 76, + "cloud": 11, + "feelslike_c": 15.8, + "feelslike_f": 60.5, + "windchill_c": 15.8, + "windchill_f": 60.5, + "heatindex_c": 16.0, + "heatindex_f": 60.9, + "dewpoint_c": 10.5, + "dewpoint_f": 51.0, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.4, + "gust_kph": 16.7, + "uv": 0.8 + }, + { + "time_epoch": 1729609200, + "time": "2024-10-22 11:00", + "temp_c": 18.1, + "temp_f": 64.5, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 7.4, + "wind_kph": 11.9, + "wind_degree": 217, + "wind_dir": "SW", + "pressure_mb": 1022.0, + "pressure_in": 30.19, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 67, + "cloud": 4, + "feelslike_c": 18.0, + "feelslike_f": 64.4, + "windchill_c": 18.0, + "windchill_f": 64.4, + "heatindex_c": 18.1, + "heatindex_f": 64.5, + "dewpoint_c": 11.9, + "dewpoint_f": 53.5, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.3, + "gust_kph": 16.6, + "uv": 1.7 + }, + { + "time_epoch": 1729612800, + "time": "2024-10-22 12:00", + "temp_c": 19.5, + "temp_f": 67.2, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 7.6, + "wind_kph": 12.2, + "wind_degree": 213, + "wind_dir": "SSW", + "pressure_mb": 1022.0, + "pressure_in": 30.17, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 62, + "cloud": 3, + "feelslike_c": 19.5, + "feelslike_f": 67.1, + "windchill_c": 19.5, + "windchill_f": 67.1, + "heatindex_c": 19.5, + "heatindex_f": 67.2, + "dewpoint_c": 12.6, + "dewpoint_f": 54.8, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.7, + "gust_kph": 17.2, + "uv": 2.6 + }, + { + "time_epoch": 1729616400, + "time": "2024-10-22 13:00", + "temp_c": 20.4, + "temp_f": 68.7, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 7.6, + "wind_kph": 12.2, + "wind_degree": 208, + "wind_dir": "SSW", + "pressure_mb": 1021.0, + "pressure_in": 30.15, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 60, + "cloud": 4, + "feelslike_c": 20.4, + "feelslike_f": 68.7, + "windchill_c": 20.4, + "windchill_f": 68.7, + "heatindex_c": 22.0, + "heatindex_f": 71.6, + "dewpoint_c": 13.0, + "dewpoint_f": 55.5, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 11.4, + "gust_kph": 18.3, + "uv": 3.0 + }, + { + "time_epoch": 1729620000, + "time": "2024-10-22 14:00", + "temp_c": 21.3, + "temp_f": 70.3, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 8.3, + "wind_kph": 13.3, + "wind_degree": 202, + "wind_dir": "SSW", + "pressure_mb": 1020.0, + "pressure_in": 30.13, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 60, + "cloud": 10, + "feelslike_c": 21.2, + "feelslike_f": 70.2, + "windchill_c": 21.2, + "windchill_f": 70.2, + "heatindex_c": 23.3, + "heatindex_f": 73.9, + "dewpoint_c": 13.3, + "dewpoint_f": 55.9, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 12.9, + "gust_kph": 20.7, + "uv": 2.9 + }, + { + "time_epoch": 1729623600, + "time": "2024-10-22 15:00", + "temp_c": 21.5, + "temp_f": 70.8, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 9.4, + "wind_kph": 15.1, + "wind_degree": 192, + "wind_dir": "SSW", + "pressure_mb": 1020.0, + "pressure_in": 30.11, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 59, + "cloud": 8, + "feelslike_c": 21.5, + "feelslike_f": 70.7, + "windchill_c": 21.5, + "windchill_f": 70.7, + "heatindex_c": 23.9, + "heatindex_f": 75.0, + "dewpoint_c": 13.8, + "dewpoint_f": 56.8, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 15.2, + "gust_kph": 24.4, + "uv": 2.2 + }, + { + "time_epoch": 1729627200, + "time": "2024-10-22 16:00", + "temp_c": 21.6, + "temp_f": 70.8, + "is_day": 1, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/day/116.png", + "code": 1003 + }, + "wind_mph": 9.6, + "wind_kph": 15.5, + "wind_degree": 191, + "wind_dir": "SSW", + "pressure_mb": 1019.0, + "pressure_in": 30.09, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 59, + "cloud": 26, + "feelslike_c": 21.6, + "feelslike_f": 70.8, + "windchill_c": 21.6, + "windchill_f": 70.8, + "heatindex_c": 24.2, + "heatindex_f": 75.6, + "dewpoint_c": 13.4, + "dewpoint_f": 56.1, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 16.1, + "gust_kph": 25.9, + "uv": 1.3 + }, + { + "time_epoch": 1729630800, + "time": "2024-10-22 17:00", + "temp_c": 21.4, + "temp_f": 70.6, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 9.4, + "wind_kph": 15.1, + "wind_degree": 189, + "wind_dir": "S", + "pressure_mb": 1019.0, + "pressure_in": 30.08, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 61, + "cloud": 18, + "feelslike_c": 21.4, + "feelslike_f": 70.6, + "windchill_c": 21.4, + "windchill_f": 70.6, + "heatindex_c": 24.3, + "heatindex_f": 75.8, + "dewpoint_c": 13.8, + "dewpoint_f": 56.8, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 16.9, + "gust_kph": 27.3, + "uv": 0.5 + }, + { + "time_epoch": 1729634400, + "time": "2024-10-22 18:00", + "temp_c": 20.6, + "temp_f": 69.1, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 8.9, + "wind_kph": 14.4, + "wind_degree": 189, + "wind_dir": "S", + "pressure_mb": 1019.0, + "pressure_in": 30.08, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 67, + "cloud": 6, + "feelslike_c": 20.6, + "feelslike_f": 69.1, + "windchill_c": 20.6, + "windchill_f": 69.1, + "heatindex_c": 22.1, + "heatindex_f": 71.7, + "dewpoint_c": 15.0, + "dewpoint_f": 59.0, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 17.3, + "gust_kph": 27.9, + "uv": 0.0 + }, + { + "time_epoch": 1729638000, + "time": "2024-10-22 19:00", + "temp_c": 19.0, + "temp_f": 66.2, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 8.1, + "wind_kph": 13.0, + "wind_degree": 185, + "wind_dir": "S", + "pressure_mb": 1019.0, + "pressure_in": 30.08, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 73, + "cloud": 9, + "feelslike_c": 19.0, + "feelslike_f": 66.2, + "windchill_c": 19.0, + "windchill_f": 66.2, + "heatindex_c": 19.7, + "heatindex_f": 67.5, + "dewpoint_c": 14.8, + "dewpoint_f": 58.7, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 16.3, + "gust_kph": 26.3, + "uv": 0 + }, + { + "time_epoch": 1729641600, + "time": "2024-10-22 20:00", + "temp_c": 17.9, + "temp_f": 64.1, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 7.2, + "wind_kph": 11.5, + "wind_degree": 181, + "wind_dir": "S", + "pressure_mb": 1018.0, + "pressure_in": 30.07, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 75, + "cloud": 8, + "feelslike_c": 17.9, + "feelslike_f": 64.1, + "windchill_c": 17.9, + "windchill_f": 64.1, + "heatindex_c": 18.2, + "heatindex_f": 64.8, + "dewpoint_c": 13.0, + "dewpoint_f": 55.3, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 14.7, + "gust_kph": 23.6, + "uv": 0 + }, + { + "time_epoch": 1729645200, + "time": "2024-10-22 21:00", + "temp_c": 17.1, + "temp_f": 62.8, + "is_day": 0, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/116.png", + "code": 1003 + }, + "wind_mph": 6.5, + "wind_kph": 10.4, + "wind_degree": 182, + "wind_dir": "S", + "pressure_mb": 1017.0, + "pressure_in": 30.04, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 79, + "cloud": 30, + "feelslike_c": 17.1, + "feelslike_f": 62.8, + "windchill_c": 17.1, + "windchill_f": 62.8, + "heatindex_c": 17.3, + "heatindex_f": 63.1, + "dewpoint_c": 12.9, + "dewpoint_f": 55.3, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 13.1, + "gust_kph": 21.1, + "uv": 0 + }, + { + "time_epoch": 1729648800, + "time": "2024-10-22 22:00", + "temp_c": 17.1, + "temp_f": 62.8, + "is_day": 0, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/116.png", + "code": 1003 + }, + "wind_mph": 5.6, + "wind_kph": 9.0, + "wind_degree": 176, + "wind_dir": "S", + "pressure_mb": 1017.0, + "pressure_in": 30.03, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 80, + "cloud": 41, + "feelslike_c": 17.1, + "feelslike_f": 62.8, + "windchill_c": 17.1, + "windchill_f": 62.8, + "heatindex_c": 17.2, + "heatindex_f": 62.9, + "dewpoint_c": 12.9, + "dewpoint_f": 55.3, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 11.2, + "gust_kph": 18.0, + "uv": 0 + }, + { + "time_epoch": 1729652400, + "time": "2024-10-22 23:00", + "temp_c": 16.4, + "temp_f": 61.5, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 5.4, + "wind_kph": 8.6, + "wind_degree": 177, + "wind_dir": "S", + "pressure_mb": 1016.0, + "pressure_in": 29.99, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 58, + "cloud": 5, + "feelslike_c": 16.4, + "feelslike_f": 61.5, + "windchill_c": 16.4, + "windchill_f": 61.5, + "heatindex_c": 16.4, + "heatindex_f": 61.5, + "dewpoint_c": 8.9, + "dewpoint_f": 47.9, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.5, + "gust_kph": 17.0, + "uv": 0 + } + ] + }, + { + "date": "2024-10-23", + "date_epoch": 1729641600, + "day": { + "maxtemp_c": 20.1, + "maxtemp_f": 68.2, + "mintemp_c": 9.2, + "mintemp_f": 48.5, + "avgtemp_c": 15.5, + "avgtemp_f": 60.0, + "maxwind_mph": 18.1, + "maxwind_kph": 29.2, + "totalprecip_mm": 0.0, + "totalprecip_in": 0.0, + "totalsnow_cm": 0.0, + "avgvis_km": 10.0, + "avgvis_miles": 6.0, + "avghumidity": 71, + "daily_will_it_rain": 0, + "daily_chance_of_rain": 0, + "daily_will_it_snow": 0, + "daily_chance_of_snow": 0, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/day/116.png", + "code": 1003 + }, + "uv": 0.5 + }, + "astro": { + "sunrise": "07:43 AM", + "sunset": "06:20 PM", + "moonrise": "11:29 PM", + "moonset": "02:47 PM", + "moon_phase": "Waning Gibbous", + "moon_illumination": 64, + "is_moon_up": 0, + "is_sun_up": 0 + }, + "hour": [ + { + "time_epoch": 1729656000, + "time": "2024-10-23 00:00", + "temp_c": 15.9, + "temp_f": 60.7, + "is_day": 0, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/116.png", + "code": 1003 + }, + "wind_mph": 6.7, + "wind_kph": 10.8, + "wind_degree": 194, + "wind_dir": "SSW", + "pressure_mb": 1015.0, + "pressure_in": 29.98, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 80, + "cloud": 51, + "feelslike_c": 15.9, + "feelslike_f": 60.7, + "windchill_c": 15.9, + "windchill_f": 60.7, + "heatindex_c": 15.9, + "heatindex_f": 60.7, + "dewpoint_c": 12.2, + "dewpoint_f": 54.0, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 12.7, + "gust_kph": 20.4, + "uv": 0 + }, + { + "time_epoch": 1729659600, + "time": "2024-10-23 01:00", + "temp_c": 15.6, + "temp_f": 60.1, + "is_day": 0, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/116.png", + "code": 1003 + }, + "wind_mph": 9.4, + "wind_kph": 15.1, + "wind_degree": 204, + "wind_dir": "SSW", + "pressure_mb": 1015.0, + "pressure_in": 29.96, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 79, + "cloud": 50, + "feelslike_c": 15.6, + "feelslike_f": 60.1, + "windchill_c": 15.6, + "windchill_f": 60.1, + "heatindex_c": 15.6, + "heatindex_f": 60.1, + "dewpoint_c": 11.9, + "dewpoint_f": 53.4, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 17.3, + "gust_kph": 27.9, + "uv": 0 + }, + { + "time_epoch": 1729663200, + "time": "2024-10-23 02:00", + "temp_c": 15.4, + "temp_f": 59.6, + "is_day": 0, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/116.png", + "code": 1003 + }, + "wind_mph": 10.1, + "wind_kph": 16.2, + "wind_degree": 209, + "wind_dir": "SSW", + "pressure_mb": 1014.0, + "pressure_in": 29.95, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 78, + "cloud": 49, + "feelslike_c": 15.0, + "feelslike_f": 59.0, + "windchill_c": 15.0, + "windchill_f": 59.0, + "heatindex_c": 15.4, + "heatindex_f": 59.6, + "dewpoint_c": 11.5, + "dewpoint_f": 52.8, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 18.2, + "gust_kph": 29.3, + "uv": 0 + }, + { + "time_epoch": 1729666800, + "time": "2024-10-23 03:00", + "temp_c": 15.2, + "temp_f": 59.3, + "is_day": 0, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/116.png", + "code": 1003 + }, + "wind_mph": 11.2, + "wind_kph": 18.0, + "wind_degree": 210, + "wind_dir": "SSW", + "pressure_mb": 1013.0, + "pressure_in": 29.92, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 78, + "cloud": 29, + "feelslike_c": 14.5, + "feelslike_f": 58.0, + "windchill_c": 14.5, + "windchill_f": 58.0, + "heatindex_c": 15.2, + "heatindex_f": 59.3, + "dewpoint_c": 11.3, + "dewpoint_f": 52.3, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 19.4, + "gust_kph": 31.2, + "uv": 0 + }, + { + "time_epoch": 1729670400, + "time": "2024-10-23 04:00", + "temp_c": 15.0, + "temp_f": 59.1, + "is_day": 0, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/116.png", + "code": 1003 + }, + "wind_mph": 12.1, + "wind_kph": 19.4, + "wind_degree": 208, + "wind_dir": "SSW", + "pressure_mb": 1013.0, + "pressure_in": 29.9, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 78, + "cloud": 19, + "feelslike_c": 14.0, + "feelslike_f": 57.1, + "windchill_c": 14.0, + "windchill_f": 57.1, + "heatindex_c": 15.0, + "heatindex_f": 59.1, + "dewpoint_c": 11.2, + "dewpoint_f": 52.1, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 20.6, + "gust_kph": 33.1, + "uv": 0 + }, + { + "time_epoch": 1729674000, + "time": "2024-10-23 05:00", + "temp_c": 15.0, + "temp_f": 59.1, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 12.8, + "wind_kph": 20.5, + "wind_degree": 212, + "wind_dir": "SSW", + "pressure_mb": 1012.0, + "pressure_in": 29.88, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 78, + "cloud": 9, + "feelslike_c": 14.1, + "feelslike_f": 57.4, + "windchill_c": 14.1, + "windchill_f": 57.4, + "heatindex_c": 15.0, + "heatindex_f": 59.1, + "dewpoint_c": 11.1, + "dewpoint_f": 51.9, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 20.8, + "gust_kph": 33.6, + "uv": 0 + }, + { + "time_epoch": 1729677600, + "time": "2024-10-23 06:00", + "temp_c": 15.1, + "temp_f": 59.2, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 13.4, + "wind_kph": 21.6, + "wind_degree": 210, + "wind_dir": "SSW", + "pressure_mb": 1011.0, + "pressure_in": 29.86, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 80, + "cloud": 19, + "feelslike_c": 14.5, + "feelslike_f": 58.0, + "windchill_c": 14.5, + "windchill_f": 58.0, + "heatindex_c": 15.1, + "heatindex_f": 59.2, + "dewpoint_c": 11.6, + "dewpoint_f": 52.8, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 21.6, + "gust_kph": 34.8, + "uv": 0 + }, + { + "time_epoch": 1729681200, + "time": "2024-10-23 07:00", + "temp_c": 15.1, + "temp_f": 59.3, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 14.3, + "wind_kph": 23.0, + "wind_degree": 213, + "wind_dir": "SSW", + "pressure_mb": 1011.0, + "pressure_in": 29.84, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 81, + "cloud": 25, + "feelslike_c": 14.8, + "feelslike_f": 58.7, + "windchill_c": 14.8, + "windchill_f": 58.7, + "heatindex_c": 15.1, + "heatindex_f": 59.3, + "dewpoint_c": 11.8, + "dewpoint_f": 53.3, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 22.7, + "gust_kph": 36.6, + "uv": 0 + }, + { + "time_epoch": 1729684800, + "time": "2024-10-23 08:00", + "temp_c": 15.8, + "temp_f": 60.4, + "is_day": 1, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/day/116.png", + "code": 1003 + }, + "wind_mph": 15.0, + "wind_kph": 24.1, + "wind_degree": 218, + "wind_dir": "SW", + "pressure_mb": 1010.0, + "pressure_in": 29.83, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 81, + "cloud": 30, + "feelslike_c": 15.6, + "feelslike_f": 60.1, + "windchill_c": 15.6, + "windchill_f": 60.1, + "heatindex_c": 15.8, + "heatindex_f": 60.4, + "dewpoint_c": 12.1, + "dewpoint_f": 53.7, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 23.1, + "gust_kph": 37.1, + "uv": 0.0 + }, + { + "time_epoch": 1729688400, + "time": "2024-10-23 09:00", + "temp_c": 16.4, + "temp_f": 61.5, + "is_day": 1, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/day/116.png", + "code": 1003 + }, + "wind_mph": 15.4, + "wind_kph": 24.8, + "wind_degree": 219, + "wind_dir": "SW", + "pressure_mb": 1009.0, + "pressure_in": 29.81, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 77, + "cloud": 47, + "feelslike_c": 16.3, + "feelslike_f": 61.4, + "windchill_c": 16.3, + "windchill_f": 61.4, + "heatindex_c": 16.4, + "heatindex_f": 61.5, + "dewpoint_c": 12.3, + "dewpoint_f": 54.2, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 22.9, + "gust_kph": 36.8, + "uv": 0.2 + }, + { + "time_epoch": 1729692000, + "time": "2024-10-23 10:00", + "temp_c": 17.0, + "temp_f": 62.6, + "is_day": 1, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/day/116.png", + "code": 1003 + }, + "wind_mph": 16.1, + "wind_kph": 25.9, + "wind_degree": 222, + "wind_dir": "SW", + "pressure_mb": 1009.0, + "pressure_in": 29.79, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 75, + "cloud": 55, + "feelslike_c": 17.0, + "feelslike_f": 62.5, + "windchill_c": 17.0, + "windchill_f": 62.5, + "heatindex_c": 17.0, + "heatindex_f": 62.6, + "dewpoint_c": 12.5, + "dewpoint_f": 54.4, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 22.4, + "gust_kph": 36.1, + "uv": 0.7 + }, + { + "time_epoch": 1729695600, + "time": "2024-10-23 11:00", + "temp_c": 17.9, + "temp_f": 64.3, + "is_day": 1, + "condition": { + "text": "Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/day/119.png", + "code": 1006 + }, + "wind_mph": 15.9, + "wind_kph": 25.6, + "wind_degree": 227, + "wind_dir": "SW", + "pressure_mb": 1009.0, + "pressure_in": 29.78, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 72, + "cloud": 63, + "feelslike_c": 17.9, + "feelslike_f": 64.2, + "windchill_c": 17.9, + "windchill_f": 64.2, + "heatindex_c": 17.9, + "heatindex_f": 64.3, + "dewpoint_c": 12.6, + "dewpoint_f": 54.7, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 21.5, + "gust_kph": 34.6, + "uv": 1.3 + }, + { + "time_epoch": 1729699200, + "time": "2024-10-23 12:00", + "temp_c": 18.7, + "temp_f": 65.7, + "is_day": 1, + "condition": { + "text": "Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/day/119.png", + "code": 1006 + }, + "wind_mph": 15.2, + "wind_kph": 24.5, + "wind_degree": 239, + "wind_dir": "WSW", + "pressure_mb": 1008.0, + "pressure_in": 29.76, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 67, + "cloud": 58, + "feelslike_c": 18.7, + "feelslike_f": 65.6, + "windchill_c": 18.7, + "windchill_f": 65.6, + "heatindex_c": 18.7, + "heatindex_f": 65.7, + "dewpoint_c": 12.7, + "dewpoint_f": 54.8, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 20.7, + "gust_kph": 33.4, + "uv": 1.9 + }, + { + "time_epoch": 1729702800, + "time": "2024-10-23 13:00", + "temp_c": 19.4, + "temp_f": 66.9, + "is_day": 1, + "condition": { + "text": "Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/day/119.png", + "code": 1006 + }, + "wind_mph": 15.0, + "wind_kph": 24.1, + "wind_degree": 246, + "wind_dir": "WSW", + "pressure_mb": 1007.0, + "pressure_in": 29.74, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 65, + "cloud": 55, + "feelslike_c": 19.4, + "feelslike_f": 66.9, + "windchill_c": 19.4, + "windchill_f": 66.9, + "heatindex_c": 19.4, + "heatindex_f": 66.9, + "dewpoint_c": 12.7, + "dewpoint_f": 54.8, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 20.8, + "gust_kph": 33.4, + "uv": 2.3 + }, + { + "time_epoch": 1729706400, + "time": "2024-10-23 14:00", + "temp_c": 18.9, + "temp_f": 66.1, + "is_day": 1, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/day/116.png", + "code": 1003 + }, + "wind_mph": 15.7, + "wind_kph": 25.2, + "wind_degree": 263, + "wind_dir": "W", + "pressure_mb": 1007.0, + "pressure_in": 29.73, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 62, + "cloud": 52, + "feelslike_c": 18.9, + "feelslike_f": 66.1, + "windchill_c": 18.9, + "windchill_f": 66.1, + "heatindex_c": 18.9, + "heatindex_f": 66.1, + "dewpoint_c": 12.7, + "dewpoint_f": 54.9, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 20.9, + "gust_kph": 33.7, + "uv": 2.2 + }, + { + "time_epoch": 1729710000, + "time": "2024-10-23 15:00", + "temp_c": 18.3, + "temp_f": 65.0, + "is_day": 1, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/day/116.png", + "code": 1003 + }, + "wind_mph": 17.0, + "wind_kph": 27.4, + "wind_degree": 285, + "wind_dir": "WNW", + "pressure_mb": 1008.0, + "pressure_in": 29.77, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 63, + "cloud": 75, + "feelslike_c": 18.3, + "feelslike_f": 65.0, + "windchill_c": 18.3, + "windchill_f": 65.0, + "heatindex_c": 18.3, + "heatindex_f": 65.0, + "dewpoint_c": 11.4, + "dewpoint_f": 52.6, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 21.0, + "gust_kph": 33.8, + "uv": 1.6 + }, + { + "time_epoch": 1729713600, + "time": "2024-10-23 16:00", + "temp_c": 17.6, + "temp_f": 63.7, + "is_day": 1, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/day/116.png", + "code": 1003 + }, + "wind_mph": 17.7, + "wind_kph": 28.4, + "wind_degree": 302, + "wind_dir": "WNW", + "pressure_mb": 1009.0, + "pressure_in": 29.79, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 64, + "cloud": 86, + "feelslike_c": 17.6, + "feelslike_f": 63.7, + "windchill_c": 17.6, + "windchill_f": 63.7, + "heatindex_c": 17.6, + "heatindex_f": 63.7, + "dewpoint_c": 10.8, + "dewpoint_f": 51.4, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 21.2, + "gust_kph": 34.1, + "uv": 0.9 + }, + { + "time_epoch": 1729717200, + "time": "2024-10-23 17:00", + "temp_c": 15.9, + "temp_f": 60.6, + "is_day": 1, + "condition": { + "text": "Overcast ", + "icon": "//cdn.weatherapi.com/weather/64x64/day/122.png", + "code": 1009 + }, + "wind_mph": 17.0, + "wind_kph": 27.4, + "wind_degree": 305, + "wind_dir": "NW", + "pressure_mb": 1009.0, + "pressure_in": 29.81, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 64, + "cloud": 97, + "feelslike_c": 15.1, + "feelslike_f": 59.2, + "windchill_c": 15.1, + "windchill_f": 59.2, + "heatindex_c": 15.9, + "heatindex_f": 60.6, + "dewpoint_c": 10.2, + "dewpoint_f": 50.3, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 19.8, + "gust_kph": 31.8, + "uv": 0.4 + }, + { + "time_epoch": 1729720800, + "time": "2024-10-23 18:00", + "temp_c": 14.3, + "temp_f": 57.8, + "is_day": 1, + "condition": { + "text": "Overcast ", + "icon": "//cdn.weatherapi.com/weather/64x64/day/122.png", + "code": 1009 + }, + "wind_mph": 16.1, + "wind_kph": 25.9, + "wind_degree": 304, + "wind_dir": "NW", + "pressure_mb": 1012.0, + "pressure_in": 29.88, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 63, + "cloud": 58, + "feelslike_c": 12.7, + "feelslike_f": 54.9, + "windchill_c": 12.7, + "windchill_f": 54.9, + "heatindex_c": 14.3, + "heatindex_f": 57.8, + "dewpoint_c": 7.2, + "dewpoint_f": 45.0, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 19.6, + "gust_kph": 31.5, + "uv": 0.0 + }, + { + "time_epoch": 1729724400, + "time": "2024-10-23 19:00", + "temp_c": 12.9, + "temp_f": 55.2, + "is_day": 0, + "condition": { + "text": "Overcast ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/122.png", + "code": 1009 + }, + "wind_mph": 18.1, + "wind_kph": 29.2, + "wind_degree": 308, + "wind_dir": "NW", + "pressure_mb": 1013.0, + "pressure_in": 29.91, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 62, + "cloud": 39, + "feelslike_c": 10.5, + "feelslike_f": 50.9, + "windchill_c": 10.5, + "windchill_f": 50.9, + "heatindex_c": 12.9, + "heatindex_f": 55.2, + "dewpoint_c": 5.7, + "dewpoint_f": 42.3, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 21.6, + "gust_kph": 34.7, + "uv": 0 + }, + { + "time_epoch": 1729728000, + "time": "2024-10-23 20:00", + "temp_c": 11.4, + "temp_f": 52.5, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 17.4, + "wind_kph": 28.1, + "wind_degree": 304, + "wind_dir": "NW", + "pressure_mb": 1014.0, + "pressure_in": 29.95, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 61, + "cloud": 19, + "feelslike_c": 8.3, + "feelslike_f": 47.0, + "windchill_c": 8.3, + "windchill_f": 47.0, + "heatindex_c": 11.4, + "heatindex_f": 52.5, + "dewpoint_c": 4.3, + "dewpoint_f": 39.7, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 21.5, + "gust_kph": 34.6, + "uv": 0 + }, + { + "time_epoch": 1729731600, + "time": "2024-10-23 21:00", + "temp_c": 10.3, + "temp_f": 50.5, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 17.0, + "wind_kph": 27.4, + "wind_degree": 308, + "wind_dir": "NW", + "pressure_mb": 1016.0, + "pressure_in": 29.99, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 61, + "cloud": 10, + "feelslike_c": 6.8, + "feelslike_f": 44.2, + "windchill_c": 6.8, + "windchill_f": 44.2, + "heatindex_c": 10.3, + "heatindex_f": 50.5, + "dewpoint_c": 2.7, + "dewpoint_f": 36.9, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 21.3, + "gust_kph": 34.3, + "uv": 0 + }, + { + "time_epoch": 1729735200, + "time": "2024-10-23 22:00", + "temp_c": 13.1, + "temp_f": 55.6, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 15.9, + "wind_kph": 25.6, + "wind_degree": 310, + "wind_dir": "NW", + "pressure_mb": 1017.0, + "pressure_in": 30.02, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 61, + "cloud": 5, + "feelslike_c": 11.4, + "feelslike_f": 52.5, + "windchill_c": 11.4, + "windchill_f": 52.5, + "heatindex_c": 13.1, + "heatindex_f": 55.6, + "dewpoint_c": 2.0, + "dewpoint_f": 35.5, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 19.7, + "gust_kph": 31.8, + "uv": 0 + }, + { + "time_epoch": 1729738800, + "time": "2024-10-23 23:00", + "temp_c": 10.5, + "temp_f": 51.0, + "is_day": 0, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/116.png", + "code": 1003 + }, + "wind_mph": 14.3, + "wind_kph": 23.0, + "wind_degree": 311, + "wind_dir": "NW", + "pressure_mb": 1016.0, + "pressure_in": 30.01, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 82, + "cloud": 52, + "feelslike_c": 7.6, + "feelslike_f": 45.7, + "windchill_c": 7.6, + "windchill_f": 45.7, + "heatindex_c": 10.5, + "heatindex_f": 51.0, + "dewpoint_c": 12.9, + "dewpoint_f": 55.2, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 18.3, + "gust_kph": 29.4, + "uv": 0 + } + ] + }, + { + "date": "2024-10-24", + "date_epoch": 1729728000, + "day": { + "maxtemp_c": 12.3, + "maxtemp_f": 54.1, + "mintemp_c": 4.5, + "mintemp_f": 40.1, + "avgtemp_c": 8.6, + "avgtemp_f": 47.5, + "maxwind_mph": 13.2, + "maxwind_kph": 21.2, + "totalprecip_mm": 0.0, + "totalprecip_in": 0.0, + "totalsnow_cm": 0.0, + "avgvis_km": 10.0, + "avgvis_miles": 6.0, + "avghumidity": 55, + "daily_will_it_rain": 0, + "daily_chance_of_rain": 0, + "daily_will_it_snow": 0, + "daily_chance_of_snow": 0, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "uv": 0.6 + }, + "astro": { + "sunrise": "07:44 AM", + "sunset": "06:19 PM", + "moonrise": "No moonrise", + "moonset": "03:21 PM", + "moon_phase": "Last Quarter", + "moon_illumination": 53, + "is_moon_up": 0, + "is_sun_up": 0 + }, + "hour": [ + { + "time_epoch": 1729742400, + "time": "2024-10-24 00:00", + "temp_c": 9.1, + "temp_f": 48.4, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 13.2, + "wind_kph": 21.2, + "wind_degree": 311, + "wind_dir": "NW", + "pressure_mb": 1018.0, + "pressure_in": 30.06, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 62, + "cloud": 18, + "feelslike_c": 5.6, + "feelslike_f": 42.2, + "windchill_c": 5.6, + "windchill_f": 42.2, + "heatindex_c": 9.1, + "heatindex_f": 48.4, + "dewpoint_c": 1.1, + "dewpoint_f": 33.9, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 16.9, + "gust_kph": 27.2, + "uv": 0 + }, + { + "time_epoch": 1729746000, + "time": "2024-10-24 01:00", + "temp_c": 8.3, + "temp_f": 47.0, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 11.9, + "wind_kph": 19.1, + "wind_degree": 312, + "wind_dir": "NW", + "pressure_mb": 1018.0, + "pressure_in": 30.07, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 62, + "cloud": 27, + "feelslike_c": 4.6, + "feelslike_f": 40.3, + "windchill_c": 4.6, + "windchill_f": 40.3, + "heatindex_c": 8.3, + "heatindex_f": 47.0, + "dewpoint_c": 1.0, + "dewpoint_f": 33.8, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 15.2, + "gust_kph": 24.4, + "uv": 0 + }, + { + "time_epoch": 1729749600, + "time": "2024-10-24 02:00", + "temp_c": 7.7, + "temp_f": 45.9, + "is_day": 0, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/116.png", + "code": 1003 + }, + "wind_mph": 10.5, + "wind_kph": 16.9, + "wind_degree": 311, + "wind_dir": "NW", + "pressure_mb": 1018.0, + "pressure_in": 30.07, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 63, + "cloud": 36, + "feelslike_c": 4.0, + "feelslike_f": 39.2, + "windchill_c": 4.0, + "windchill_f": 39.2, + "heatindex_c": 7.7, + "heatindex_f": 45.9, + "dewpoint_c": 1.0, + "dewpoint_f": 33.7, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 13.5, + "gust_kph": 21.8, + "uv": 0 + }, + { + "time_epoch": 1729753200, + "time": "2024-10-24 03:00", + "temp_c": 7.4, + "temp_f": 45.2, + "is_day": 0, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/116.png", + "code": 1003 + }, + "wind_mph": 9.8, + "wind_kph": 15.8, + "wind_degree": 309, + "wind_dir": "NW", + "pressure_mb": 1020.0, + "pressure_in": 30.11, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 64, + "cloud": 55, + "feelslike_c": 3.7, + "feelslike_f": 38.6, + "windchill_c": 3.7, + "windchill_f": 38.6, + "heatindex_c": 7.4, + "heatindex_f": 45.2, + "dewpoint_c": 0.9, + "dewpoint_f": 33.6, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 12.9, + "gust_kph": 20.7, + "uv": 0 + }, + { + "time_epoch": 1729756800, + "time": "2024-10-24 04:00", + "temp_c": 7.1, + "temp_f": 44.7, + "is_day": 0, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/116.png", + "code": 1003 + }, + "wind_mph": 8.9, + "wind_kph": 14.4, + "wind_degree": 319, + "wind_dir": "NW", + "pressure_mb": 1020.0, + "pressure_in": 30.13, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 65, + "cloud": 64, + "feelslike_c": 3.5, + "feelslike_f": 38.3, + "windchill_c": 3.5, + "windchill_f": 38.3, + "heatindex_c": 7.1, + "heatindex_f": 44.7, + "dewpoint_c": 0.8, + "dewpoint_f": 33.5, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 11.7, + "gust_kph": 18.9, + "uv": 0 + }, + { + "time_epoch": 1729760400, + "time": "2024-10-24 05:00", + "temp_c": 6.4, + "temp_f": 43.5, + "is_day": 0, + "condition": { + "text": "Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/119.png", + "code": 1006 + }, + "wind_mph": 8.1, + "wind_kph": 13.0, + "wind_degree": 338, + "wind_dir": "NNW", + "pressure_mb": 1021.0, + "pressure_in": 30.15, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 65, + "cloud": 73, + "feelslike_c": 2.8, + "feelslike_f": 37.1, + "windchill_c": 2.8, + "windchill_f": 37.1, + "heatindex_c": 6.4, + "heatindex_f": 43.5, + "dewpoint_c": 0.8, + "dewpoint_f": 33.4, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.5, + "gust_kph": 17.0, + "uv": 0 + }, + { + "time_epoch": 1729764000, + "time": "2024-10-24 06:00", + "temp_c": 5.7, + "temp_f": 42.3, + "is_day": 0, + "condition": { + "text": "Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/119.png", + "code": 1006 + }, + "wind_mph": 6.7, + "wind_kph": 10.8, + "wind_degree": 355, + "wind_dir": "N", + "pressure_mb": 1022.0, + "pressure_in": 30.19, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 64, + "cloud": 39, + "feelslike_c": 2.2, + "feelslike_f": 35.9, + "windchill_c": 2.2, + "windchill_f": 35.9, + "heatindex_c": 5.7, + "heatindex_f": 42.3, + "dewpoint_c": -0.5, + "dewpoint_f": 31.1, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 8.8, + "gust_kph": 14.2, + "uv": 0 + }, + { + "time_epoch": 1729767600, + "time": "2024-10-24 07:00", + "temp_c": 5.1, + "temp_f": 41.2, + "is_day": 0, + "condition": { + "text": "Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/119.png", + "code": 1006 + }, + "wind_mph": 7.6, + "wind_kph": 12.2, + "wind_degree": 356, + "wind_dir": "N", + "pressure_mb": 1023.0, + "pressure_in": 30.21, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 64, + "cloud": 22, + "feelslike_c": 1.6, + "feelslike_f": 34.8, + "windchill_c": 1.6, + "windchill_f": 34.8, + "heatindex_c": 5.1, + "heatindex_f": 41.2, + "dewpoint_c": -1.2, + "dewpoint_f": 29.9, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.0, + "gust_kph": 16.1, + "uv": 0 + }, + { + "time_epoch": 1729771200, + "time": "2024-10-24 08:00", + "temp_c": 5.8, + "temp_f": 42.4, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 8.5, + "wind_kph": 13.7, + "wind_degree": 356, + "wind_dir": "N", + "pressure_mb": 1024.0, + "pressure_in": 30.23, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 63, + "cloud": 5, + "feelslike_c": 2.6, + "feelslike_f": 36.7, + "windchill_c": 2.6, + "windchill_f": 36.7, + "heatindex_c": 5.8, + "heatindex_f": 42.4, + "dewpoint_c": -1.8, + "dewpoint_f": 28.7, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 11.1, + "gust_kph": 17.8, + "uv": 0.0 + }, + { + "time_epoch": 1729774800, + "time": "2024-10-24 09:00", + "temp_c": 6.7, + "temp_f": 44.0, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 8.3, + "wind_kph": 13.3, + "wind_degree": 359, + "wind_dir": "N", + "pressure_mb": 1024.0, + "pressure_in": 30.24, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 54, + "cloud": 2, + "feelslike_c": 3.9, + "feelslike_f": 38.9, + "windchill_c": 3.9, + "windchill_f": 38.9, + "heatindex_c": 6.7, + "heatindex_f": 44.0, + "dewpoint_c": -2.5, + "dewpoint_f": 27.6, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.3, + "gust_kph": 16.5, + "uv": 0.2 + }, + { + "time_epoch": 1729778400, + "time": "2024-10-24 10:00", + "temp_c": 7.6, + "temp_f": 45.6, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 5.4, + "wind_kph": 8.6, + "wind_degree": 3, + "wind_dir": "N", + "pressure_mb": 1024.0, + "pressure_in": 30.24, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 49, + "cloud": 1, + "feelslike_c": 5.2, + "feelslike_f": 41.3, + "windchill_c": 5.2, + "windchill_f": 41.3, + "heatindex_c": 7.6, + "heatindex_f": 45.6, + "dewpoint_c": -2.8, + "dewpoint_f": 27.0, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 6.4, + "gust_kph": 10.2, + "uv": 0.8 + }, + { + "time_epoch": 1729782000, + "time": "2024-10-24 11:00", + "temp_c": 8.8, + "temp_f": 47.8, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 2.7, + "wind_kph": 4.3, + "wind_degree": 343, + "wind_dir": "NNW", + "pressure_mb": 1024.0, + "pressure_in": 30.24, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 44, + "cloud": 0, + "feelslike_c": 6.8, + "feelslike_f": 44.2, + "windchill_c": 6.8, + "windchill_f": 44.2, + "heatindex_c": 8.8, + "heatindex_f": 47.8, + "dewpoint_c": -3.1, + "dewpoint_f": 26.4, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 3.1, + "gust_kph": 5.0, + "uv": 1.6 + }, + { + "time_epoch": 1729785600, + "time": "2024-10-24 12:00", + "temp_c": 9.7, + "temp_f": 49.5, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 2.0, + "wind_kph": 3.2, + "wind_degree": 299, + "wind_dir": "WNW", + "pressure_mb": 1023.0, + "pressure_in": 30.22, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 41, + "cloud": 0, + "feelslike_c": 8.1, + "feelslike_f": 46.5, + "windchill_c": 8.1, + "windchill_f": 46.5, + "heatindex_c": 9.7, + "heatindex_f": 49.5, + "dewpoint_c": -2.5, + "dewpoint_f": 27.5, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 2.3, + "gust_kph": 3.7, + "uv": 2.4 + }, + { + "time_epoch": 1729789200, + "time": "2024-10-24 13:00", + "temp_c": 10.6, + "temp_f": 51.0, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 3.6, + "wind_kph": 5.8, + "wind_degree": 263, + "wind_dir": "W", + "pressure_mb": 1023.0, + "pressure_in": 30.21, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 40, + "cloud": 0, + "feelslike_c": 9.2, + "feelslike_f": 48.6, + "windchill_c": 9.2, + "windchill_f": 48.6, + "heatindex_c": 10.6, + "heatindex_f": 51.0, + "dewpoint_c": -2.2, + "dewpoint_f": 28.0, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 4.1, + "gust_kph": 6.6, + "uv": 2.9 + }, + { + "time_epoch": 1729792800, + "time": "2024-10-24 14:00", + "temp_c": 11.2, + "temp_f": 52.2, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 3.6, + "wind_kph": 5.8, + "wind_degree": 252, + "wind_dir": "WSW", + "pressure_mb": 1023.0, + "pressure_in": 30.2, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 39, + "cloud": 0, + "feelslike_c": 10.2, + "feelslike_f": 50.4, + "windchill_c": 10.2, + "windchill_f": 50.4, + "heatindex_c": 11.2, + "heatindex_f": 52.2, + "dewpoint_c": -1.9, + "dewpoint_f": 28.5, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 4.1, + "gust_kph": 6.6, + "uv": 2.7 + }, + { + "time_epoch": 1729796400, + "time": "2024-10-24 15:00", + "temp_c": 11.6, + "temp_f": 53.0, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 3.4, + "wind_kph": 5.4, + "wind_degree": 205, + "wind_dir": "SSW", + "pressure_mb": 1022.0, + "pressure_in": 30.19, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 43, + "cloud": 0, + "feelslike_c": 11.0, + "feelslike_f": 51.8, + "windchill_c": 11.0, + "windchill_f": 51.8, + "heatindex_c": 11.6, + "heatindex_f": 53.0, + "dewpoint_c": -0.4, + "dewpoint_f": 31.2, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 3.9, + "gust_kph": 6.2, + "uv": 2.1 + }, + { + "time_epoch": 1729800000, + "time": "2024-10-24 16:00", + "temp_c": 12.0, + "temp_f": 53.5, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 4.7, + "wind_kph": 7.6, + "wind_degree": 181, + "wind_dir": "S", + "pressure_mb": 1022.0, + "pressure_in": 30.18, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 44, + "cloud": 0, + "feelslike_c": 11.6, + "feelslike_f": 52.8, + "windchill_c": 11.6, + "windchill_f": 52.8, + "heatindex_c": 12.0, + "heatindex_f": 53.5, + "dewpoint_c": 0.3, + "dewpoint_f": 32.6, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 5.5, + "gust_kph": 8.9, + "uv": 1.2 + }, + { + "time_epoch": 1729803600, + "time": "2024-10-24 17:00", + "temp_c": 11.2, + "temp_f": 52.1, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 5.8, + "wind_kph": 9.4, + "wind_degree": 170, + "wind_dir": "S", + "pressure_mb": 1022.0, + "pressure_in": 30.18, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 46, + "cloud": 0, + "feelslike_c": 10.8, + "feelslike_f": 51.4, + "windchill_c": 10.8, + "windchill_f": 51.4, + "heatindex_c": 11.2, + "heatindex_f": 52.1, + "dewpoint_c": 1.1, + "dewpoint_f": 33.9, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 7.4, + "gust_kph": 12.0, + "uv": 0.5 + }, + { + "time_epoch": 1729807200, + "time": "2024-10-24 18:00", + "temp_c": 10.3, + "temp_f": 50.6, + "is_day": 1, + "condition": { + "text": "Sunny", + "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png", + "code": 1000 + }, + "wind_mph": 6.9, + "wind_kph": 11.2, + "wind_degree": 165, + "wind_dir": "SSE", + "pressure_mb": 1022.0, + "pressure_in": 30.18, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 53, + "cloud": 2, + "feelslike_c": 9.8, + "feelslike_f": 49.6, + "windchill_c": 9.8, + "windchill_f": 49.6, + "heatindex_c": 10.3, + "heatindex_f": 50.6, + "dewpoint_c": 1.2, + "dewpoint_f": 34.1, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 9.3, + "gust_kph": 15.0, + "uv": 0.0 + }, + { + "time_epoch": 1729810800, + "time": "2024-10-24 19:00", + "temp_c": 9.4, + "temp_f": 48.9, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 6.0, + "wind_kph": 9.7, + "wind_degree": 171, + "wind_dir": "S", + "pressure_mb": 1022.0, + "pressure_in": 30.19, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 57, + "cloud": 4, + "feelslike_c": 8.8, + "feelslike_f": 47.8, + "windchill_c": 8.8, + "windchill_f": 47.8, + "heatindex_c": 9.4, + "heatindex_f": 48.9, + "dewpoint_c": 1.2, + "dewpoint_f": 34.2, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 8.2, + "gust_kph": 13.2, + "uv": 0 + }, + { + "time_epoch": 1729814400, + "time": "2024-10-24 20:00", + "temp_c": 9.8, + "temp_f": 49.6, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 6.9, + "wind_kph": 11.2, + "wind_degree": 178, + "wind_dir": "S", + "pressure_mb": 1022.0, + "pressure_in": 30.19, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 60, + "cloud": 5, + "feelslike_c": 8.6, + "feelslike_f": 47.5, + "windchill_c": 8.6, + "windchill_f": 47.5, + "heatindex_c": 9.8, + "heatindex_f": 49.6, + "dewpoint_c": 1.3, + "dewpoint_f": 34.3, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 9.7, + "gust_kph": 15.6, + "uv": 0 + }, + { + "time_epoch": 1729818000, + "time": "2024-10-24 21:00", + "temp_c": 9.9, + "temp_f": 49.8, + "is_day": 0, + "condition": { + "text": "Partly Cloudy ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/116.png", + "code": 1003 + }, + "wind_mph": 7.6, + "wind_kph": 12.2, + "wind_degree": 189, + "wind_dir": "S", + "pressure_mb": 1022.0, + "pressure_in": 30.18, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 55, + "cloud": 42, + "feelslike_c": 8.5, + "feelslike_f": 47.3, + "windchill_c": 8.5, + "windchill_f": 47.3, + "heatindex_c": 9.9, + "heatindex_f": 49.8, + "dewpoint_c": 1.6, + "dewpoint_f": 34.8, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.8, + "gust_kph": 17.4, + "uv": 0 + }, + { + "time_epoch": 1729821600, + "time": "2024-10-24 22:00", + "temp_c": 9.2, + "temp_f": 48.5, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 7.2, + "wind_kph": 11.5, + "wind_degree": 201, + "wind_dir": "SSW", + "pressure_mb": 1022.0, + "pressure_in": 30.18, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 59, + "cloud": 5, + "feelslike_c": 6.3, + "feelslike_f": 43.4, + "windchill_c": 6.3, + "windchill_f": 43.4, + "heatindex_c": 9.2, + "heatindex_f": 48.5, + "dewpoint_c": 2.5, + "dewpoint_f": 36.4, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 10.2, + "gust_kph": 16.4, + "uv": 0 + }, + { + "time_epoch": 1729825200, + "time": "2024-10-24 23:00", + "temp_c": 9.3, + "temp_f": 48.7, + "is_day": 0, + "condition": { + "text": "Clear ", + "icon": "//cdn.weatherapi.com/weather/64x64/night/113.png", + "code": 1000 + }, + "wind_mph": 6.3, + "wind_kph": 10.1, + "wind_degree": 213, + "wind_dir": "SSW", + "pressure_mb": 1017.0, + "pressure_in": 30.04, + "precip_mm": 0.0, + "precip_in": 0.0, + "snow_cm": 0.0, + "humidity": 60, + "cloud": 0, + "feelslike_c": 7.2, + "feelslike_f": 44.9, + "windchill_c": 7.2, + "windchill_f": 44.9, + "heatindex_c": 9.3, + "heatindex_f": 48.8, + "dewpoint_c": 1.2, + "dewpoint_f": 34.1, + "will_it_rain": 0, + "chance_of_rain": 0, + "will_it_snow": 0, + "chance_of_snow": 0, + "vis_km": 10.0, + "vis_miles": 6.0, + "gust_mph": 9.2, + "gust_kph": 14.8, + "uv": 0 + } + ] + } + ] + } +} From a9a33b5d4d338f78d5d0a9c9a61fafa43f3a7fa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Jaenisch?= Date: Tue, 22 Oct 2024 09:28:56 +0200 Subject: [PATCH 5/7] feat: consider day/night information MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This was highly requested. I hope I catched all cases. Signed-off-by: André Jaenisch --- weather-api-widget/weather.lua | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/weather-api-widget/weather.lua b/weather-api-widget/weather.lua index 20233ac..81d5c07 100644 --- a/weather-api-widget/weather.lua +++ b/weather-api-widget/weather.lua @@ -66,6 +66,7 @@ local weather_popup = awful.popup { --- Maps WeatherAPI condition code to file name w/o extension --- See https://www.weatherapi.com/docs/#weather-icons +--- Day/Night is determined at time of mapping the weather to an icon local icon_map = { [1000] = "clear-sky", [1003] = "few-clouds", @@ -293,8 +294,13 @@ local function worker(user_args) forced_width = 300, layout = wibox.layout.flex.horizontal, update = function(self, weather) + local day_night_extension = "" + if weather.is_day then + day_night_extension = "-night" + end + self:get_children_by_id('icon')[1]:set_image( - ICONS_DIR .. icon_map[weather.condition.code] .. icons_extension) + ICONS_DIR .. icon_map[weather.condition.code] .. day_night_extension .. icons_extension) self:get_children_by_id('temp')[1]:set_text(gen_temperature_str(weather.temp_c, '%.0f', false, units)) self:get_children_by_id('feels_like_temp')[1]:set_text( LCLE.feels_like .. gen_temperature_str(weather.feelslike_c, '%.0f', false, units)) @@ -315,6 +321,11 @@ local function worker(user_args) for i, day in ipairs(forecast) do -- Free plan allows forecast for up to three days, each with hours if i > 3 then break end + local day_night_extension = "" + if day.is_day then + day_night_extension = "-night" + end + local day_forecast = wibox.widget { { text = os.date('%a', tonumber(day.date_epoch)), @@ -325,7 +336,10 @@ local function worker(user_args) { { { - image = ICONS_DIR .. icon_map[day.day.condition.code] .. icons_extension, + image = ICONS_DIR + .. icon_map[day.day.condition.code] + .. day_night_extension + .. icons_extension, resize = true, forced_width = 48, forced_height = 48, @@ -575,7 +589,13 @@ local function worker(user_args) widget:is_ok(true) local result = json.decode(stdout) - widget:set_image(ICONS_DIR .. icon_map[result.current.condition.code] .. icons_extension) + + local day_night_extension = "" + if result.current.is_day then + day_night_extension = "-night" + end + + widget:set_image(ICONS_DIR .. icon_map[result.current.condition.code] .. day_night_extension .. icons_extension) -- TODO: if units isn't "metric", read temp_f instead widget:set_text(gen_temperature_str(result.current.temp_c, '%.0f', both_units_widget, units)) From 6f4c1deac22a1285e7b1552fbffb85b25a92cb65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Jaenisch?= Date: Tue, 22 Oct 2024 10:55:27 +0200 Subject: [PATCH 6/7] chore: add icons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I removed the executable flag from all of them. Signed-off-by: André Jaenisch --- .../VitalyGorbachev/broken-clouds-night.svg | 1 + .../icons/VitalyGorbachev/clear-sky-night.svg | 1 + .../icons/VitalyGorbachev/few-clouds-night.svg | 1 + .../icons/VitalyGorbachev/mist-night.svg | 1 + .../icons/VitalyGorbachev/rain-night.svg | 1 + .../VitalyGorbachev/scattered-clouds-night.svg | 1 + .../icons/VitalyGorbachev/shower-rain-night.svg | 1 + .../icons/VitalyGorbachev/snow-night.svg | 1 + .../icons/VitalyGorbachev/thunderstorm-night.svg | 1 + .../broken-clouds-night.png | Bin 0 -> 4101 bytes .../weather-underground-icons/broken-clouds.png | Bin .../clear-sky-night.png | Bin 0 -> 4338 bytes .../weather-underground-icons/clear-sky.png | Bin .../few-clouds-night.png | Bin 0 -> 4511 bytes .../weather-underground-icons/few-clouds.png | Bin .../weather-underground-icons/mist-night.png | Bin 0 -> 1042 bytes .../icons/weather-underground-icons/mist.png | Bin .../weather-underground-icons/rain-night.png | Bin 0 -> 1728 bytes .../icons/weather-underground-icons/rain.png | Bin .../scattered-clouds-night.png | Bin 0 -> 1044 bytes .../scattered-clouds.png | Bin .../shower-rain-night.png | Bin 0 -> 1728 bytes .../weather-underground-icons/shower-rain.png | Bin .../weather-underground-icons/snow-night.png | Bin 0 -> 1191 bytes .../icons/weather-underground-icons/snow.png | Bin .../thunderstorm-night.png | Bin 0 -> 2052 bytes .../weather-underground-icons/thunderstorm.png | Bin 27 files changed, 9 insertions(+) create mode 100644 weather-api-widget/icons/VitalyGorbachev/broken-clouds-night.svg create mode 100644 weather-api-widget/icons/VitalyGorbachev/clear-sky-night.svg create mode 100644 weather-api-widget/icons/VitalyGorbachev/few-clouds-night.svg create mode 100644 weather-api-widget/icons/VitalyGorbachev/mist-night.svg create mode 100644 weather-api-widget/icons/VitalyGorbachev/rain-night.svg create mode 100644 weather-api-widget/icons/VitalyGorbachev/scattered-clouds-night.svg create mode 100644 weather-api-widget/icons/VitalyGorbachev/shower-rain-night.svg create mode 100644 weather-api-widget/icons/VitalyGorbachev/snow-night.svg create mode 100644 weather-api-widget/icons/VitalyGorbachev/thunderstorm-night.svg create mode 100644 weather-api-widget/icons/weather-underground-icons/broken-clouds-night.png mode change 100755 => 100644 weather-api-widget/icons/weather-underground-icons/broken-clouds.png create mode 100644 weather-api-widget/icons/weather-underground-icons/clear-sky-night.png mode change 100755 => 100644 weather-api-widget/icons/weather-underground-icons/clear-sky.png create mode 100644 weather-api-widget/icons/weather-underground-icons/few-clouds-night.png mode change 100755 => 100644 weather-api-widget/icons/weather-underground-icons/few-clouds.png create mode 100644 weather-api-widget/icons/weather-underground-icons/mist-night.png mode change 100755 => 100644 weather-api-widget/icons/weather-underground-icons/mist.png create mode 100644 weather-api-widget/icons/weather-underground-icons/rain-night.png mode change 100755 => 100644 weather-api-widget/icons/weather-underground-icons/rain.png create mode 100644 weather-api-widget/icons/weather-underground-icons/scattered-clouds-night.png mode change 100755 => 100644 weather-api-widget/icons/weather-underground-icons/scattered-clouds.png create mode 100644 weather-api-widget/icons/weather-underground-icons/shower-rain-night.png mode change 100755 => 100644 weather-api-widget/icons/weather-underground-icons/shower-rain.png create mode 100644 weather-api-widget/icons/weather-underground-icons/snow-night.png mode change 100755 => 100644 weather-api-widget/icons/weather-underground-icons/snow.png create mode 100644 weather-api-widget/icons/weather-underground-icons/thunderstorm-night.png mode change 100755 => 100644 weather-api-widget/icons/weather-underground-icons/thunderstorm.png diff --git a/weather-api-widget/icons/VitalyGorbachev/broken-clouds-night.svg b/weather-api-widget/icons/VitalyGorbachev/broken-clouds-night.svg new file mode 100644 index 0000000..8b7fc48 --- /dev/null +++ b/weather-api-widget/icons/VitalyGorbachev/broken-clouds-night.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/weather-api-widget/icons/VitalyGorbachev/clear-sky-night.svg b/weather-api-widget/icons/VitalyGorbachev/clear-sky-night.svg new file mode 100644 index 0000000..44f096c --- /dev/null +++ b/weather-api-widget/icons/VitalyGorbachev/clear-sky-night.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/weather-api-widget/icons/VitalyGorbachev/few-clouds-night.svg b/weather-api-widget/icons/VitalyGorbachev/few-clouds-night.svg new file mode 100644 index 0000000..8b7fc48 --- /dev/null +++ b/weather-api-widget/icons/VitalyGorbachev/few-clouds-night.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/weather-api-widget/icons/VitalyGorbachev/mist-night.svg b/weather-api-widget/icons/VitalyGorbachev/mist-night.svg new file mode 100644 index 0000000..960b07d --- /dev/null +++ b/weather-api-widget/icons/VitalyGorbachev/mist-night.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/weather-api-widget/icons/VitalyGorbachev/rain-night.svg b/weather-api-widget/icons/VitalyGorbachev/rain-night.svg new file mode 100644 index 0000000..11ecf00 --- /dev/null +++ b/weather-api-widget/icons/VitalyGorbachev/rain-night.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/weather-api-widget/icons/VitalyGorbachev/scattered-clouds-night.svg b/weather-api-widget/icons/VitalyGorbachev/scattered-clouds-night.svg new file mode 100644 index 0000000..8b7fc48 --- /dev/null +++ b/weather-api-widget/icons/VitalyGorbachev/scattered-clouds-night.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/weather-api-widget/icons/VitalyGorbachev/shower-rain-night.svg b/weather-api-widget/icons/VitalyGorbachev/shower-rain-night.svg new file mode 100644 index 0000000..4d1897c --- /dev/null +++ b/weather-api-widget/icons/VitalyGorbachev/shower-rain-night.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/weather-api-widget/icons/VitalyGorbachev/snow-night.svg b/weather-api-widget/icons/VitalyGorbachev/snow-night.svg new file mode 100644 index 0000000..bee891e --- /dev/null +++ b/weather-api-widget/icons/VitalyGorbachev/snow-night.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/weather-api-widget/icons/VitalyGorbachev/thunderstorm-night.svg b/weather-api-widget/icons/VitalyGorbachev/thunderstorm-night.svg new file mode 100644 index 0000000..1813197 --- /dev/null +++ b/weather-api-widget/icons/VitalyGorbachev/thunderstorm-night.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/weather-api-widget/icons/weather-underground-icons/broken-clouds-night.png b/weather-api-widget/icons/weather-underground-icons/broken-clouds-night.png new file mode 100644 index 0000000000000000000000000000000000000000..061d1cde74c39e1de8d9fb3a468900dc4a63a2b7 GIT binary patch literal 4101 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 literal 0 HcmV?d00001 diff --git a/weather-api-widget/icons/weather-underground-icons/clear-sky.png b/weather-api-widget/icons/weather-underground-icons/clear-sky.png old mode 100755 new mode 100644 diff --git a/weather-api-widget/icons/weather-underground-icons/few-clouds-night.png b/weather-api-widget/icons/weather-underground-icons/few-clouds-night.png new file mode 100644 index 0000000000000000000000000000000000000000..9c34fab93e69dac75f358ce0be184f03655731db GIT binary patch literal 4511 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 TIp*zM;{vECYA966S%&`)ZTg3Q literal 0 HcmV?d00001 diff --git a/weather-api-widget/icons/weather-underground-icons/few-clouds.png b/weather-api-widget/icons/weather-underground-icons/few-clouds.png old mode 100755 new mode 100644 diff --git a/weather-api-widget/icons/weather-underground-icons/mist-night.png b/weather-api-widget/icons/weather-underground-icons/mist-night.png new file mode 100644 index 0000000000000000000000000000000000000000..102142a239ae2ff93f0b63119eb555e3e3370082 GIT binary patch literal 1042 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 b{PB#puke(aTQKzi^E-p5tDnm{r-UW|;ps;f literal 0 HcmV?d00001 diff --git a/weather-api-widget/icons/weather-underground-icons/snow.png b/weather-api-widget/icons/weather-underground-icons/snow.png old mode 100755 new mode 100644 diff --git a/weather-api-widget/icons/weather-underground-icons/thunderstorm-night.png b/weather-api-widget/icons/weather-underground-icons/thunderstorm-night.png new file mode 100644 index 0000000000000000000000000000000000000000..210210435319ffe8cbb502195662b7b152d47839 GIT binary patch literal 2052 zcmbtVc{H1O8%<&2T2l>eDVhkAu~Zb%P6kbvL93x=LTjrema&s)QQKEa zGNq{27)5QdHP))NifYNUOjU`sTJz4Ab8?*i`~A*&?|Yx;-rs$mbKXDR1Q%z#9CR-f z1Omy~|6uD1ylMYFQeprKUNbjAAaIR~le-;IF0XIz?Ch*@v;YJSDz;Nd{!jcS2PlOd z;UJMJ>VGp1uTXH6m9PVFfQUE{BAl|$ zfeVv`l5j(jO>{*#R9K3lgakk#0X!lb(Aiyza)ikM0){?lQ9AJD(x|S^ZXk%W?Vt52 z7JJ=xLJ^q5_cNDCx;;g6zClqJQt*XAZ(j*a&9wzt;(!On=gd5z+K;rv-A+vBDN z2Aa_Am6`E6RhEul93B zeoxOlvgxxi_wmR2l|Hi1zo#R;{DLL%)Z7WRDVxUy{m+S)C-s)<8fzRPDqKJRb_N~Q zj;NCLZXZW>Cg>|YCFJR*#Fq<>4<^CjnZsWqTuTC_nRV+)i>5Nup>%@0V&SPUwd+f+ zI(P-`$2fvI*7=@y3)IUbnR)01GulLbl4LSHUz{(`@z;FY{yv@?|1>042j29RXG)@{ z{`77l#iUD4FWi(U$&nqh$tFVa1A=CZd5ps#Gd5EhZ}^2vWGz>g!{cd$MBf0bgT*LI z=T8EOq1*3Exmo5c<8lggAIfMj=#Mnt#k2W(&8)DUl+Sl`S?Mp>5BJz5sg4v@*w1{w zaCu%mX#bU?sH?b6Wy)_BWgoGQKk2lEtK9R7Znbu&qI&LRdn&sykC}|-yKTtB@YVYk zj4?WNLyE+^agR!R5167q;O6#$v54G9RN-*!oQzg51ck7zY9b$<%{vkqKG3QkC7G^v zkK2a1%?_MoO^I2}M=nNVpei#) zy59cyqxaTUUiV9TTaK4Gov~qq&ll_jAtAMR-Fa#??xR(z5|iX7zM#sA=edqmjZ8!p zsVLL!X5>k_i4oYqnBg??#W%)7_*-wP=W?Wms5Pk??h%`Zd$Su8FuBM%_{e{_GfQw? zS=5lCpFh!zo`#zsY{ENK#CdF0l^e&Xm{zUW?cx`Hn^ECwBQI)+zaGZe?7Ga+UxKnVVa45KoC6o14rk^ebOx4h`Ivib zSZbiRB`mfIkv_1+^+CSDn0nj0!IJx90mER57bDrGyS!)*Lq4fm<10ixIpl4y>QeLH zA;DdKkN`g|X!yZVaq3m*BZ^?Xav}KFG+u-F1FgI+dUN8k{HB;Ii@0FpF2iM$>7f)-qjUEjH&Ap$biY51 z-65F-qu&x7qIq}YwYC~PjaYOF)|$~0HCHEwX6F7W6KSA&>AxpE`TbwY$desYe^GrW zPp*4oa(vgCUyXlPOR{(qTyP^ypYaPEcIk?P=ivmyXVN3#?v72b1@}meG9%`tvrov# z(}!~RtQK&&Z=We)UBJ@yfv;rZDB)sx*B4pE@=l>Gk0^Mhp$A{^k`)hB@(|~i2MY%H zvX%`0UTIe;_C!cE*AA-|I@N{5Xx9ENiI(CUSv@Uj$a>1ZZn!zqetNHl#Q0ru?Jef9?1qE^;|aT}3&xpMx#j8AIVg^*J;JRZClhCZ8Blq1Tp2fNVL~H!E9NW*)2Z zyeLjcl&qmAXR$zjNHQs;qo)}Rtvm1J5$OuCwi{M)Z>XX|XW}&{9a9GNfb1hPEt|77J84i$8r_IU&tT*okX_bTRxZ4+Pz9O8 l&g!=cC;<{?z&X Date: Thu, 24 Oct 2024 11:14:00 +0200 Subject: [PATCH 7/7] fix: inverse logic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I only need to add a prefix when it is not day. Signed-off-by: André Jaenisch --- weather-api-widget/weather.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/weather-api-widget/weather.lua b/weather-api-widget/weather.lua index 81d5c07..821b097 100644 --- a/weather-api-widget/weather.lua +++ b/weather-api-widget/weather.lua @@ -295,7 +295,7 @@ local function worker(user_args) layout = wibox.layout.flex.horizontal, update = function(self, weather) local day_night_extension = "" - if weather.is_day then + if not weather.is_day then day_night_extension = "-night" end @@ -322,7 +322,7 @@ local function worker(user_args) -- Free plan allows forecast for up to three days, each with hours if i > 3 then break end local day_night_extension = "" - if day.is_day then + if not day.is_day then day_night_extension = "-night" end @@ -591,7 +591,7 @@ local function worker(user_args) local result = json.decode(stdout) local day_night_extension = "" - if result.current.is_day then + if not result.current.is_day then day_night_extension = "-night" end