Library for fetching weather information from Finnish Meteorological Institute (FMI)
Project description
Finnish Meteorological Institute Weather
Library for fetching weather information from Finnish Meteorological Institute (FMI).
If you want to know how FMI API works, you can check out their WFS Examples and Guidelines page.
For the current weather information, this library requests observations from the past 10 minutes using timestep 10. Based on my tests this gave pretty reliable results from different weather stations.
Originally, I created this for myself to get FMI weather data to Home Assistant. I am not a meteorologist so if you are more weather-savvy, feel free to contribute and provide improvements! 💖
FYI: I don't use Home Assistant or this library anymore, so I may not know if things are broken or need updating. However, I'm more than happy to maintain this library, so if you find a bug or a need to update a dependency, feel free to file an issue. Even better, file a pull request that fixes the issues! 😉 💖
How to use
Working example can be found in example.py.
Install
$ pip install fmi-weather-client
Get weather, forecasts, and observations
You can get the weather using the following functions:
weather_by_place_name(place_name)weather_by_coordinates(latitude, longitude)observation_by_station_id(fmi_station_id)observation_by_place(place_name)
Example:
import fmi_weather_client as fmi
from fmi_weather_client.errors import ClientError, ServerError
try:
weather = fmi.weather_by_place_name("Jäppilä, Pieksämäki")
if weather is not None:
print(f"Temperature in {weather.place} is {weather.data.temperature}")
except ClientError as err:
print(f"Client error with status {err.status_code}: {err.message}")
except ServerError as err:
print(f"Server error with status {err.status_code}: {err.body}")
You can get the forecasts using the following functions:
forecast_by_place_name(place_name, [timestep_hours=24], [forecast_points = 4])forecast_by_coordinates(latitude, longitude, [timestep_hours=24], [forecast_points = 4])
Example:
import fmi_weather_client as fmi
from fmi_weather_client.errors import ClientError, ServerError
try:
forecast = fmi.forecast_by_coordinates(60.170998, 24.941325)
for weather_data in forecast.forecasts:
print(f"Temperature at {weather_data.time}: {weather_data.temperature}")
except ClientError as err:
print(f"Client error with status {err.status_code}: {err.message}")
except ServerError as err:
print(f"Server error with status {err.status_code}: {err.body}")
You can get the observation data from a station using the following functions:
observation_by_station_id(fmi_sid)
To get a weather observation from a station, you must provide a station ID. IDs can be found on FMI's station list. Note that weather observations are available only from weather stations. These are the ones with sää in the Ryhmä column.
Example:
import fmi_weather_client as fmi
from fmi_weather_client.errors import ClientError, ServerError
try:
weather = fmi.observation_by_station_id(101794)
if weather is not None:
print(f"Temperature at {weather.place} is {weather.data.temperature}")
except ClientError as err:
print(f"Client error with status {err.status_code}: {err.message}")
except ServerError as err:
print(f"Server error with status {err.status_code}: {err.body}")
All functions have asynchronous versions available with async_ prefix.
Errors
ClientError
Happens if FMI service returns 400-499. This can happens for example if:
- Provided coordinates are invalid
- Provided place is not recognized
- Weather data is not available
Error object contains status code and human-readable error message from FMI service.
ServerError
Happens if FMI service returns any other error.
Error object contains status code and raw response body from FMI service
Weather data
FMI provides the following commonly used information:
- Temperature (°C)
- Pressure (hPa)
- Humidity (%)
- Wind direction (°)
- Wind speed (m/s)
- Wind gust (m/s)
- Dew point (°)
- Cloud coverage (%)
- Precipitation intensity (mm/h)
- Symbol Documentation in Finnish
- Feels like temperature (°C), calculated from weather data Documentation in Finnish
There are also other information available. Check models.py and FMI documentation for more info.
Development
Setup
Create and activate a virtual environment
$ python -m venv venv
$ source venv/bin/activate
Install required packages
$ make setup
Deactivate virtual environment when you are done
$ deactivate
Run tests
This will run unit tests and code quality checks
$ make test
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fmi_weather_client-1.0.0.tar.gz.
File metadata
- Download URL: fmi_weather_client-1.0.0.tar.gz
- Upload date:
- Size: 30.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22888b797718100080d4688b3be84f6dc6fdf1d5496efb39db73c0d9e853bcfb
|
|
| MD5 |
317a3dccb8b068f049197a41b1c8239d
|
|
| BLAKE2b-256 |
7fc1a6c847758c9853911a407250d1adf5a8d1c4ab27516e1c31bd35ffca7df9
|
File details
Details for the file fmi_weather_client-1.0.0-py3-none-any.whl.
File metadata
- Download URL: fmi_weather_client-1.0.0-py3-none-any.whl
- Upload date:
- Size: 23.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
979d3327e19497b1d4ed0c82c6e51abf59f81e48de9f9af366bb050f08396f3a
|
|
| MD5 |
17bb72a51573db426653ba27d1fdedc8
|
|
| BLAKE2b-256 |
e1ceb172f753bf830d7e33a2b0059c429a4c4723f2a30ef5e69822985cef2eef
|