## Added Weather Provider for Open-Meteo.
I've found a completely free weather REST API (event with option of
self-hosting) after having problems with API keys from all MagicMirror
weather providers currently implemented (the remote services, not the
providers themselves).
This API doesn't return information about reverse geocode from latitude
and longitude options like others. I solved that issue using another
free API.
### APIs used
- [Open-Meteo Weather Forecast API](https://open-meteo.com/en/docs)
- [BigDataCloud’s Free Client-Side Reverse Geocoding
API](https://www.bigdatacloud.com/docs/api/free-reverse-geocode-to-city-api)
### Considerations
- This provider is config reliable so, be free to use the same config
you can found in the official MagicMirror Weather module documentation.
- This module config skips the `apiKey` parameter. It's not used at all.
Only `latitude` and `longitude` are required.
#### Config examples:
```
modules: [
{
module: "weather",
position: "top_right",
header: "Weather Forecast",
config: {
updateInterval: <number here>,
weatherProvider: "openmeteo",
type: "current",
lat: <number here>,
lon: <number here>,
showHumidity: true,
showWindDirectionAsArrow: true,
showWindDirection: true,
degreeLabel: true,
}
},
{
module: "weather",
position: "top_right",
header: "Weather Forecast",
config: {
updateInterval: <number here>,
weatherProvider: "openmeteo",
type: "daily",
lat: <number here>,
lon: <number here>
colored: true,
maxNumberOfDays: <number here>,
showPrecipitationAmount: true,
appendLocationNameToHeader: true
}
},
{
module: "weather",
position: "top_right",
header: "Weather Forecast",
config: {
updateInterval: <number here>,
weatherProvider: "openmeteo",
type: "hourly",
lat: <number here>,
lon: <number here>,
maxEntries: <number here>,
showPrecipitationAmount: true,
degreeLabel: true,
appendLocationNameToHeader: true
}
},
]
```
Co-authored-by: Michael Teeuw <michael@xonaymedia.nl>
# Added Yr.no as a weather provider
Yr.no is a free Norwegian weather service. The configuration is quite
simple:
```js
{
weatherProvider: "yr",
lat: 59.9171,
lon: 10.7276,
altitude: 30
}
```
The latitude and longitude cannot have more than 4 decimals, but that
should be plenty. To quote yr: "There is no need to ask for weather
forecasts with nanometer precision!". The altitude should be meters
above sea level and defaults to 0. If `type` is set to `current` the
symbol can display the next 1, 6 or 12 hours by setting
`currentForecastHours` (default is 1).
It states in [Getting
started-guide](https://developer.yr.no/doc/GettingStarted/) that users
of the API should cache the results and use the `Expires`-header to know
when to ask for new data. By using the `If-Modified-Since`-header we can
avoid downloading the same data over and over again. I chose not to
override the `User-Agent`-header set in
[`server.js`](https://github.com/MichMich/MagicMirror/blob/a328ce5/js/server.js#L97)
even though it does not comply with [the terms of
service](https://developer.yr.no/doc/TermsOfService/). It currently
works with the default header, and by searching the web for MagicMirror
the GitHub-repo should be easy to find without an explicit link.
I also had to make some minor changes to `server.js` and
`weatherprovider.js` to be able to send and return HTTP headers. To
handle the HTTP 304 response without body I chose to return `undefined`
so we easily can use the response as a condition: `if (response) ...`.
The documentation for the API is available here:
- [API Reference overview](https://api.met.no/weatherapi/)
-
[Locationforecast](https://api.met.no/weatherapi/locationforecast/2.0/)
- Used to get the weather forecast
- [Sunrise](https://api.met.no/weatherapi/sunrise/2.0/documentation) -
used to find sunrise and sunset times
Co-authored-by: Veeck <github@veeck.de>
So finally I think this refactorin is ready to be reviewed :-)
DONE:
- [x] Removed all conversion functions for wind and temperature from
specific weatherproviders
- [x] Use internally only metric units: celsius for temperature, meters
per seconds for wind
- [x] Convert temp and wind into the configured units when displaying
data on the UI
- [x] look how beaufort calculation uses metrics, added knots as new
windunit
- [x] add more e2e tests
Checked providers:
- [x] Darksky
- [x] EnvCanada
- [x] OpenWeatherMap
- [x] SMHI provider
- [x] UK Met Office
- [x] UK Met Office DataHub
- [x] WeatherBit
- [x] WeatherFlow
- [x] WeatherGov
TODO in different tickets:
- check weatherproviders for usage of weatherEndpoint (as seen in
https://github.com/MichMich/MagicMirror-Documentation/issues/131) -> see
#2926
- cleanup precipations -> #2953
Co-authored-by: veeck <michael@veeck.de>
small update to the fetchData method to use the fetch helper instead of
the old XCMLHttpRequest.
Also fixes some typos :-)
Co-authored-by: veeck <michael@veeck.de>
This PR addresses [this
comment](48756e8774 (commitcomment-85772193)),
which points out an issue with #2902.
Looks like the apparent temp calculation method was incorrectly
referenced 😅