From c38f113aa435511a1811d4ab83e8865fb6490aa9 Mon Sep 17 00:00:00 2001 From: gsuarezc <72304747+gsuarezc@users.noreply.github.com> Date: Sat, 27 Apr 2024 15:32:02 +0100 Subject: [PATCH 1/3] owmweather: upgrade to One Call API 3.0. Add pressure to weather.json --- apps/owmweather/ChangeLog | 1 + apps/owmweather/lib.js | 19 ++++++++++--------- apps/owmweather/metadata.json | 2 +- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/apps/owmweather/ChangeLog b/apps/owmweather/ChangeLog index 106948e6c..f80402e7d 100644 --- a/apps/owmweather/ChangeLog +++ b/apps/owmweather/ChangeLog @@ -2,3 +2,4 @@ 0.02: Do first update request 5s after boot to boot up faster 0.03: Fix updating weather too often 0.04: Minor code improvements +0.05: Upgrade OWM to One Call API 3.0. Add pressure to weather.json diff --git a/apps/owmweather/lib.js b/apps/owmweather/lib.js index 67cdc115b..bc5b37f76 100644 --- a/apps/owmweather/lib.js +++ b/apps/owmweather/lib.js @@ -1,19 +1,20 @@ function parseWeather(response) { let owmData = JSON.parse(response); - let isOwmData = owmData.coord && owmData.weather && owmData.main; + let isOwmData = (owmData.lat && owmData.lon) && owmData.current.weather && owmData.current; if (isOwmData) { let json = require("Storage").readJSON('weather.json') || {}; let weather = {}; weather.time = Date.now(); - weather.hum = owmData.main.humidity; - weather.temp = owmData.main.temp; - weather.code = owmData.weather[0].id; - weather.wdir = owmData.wind.deg; - weather.wind = owmData.wind.speed; - weather.loc = owmData.name; - weather.txt = owmData.weather[0].main; + weather.hum = owmData.current.humidity; + weather.temp = owmData.current.temp; + weather.code = owmData.current.weather[0].id; + weather.wdir = owmData.current.wind_deg; + weather.wind = owmData.current.wind_speed; + // weather.loc = owmData.name; + weather.txt = owmData.current.weather[0].main; + weather.hpa = owmData.current.pressure ? owmData.current.pressure : 0; if (weather.wdir != null) { let deg = weather.wdir; @@ -39,7 +40,7 @@ exports.pull = function(completionCallback) { "location": "London" }; let settings = require("Storage").readJSON("owmweather.json", 1); - let uri = "https://api.openweathermap.org/data/2.5/weather?lat=" + location.lat.toFixed(2) + "&lon=" + location.lon.toFixed(2) + "&exclude=hourly,daily&appid=" + settings.apikey; + let uri = "https://api.openweathermap.org/data/3.0/onecall?lat=" + location.lat.toFixed(2) + "&lon=" + location.lon.toFixed(2) + "&exclude=minutely,hourly,daily,alerts&appid=" + settings.apikey; if (Bangle.http){ Bangle.http(uri, {timeout:10000}).then(event => { let result = parseWeather(event.resp); diff --git a/apps/owmweather/metadata.json b/apps/owmweather/metadata.json index 658ea953e..d3f0400fa 100644 --- a/apps/owmweather/metadata.json +++ b/apps/owmweather/metadata.json @@ -1,7 +1,7 @@ { "id": "owmweather", "name": "OpenWeatherMap weather provider", "shortName":"OWM Weather", - "version": "0.04", + "version": "0.05", "description": "Pulls weather from OpenWeatherMap (OWM) API", "icon": "app.png", "type": "bootloader", From 7f5d375f29ef5a5bc7c0e4fc06d695796bb206a8 Mon Sep 17 00:00:00 2001 From: gsuarezc <72304747+gsuarezc@users.noreply.github.com> Date: Sat, 27 Apr 2024 17:51:13 +0100 Subject: [PATCH 2/3] owmweather: Fix One Call API 3.0 does not return city name but it is required by weather app --- apps/owmweather/ChangeLog | 1 + apps/owmweather/lib.js | 2 +- apps/owmweather/metadata.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/owmweather/ChangeLog b/apps/owmweather/ChangeLog index f80402e7d..13b037671 100644 --- a/apps/owmweather/ChangeLog +++ b/apps/owmweather/ChangeLog @@ -3,3 +3,4 @@ 0.03: Fix updating weather too often 0.04: Minor code improvements 0.05: Upgrade OWM to One Call API 3.0. Add pressure to weather.json +0.06: Fix One Call API 3.0 does not return city name but it is required by weather app diff --git a/apps/owmweather/lib.js b/apps/owmweather/lib.js index bc5b37f76..6201304f3 100644 --- a/apps/owmweather/lib.js +++ b/apps/owmweather/lib.js @@ -12,7 +12,7 @@ function parseWeather(response) { weather.code = owmData.current.weather[0].id; weather.wdir = owmData.current.wind_deg; weather.wind = owmData.current.wind_speed; - // weather.loc = owmData.name; + weather.loc = owmData.name ? owmData.name : ""; weather.txt = owmData.current.weather[0].main; weather.hpa = owmData.current.pressure ? owmData.current.pressure : 0; diff --git a/apps/owmweather/metadata.json b/apps/owmweather/metadata.json index d3f0400fa..f20c5baca 100644 --- a/apps/owmweather/metadata.json +++ b/apps/owmweather/metadata.json @@ -1,7 +1,7 @@ { "id": "owmweather", "name": "OpenWeatherMap weather provider", "shortName":"OWM Weather", - "version": "0.05", + "version": "0.06", "description": "Pulls weather from OpenWeatherMap (OWM) API", "icon": "app.png", "type": "bootloader", From 1832f209361c897c5a32b3afc7d49da5e232577e Mon Sep 17 00:00:00 2001 From: gsuarezc <72304747+gsuarezc@users.noreply.github.com> Date: Sat, 27 Apr 2024 22:50:28 +0100 Subject: [PATCH 3/3] owmweather: Handle possible exceptions and make conditional shorter. Rewrite the comment in the ChangeLog --- apps/owmweather/ChangeLog | 2 +- apps/owmweather/lib.js | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/owmweather/ChangeLog b/apps/owmweather/ChangeLog index 13b037671..ac8270fe9 100644 --- a/apps/owmweather/ChangeLog +++ b/apps/owmweather/ChangeLog @@ -3,4 +3,4 @@ 0.03: Fix updating weather too often 0.04: Minor code improvements 0.05: Upgrade OWM to One Call API 3.0. Add pressure to weather.json -0.06: Fix One Call API 3.0 does not return city name but it is required by weather app +0.06: Fix One Call API 3.0 not returning city names, which are required by the weather app diff --git a/apps/owmweather/lib.js b/apps/owmweather/lib.js index 6201304f3..3c01b79d4 100644 --- a/apps/owmweather/lib.js +++ b/apps/owmweather/lib.js @@ -1,7 +1,10 @@ function parseWeather(response) { let owmData = JSON.parse(response); - let isOwmData = (owmData.lat && owmData.lon) && owmData.current.weather && owmData.current; + let isOwmData = false; + try { + isOwmData = (owmData.lat && owmData.lon) && owmData.current.weather && owmData.current; + } catch (_e) {} if (isOwmData) { let json = require("Storage").readJSON('weather.json') || {}; @@ -12,9 +15,9 @@ function parseWeather(response) { weather.code = owmData.current.weather[0].id; weather.wdir = owmData.current.wind_deg; weather.wind = owmData.current.wind_speed; - weather.loc = owmData.name ? owmData.name : ""; + weather.loc = owmData.name || ""; weather.txt = owmData.current.weather[0].main; - weather.hpa = owmData.current.pressure ? owmData.current.pressure : 0; + weather.hpa = owmData.current.pressure || 0; if (weather.wdir != null) { let deg = weather.wdir;