diff --git a/CHANGELOG.md b/CHANGELOG.md
index d47f3fa7..71db75d7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,6 +18,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
### Fixed
- Fixed temperature displays in currentweather and weatherforecast modules [#1503](https://github.com/MichMich/MagicMirror/issues/1503).
+- Weather forecast now works with openweathermap in new weather module. Daily data are displayed, see issue [#1504](https://github.com/MichMich/MagicMirror/issues/1504).
## [2.6.0] - 2019-01-01
diff --git a/modules/default/weather/README.md b/modules/default/weather/README.md
index 89e65de1..d10297d1 100644
--- a/modules/default/weather/README.md
+++ b/modules/default/weather/README.md
@@ -78,7 +78,7 @@ The following properties can be configured:
| ---------------------------- | -----------
| `apiVersion` | The OpenWeatherMap API version to use.
**Default value:** `2.5`
| `apiBase` | The OpenWeatherMap base URL.
**Default value:** `'http://api.openweathermap.org/data/'`
-| `weatherEndpoint` | The OpenWeatherMap API endPoint.
**Possible values:** `/weather` or `/forecast/daily`
**Default value:** `'/weather'`
+| `weatherEndpoint` | The OpenWeatherMap API endPoint.
**Possible values:** `/weather`, `/forecast` or `/forecast/daily` (paying users only)
**Default value:** `'/weather'`
| `locationID` | Location ID from [OpenWeatherMap](https://openweathermap.org/find) **This will override anything you put in location.**
Leave blank if you want to use location.
**Example:** `1234567`
**Default value:** `false`
**Note:** When the `location` and `locationID` are both not set, the location will be based on the information provided by the calendar module. The first upcoming event with location data will be used.
| `location` | The location used for weather information.
**Example:** `'Amsterdam,Netherlands'`
**Default value:** `false`
**Note:** When the `location` and `locationID` are both not set, the location will be based on the information provided by the calendar module. The first upcoming event with location data will be used.
| `apiKey` | The [OpenWeatherMap](https://home.openweathermap.org) API key, which can be obtained by creating an OpenWeatherMap account.
This value is **REQUIRED**
diff --git a/modules/default/weather/providers/openweathermap.js b/modules/default/weather/providers/openweathermap.js
index 89ccfcf5..64df4104 100644
--- a/modules/default/weather/providers/openweathermap.js
+++ b/modules/default/weather/providers/openweathermap.js
@@ -87,25 +87,64 @@ WeatherProvider.register("openweathermap", {
* Generate WeatherObjects based on forecast information
*/
generateWeatherObjectsFromForecast(forecasts) {
+ // initial variable declaration
const days = [];
+ // variables for temperature range and rain
+ var minTemp = [];
+ var maxTemp = [];
+ var rain = 0;
+ // variable for date
+ let date = "";
+ var weather = new WeatherObject(this.config.units);
for (const forecast of forecasts) {
- const weather = new WeatherObject(this.config.units);
-
- weather.date = moment(forecast.dt, "X");
- weather.minTemperature = forecast.temp.min;
- weather.maxTemperature = forecast.temp.max;
- weather.weatherType = this.convertWeatherType(forecast.weather[0].icon);
- if (this.config.units === "imperial" && !isNaN(forecast.rain)) {
- weather.rain = forecast.rain / 25.4
+
+ if (date === moment(forecast.dt, "X").format("YYYY-MM-DD")) {
+ // the same day as before
+ // add values from forecast to corresponding variables
+ minTemp.push(forecast.main.temp_min);
+ maxTemp.push(forecast.main.temp_max);
+ if (this.config.units === "imperial" && !isNaN(forecast.rain["3h"])) {
+ rain += forecast.rain["3h"] / 25.4;
+ } else {
+ rain += forecast.rain["3h"];
+ }
} else {
- weather.rain = forecast.rain;
+ // a new day
+ // calculate minimum/maximum temperature, specify rain amount
+ weather.minTemperature = Math.min.apply(null, minTemp);
+ weather.maxTemperature = Math.max.apply(null, maxTemp);
+ weather.rain = rain;
+ // push weather information to days array
+ days.push(weather);
+ // create new weather-object
+ weather = new WeatherObject(this.config.units);
+
+ minTemp = [];
+ maxTemp = [];
+ rain *= 0;
+
+ // set new date
+ date = moment(forecast.dt, "X").format("YYYY-MM-DD");
+
+ // specify date
+ weather.date = moment(forecast.dt, "X");
+
+ // select weather type by first forecast value of a day, is this reasonable?
+ weather.weatherType = this.convertWeatherType(forecast.weather[0].icon);
+
+ // add values from first forecast of this day to corresponding variables
+ minTemp.push(forecast.main.temp_min);
+ maxTemp.push(forecast.main.temp_max);
+ if (this.config.units === "imperial" && !isNaN(forecast.rain["3h"])) {
+ rain += forecast.rain["3h"] / 25.4;
+ } else {
+ rain += forecast.rain["3h"];
+ }
}
-
- days.push(weather);
}
-
- return days;
+
+ return days.slice(1);
},
/*