mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-06-27 19:53:36 +00:00
add weatherprovider for weatherflow
This commit is contained in:
parent
81ae95eba7
commit
e791a663c8
86
modules/default/weather/providers/weatherflow.js
Normal file
86
modules/default/weather/providers/weatherflow.js
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
/* global WeatherProvider, WeatherObject */
|
||||||
|
|
||||||
|
/* MagicMirror²
|
||||||
|
* Module: Weather
|
||||||
|
* Provider: Dark Sky
|
||||||
|
*
|
||||||
|
* By Tobias Dreyem https://github.com/10bias
|
||||||
|
* MIT Licensed
|
||||||
|
*
|
||||||
|
* This class is a provider for Weatherflow.
|
||||||
|
* Note that the Weatherflow API does not provide snowfall.
|
||||||
|
*/
|
||||||
|
|
||||||
|
WeatherProvider.register("weatherflow", {
|
||||||
|
// Set the name of the provider.
|
||||||
|
// Not strictly required, but helps for debugging
|
||||||
|
providerName: "WeatherFlow",
|
||||||
|
|
||||||
|
// Set the default config properties that is specific to this provider
|
||||||
|
defaults: {
|
||||||
|
apiBase: "https://swd.weatherflow.com/swd/rest/",
|
||||||
|
token: "",
|
||||||
|
stationid: "",
|
||||||
|
},
|
||||||
|
|
||||||
|
units: {
|
||||||
|
imperial: "us",
|
||||||
|
metric: "si"
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
fetchCurrentWeather() {
|
||||||
|
this.fetchData(this.getUrl())
|
||||||
|
.then((data) => {
|
||||||
|
const currentWeather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits, this.config.useKmh);
|
||||||
|
currentWeather.date = moment();
|
||||||
|
|
||||||
|
currentWeather.humidity = data.current_conditions.relative_humidity;
|
||||||
|
currentWeather.temperature = data.current_conditions.air_temperature;
|
||||||
|
currentWeather.windSpeed = data.current_conditions.wind_avg;
|
||||||
|
currentWeather.windDirection = data.current_conditions.wind_direction;
|
||||||
|
currentWeather.weatherType = data.forecast.daily[0].icon;
|
||||||
|
currentWeather.sunrise = moment(data.forecast.daily[0].sunrise), "X";
|
||||||
|
currentWeather.sunset = moment(data.forecast.daily[0].sunset, "X");
|
||||||
|
this.setCurrentWeather(currentWeather);
|
||||||
|
|
||||||
|
})
|
||||||
|
.catch(function (request) {
|
||||||
|
Log.error("Could not load data ... ", request);
|
||||||
|
})
|
||||||
|
.finally(() => this.updateAvailable());
|
||||||
|
},
|
||||||
|
|
||||||
|
fetchWeatherForecast() {
|
||||||
|
this.fetchData(this.getUrl())
|
||||||
|
.then((data) => {
|
||||||
|
const days = [];
|
||||||
|
|
||||||
|
for(const forecast of data.forecast.daily) {
|
||||||
|
|
||||||
|
const weather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits, this.config.useKmh);
|
||||||
|
|
||||||
|
weather.date = moment(forecast.day_start_local, "X");
|
||||||
|
weather.minTemperature = forecast.air_temp_low;
|
||||||
|
weather.maxTemperature = forecast.air_temp_high;
|
||||||
|
weather.weatherType = forecast.icon;
|
||||||
|
weather.snow = 0;
|
||||||
|
|
||||||
|
|
||||||
|
days.push(weather);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setWeatherForecast(days);
|
||||||
|
|
||||||
|
})
|
||||||
|
.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 + "better_forecast?station_id=" + this.config.stationid + "&token=" + this.config.token
|
||||||
|
}
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user