From fc303146a53ed8101349ba79f22286c480a2332a Mon Sep 17 00:00:00 2001 From: Veeck Date: Sat, 7 Jan 2023 20:14:03 +0100 Subject: [PATCH] Remove darksky weather provider (#2993) since the web api gets shut down end of march, see https://darksky.net/dev Co-authored-by: veeck --- CHANGELOG.md | 4 + modules/default/weather/providers/darksky.js | 132 ------------------- 2 files changed, 4 insertions(+), 132 deletions(-) delete mode 100644 modules/default/weather/providers/darksky.js diff --git a/CHANGELOG.md b/CHANGELOG.md index f4f3777f..777f5132 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ _This release is scheduled to be released on 2023-04-01._ ### Added +### Removed + +- Removed darksky weather provider + ### Updated - Use develop as target branch for dependabot diff --git a/modules/default/weather/providers/darksky.js b/modules/default/weather/providers/darksky.js deleted file mode 100644 index aa48a12b..00000000 --- a/modules/default/weather/providers/darksky.js +++ /dev/null @@ -1,132 +0,0 @@ -/* global WeatherProvider, WeatherObject */ - -/* MagicMirror² - * Module: Weather - * Provider: Dark Sky - * - * By Nicholas Hubbard https://github.com/nhubbard - * MIT Licensed - * - * This class is a provider for Dark Sky. - * Note that the Dark Sky API does not provide rainfall. Instead it provides - * snowfall and precipitation probability - */ -WeatherProvider.register("darksky", { - // Set the name of the provider. - // Not strictly required, but helps for debugging. - providerName: "Dark Sky", - - // Set the default config properties that is specific to this provider - defaults: { - useCorsProxy: true, - apiBase: "https://api.darksky.net", - weatherEndpoint: "/forecast", - apiKey: "", - lat: 0, - lon: 0 - }, - - fetchCurrentWeather() { - this.fetchData(this.getUrl()) - .then((data) => { - if (!data || !data.currently || typeof data.currently.temperature === "undefined") { - // No usable data? - return; - } - - const currentWeather = this.generateWeatherDayFromCurrentWeather(data); - this.setCurrentWeather(currentWeather); - }) - .catch(function (request) { - Log.error("Could not load data ... ", request); - }) - .finally(() => this.updateAvailable()); - }, - - fetchWeatherForecast() { - this.fetchData(this.getUrl()) - .then((data) => { - if (!data || !data.daily || !data.daily.data.length) { - // No usable data? - return; - } - - const forecast = this.generateWeatherObjectsFromForecast(data.daily.data); - this.setWeatherForecast(forecast); - }) - .catch(function (request) { - Log.error("Could not load data ... ", request); - }) - .finally(() => this.updateAvailable()); - }, - - // Create a URL from the config and base URL. - getUrl() { - return `${this.config.apiBase}${this.config.weatherEndpoint}/${this.config.apiKey}/${this.config.lat},${this.config.lon}?units=si&lang=${this.config.lang}`; - }, - - // Implement WeatherDay generator. - generateWeatherDayFromCurrentWeather(currentWeatherData) { - const currentWeather = new WeatherObject(); - - currentWeather.date = moment(); - currentWeather.humidity = parseFloat(currentWeatherData.currently.humidity); - currentWeather.temperature = parseFloat(currentWeatherData.currently.temperature); - currentWeather.windSpeed = parseFloat(currentWeatherData.currently.windSpeed); - currentWeather.windDirection = currentWeatherData.currently.windBearing; - currentWeather.weatherType = this.convertWeatherType(currentWeatherData.currently.icon); - currentWeather.sunrise = moment.unix(currentWeatherData.daily.data[0].sunriseTime); - currentWeather.sunset = moment.unix(currentWeatherData.daily.data[0].sunsetTime); - - return currentWeather; - }, - - generateWeatherObjectsFromForecast(forecasts) { - const days = []; - - for (const forecast of forecasts) { - const weather = new WeatherObject(); - - weather.date = moment.unix(forecast.time); - weather.minTemperature = forecast.temperatureMin; - weather.maxTemperature = forecast.temperatureMax; - weather.weatherType = this.convertWeatherType(forecast.icon); - weather.snow = 0; - - // The API will return centimeters if units is 'si' and will return inches for 'us' - // Note that the Dark Sky API does not provide rainfall. - // Instead it provides snowfall and precipitation probability - if (forecast.hasOwnProperty("precipAccumulation")) { - if (this.config.units === "imperial" && !isNaN(forecast.precipAccumulation)) { - weather.snow = forecast.precipAccumulation; - } else if (!isNaN(forecast.precipAccumulation)) { - weather.snow = forecast.precipAccumulation * 10; - } - } - - weather.precipitation = weather.snow; - - days.push(weather); - } - - return days; - }, - - // Map icons from Dark Sky to our icons. - convertWeatherType(weatherType) { - const weatherTypes = { - "clear-day": "day-sunny", - "clear-night": "night-clear", - rain: "rain", - snow: "snow", - sleet: "snow", - wind: "wind", - fog: "fog", - cloudy: "cloudy", - "partly-cloudy-day": "day-cloudy", - "partly-cloudy-night": "night-cloudy" - }; - - return weatherTypes.hasOwnProperty(weatherType) ? weatherTypes[weatherType] : null; - } -});