Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Timezone from OpenWeatherMap has changed, Watchy hasn't. #232

Open
GuruSR opened this issue May 28, 2023 · 4 comments
Open

Timezone from OpenWeatherMap has changed, Watchy hasn't. #232

GuruSR opened this issue May 28, 2023 · 4 comments

Comments

@GuruSR
Copy link

GuruSR commented May 28, 2023

Watchy.cpp:

Line 662:
gmtOffset = int(responseObject["timezone"]);

should be

gmtOffset = int(responseObject["timezone"]) / 3600; // OpenWeatherMap returns seconds from UTC.

Also, City ID has been discontinued, Geo-Location is preferred.

@Sudrien
Copy link

Sudrien commented Jun 2, 2023

Geolocation would be nice for sunset and tidal calculation also

But yes, https://openweathermap.org/current#geo looks like they haven't bumped api numbers

@Rob58329
Copy link

In case it's helpfull to anyone:

(1) OpenWeatherMap has always returned gmtOffset in seconds, and this is what Watchy requires/expects, so the original line: gmtOffset = int(responseObject["timezone"]);
is correct.

(2) The way I fixed the “City ID has been discontinued, Geo-Location (longitude and latitude) is required” issue is:

(a) Edit “settings.h” to:

#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?lon=-0.12&lat=51.5"
(or whatever longitude and latitude you want is)

(b) Edit “Watchy.cpp” to:

    String weatherQueryURL = url + String("&units=") + units +
                             String("&lang=") + lang + String("&appid=") +
                             apiKey; // edited
    http.begin(weatherQueryURL.c_str());
    int httpResponseCode = http.GET();
    if (httpResponseCode == 200) {
      String payload             = http.getString();
      payload=payload.substring(payload.indexOf('{')); // edited/added
      JSONVar responseObject     = JSON.parse(payload);
      currentWeather.temperature = int(responseObject["main"]["temp"]);
      ...

(this works as at 11Sept2023)

@GuruSR
Copy link
Author

GuruSR commented Sep 12, 2023

Instead of using static Longitude and Latitude, you can use the same payload method of reading the JSON from this URL: http://ip-api.com/json/?fields=lat,lon

And merging the results into the OPENWEATHERMAP_URL by making lon=#1&lat=#2 and replacing #1 & #2 with the results from the above URL after parsing it's JSON. This is how Watchy GSR does it.

@Sudrien
Copy link

Sudrien commented Apr 26, 2024

This can be closed as of 99cacd2, can't it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants