Module UltimateMeteo EN
Module UltimateMeteo
Overview
The UltimateMeteo module is an extension for Dolibarr ERP/CRM published by Atoo-Net.
It displays real-time weather directly on your third-party, supplier, contact and member cards, based on the address stored in Dolibarr. It uses free APIs and requires no API key.
| Property | Value |
|---|---|
| Author | Philippe Grand — Atoo-Net |
| Version | 24.0.2 |
| License | GNU GPL v3+ |
| Dolibarr minimum | v24.0 |
| PHP minimum | v8.0 |
Why use UltimateMeteo?
Weather conditions have a direct impact on many professional activities. UltimateMeteo integrates weather information where you need it — directly in your Dolibarr cards — to make better decisions without switching tools.
Use cases
Construction & Building trades
Before scheduling an outdoor intervention (roofing, painting, foundations), check the weather forecast at your client's address directly from their card.
Agriculture & Landscaping
When planning treatments, seeding or mowing, check weather conditions at your client's location. A quick look at the Weather tab tells you if the week is favorable.
Transport & Logistics
When preparing a delivery or pickup, check wind speed and weather conditions at destination. This helps anticipate delays, adapt routes or warn the client in advance.
Events & Outdoor services
For caterers, event organizers or rental companies, knowing the forecast at the venue address helps confirm or adjust on-site logistics.
Field sales
Sales representatives on the road can check the weather at each stop before departing. Combined with Dolibarr's agenda management, this provides planning that accounts for weather conditions.
Customer service
When a customer reports a problem (water infiltration, equipment failure), instantly viewing recent weather at their address helps qualify the incident and prioritize intervention.
Installation
- Download the module from DoliStore
- Unzip and place the
ultimatemeteo/folder inhtdocs/custom/ - Go to Home → Setup → Modules/Applications
- Locate UltimateMeteo in the AtooNet section
- Enable the module by clicking the button in the Enabled column
Setup
Permissions
After activation, configure access rights per user group in Home → Setup → Users & Groups → Groups:
| Permission | Description |
|---|---|
Read weather data |
View weather tabs on cards |
Create / Update |
Trigger weather data refresh |
Delete |
Delete weather records |
Module settings
Since version 24.0.1, the Settings tab of the module setup page (Home → Setup → Modules/Applications → UltimateMeteo → gear icon) gathers every option. Since version 24.0.2 they are split into five sections.
Default values are applied automatically when the module is enabled. They are preserved if the module is disabled and enabled again.
Objects involved
| Setting | Values | Default | Description |
|---|---|---|---|
| Objects to show the weather on | Third party, Contact, Member (multiple choice) | All three | Defines which Dolibarr cards get the Weather tab and, where applicable, the summary line on the card itself. |
The Member entry is offered only if the native Members module is enabled.
Note: the change takes effect immediately, as soon as the card is reloaded. There is no need to disable and enable UltimateMeteo again. Unchecking an object hides its tab and denies direct access to the matching page, but does not delete any stored data.
Current weather display
| Setting | Values | Default | Description |
|---|---|---|---|
| Temperature unit | Celsius / Fahrenheit | Celsius | Unit requested from the Open-Meteo API and displayed in the Weather tab. It applies to both current weather and the forecast table. |
| Wind speed unit | km/h, m/s, mph, knots | km/h | Same for wind speed. The knots unit is convenient for marine activities. |
| Show weather on the card | Yes / No | Yes | Adds a one-line weather summary directly on the card of the objects selected above, in addition to the Weather tab. Each card view triggers a call to the external APIs, within the cache limit. |
| Wind alert threshold | 0 to 300 | 0 | Above this value, wind speed is highlighted in red, both on the card and in the Max wind forecast column. A value of 0 disables the alert. |
Important: the alert threshold is expressed in the selected wind unit. If you switch from km/h to mph, remember to adjust the threshold accordingly — no automatic conversion is performed.
Forecast
| Setting | Values | Default | Description |
|---|---|---|---|
| Show the forecast table | Yes / No | Yes | Shows or hides the forecast table below current weather. |
| Number of forecast days | 1 to 16 | 5 | Number of days displayed. Open-Meteo accepts up to 16 days, with decreasing reliability beyond one week. |
| Additional forecast columns | multi-select list | none | Optional columns added next to the minimum and maximum temperatures. |
The available optional columns are:
| Column | Open-Meteo field | Purpose |
|---|---|---|
| Weather description | weathercode |
Dominant condition of the day, with pictogram |
| Precipitation | precipitation_sum |
Daily rainfall total, in mm |
| Max wind | windspeed_10m_max |
Maximum expected gust; follows the wind alert threshold |
| Sunrise / sunset | sunrise, sunset |
Usable daylight window for outdoor work |
| Max UV index | uv_index_max |
Sun exposure, useful for team safety |
These columns do not trigger any extra call: they are requested within the same Open-Meteo query.
Map
| Setting | Values | Default | Description |
|---|---|---|---|
| Show the map | Yes / No | Yes | Displays the OpenStreetMap map locating the third party. Disabling it avoids loading the Leaflet library from an external CDN. |
| Map zoom level | 1 to 19 | 12 | 1 is the whole world, 19 is street level. |
| Map height (px) | 150 to 1200 | 500 | Height of the map block, in pixels. |
External services and technical settings
| Setting | Values | Default | Description |
|---|---|---|---|
| Cache duration (minutes) | 1 to 1440 | 30 | How long a weather record stays valid before a new API call is made. A high value reduces the number of calls to external services. |
| HTTP timeout (seconds) | 1 to 60 | 5 | Maximum wait time for API calls. A value that is too high slows down card display when a service is unavailable. |
| Technical contact email | company email | Sent in the User-Agent header of the calls. The Nominatim usage policy requires the operator to be identifiable. If the field is empty, the company email configured in Dolibarr is used. | |
| Geocoding service URL | url | https://nominatim.openstreetmap.org/search | Service converting the third party's city into GPS coordinates. It can point to a self-hosted Nominatim instance. |
| Weather API URL | url | https://api.open-meteo.com/v1/forecast | Service providing weather data. It can point to a self-hosted Open-Meteo instance. |
Note: if either URL field is left empty, the module automatically falls back to the corresponding public service.
Data cache
Since version 24.0.0, the module uses a smart cache:
- Weather data is stored in the
llx_ultimatemeteo_currentweatherdatabase table - If a record exists for a third party and is newer than the configured cache duration (30 minutes by default), data is updated (UPDATE) instead of creating a new record
- If no recent record exists, a new one is created
- This prevents excessive row accumulation in the database
Timezone
Forecast times are expressed in the timezone of the geocoded location (Open-Meteo's
timezone=auto parameter). A third party located abroad therefore shows its own local
times, not those of the Dolibarr server.
Usage
Weather tab
The module adds a Weather tab on each third-party card (customers, prospects, suppliers), provided the Third party object is ticked in the Objects to show the weather on setting.
When opening this tab, Dolibarr:
- Retrieves the address (postal code + city) from the card
- Geocodes the address via the OpenStreetMap Nominatim API to get GPS coordinates
- Queries the Open-Meteo API for current weather and forecasts
- Displays results with an interactive map
Displayed information:
| Field | Description |
|---|---|
| Temperature | Current temperature, in the configured unit (°C or °F) |
| Wind speed | Wind speed, in the configured unit (km/h, m/s, mph or knots). Highlighted in red when the alert threshold is exceeded |
| Weather description | Weather condition (Clear sky, Overcast, Rain, Snow, Thunderstorm…) |
| Date | Date and time of last observation |
If the Show weather on the card option is enabled, a one-line summary (pictogram, condition, temperature and wind) is also added on the card itself, without having to open the Weather tab.
Forecast for the next days
Below current data, a table shows forecasts for the configured number of days (5 days by default, up to 16). Each row contains:
- The date, in the location's timezone
- Minimum temperature (Min)
- Maximum temperature (Max)
- The optional columns enabled in the setup: weather description, precipitation, max wind, sunrise / sunset, max UV index
This table can be hidden entirely through the Show the forecast table setting.
Interactive map
An interactive OpenStreetMap map (via Leaflet 1.9.4) is displayed at the bottom with:
- A marker positioned on the third party's city
- A popup showing the location name
- Zoom +/− available
- OpenStreetMap attribution compliant with the OSM tile usage policy
The initial zoom level and the block height are configurable, and the map can be disabled to avoid any load from an external CDN.
Contact tab
The same Weather tab is available on contact/address cards. It works identically using the contact's address.
Member tab
Since version 24.0.2, the same Weather tab is available on member cards, under two conditions:
- the native Members module is enabled;
- the Member object is ticked in the Objects to show the weather on setting.
Geocoding uses the postal code and city stored on the member card. A member without a city still shows the tab, but no weather data can be computed.
Records are stored in the llx_ultimatemeteo_currentweather table through the
fk_member column. If the member is linked to a third party, the fk_soc
column is filled in as well; otherwise it stays empty.
Note: the fk_member column is added automatically when the module is upgraded. On
an existing installation, disable and enable UltimateMeteo once so that the structure change is
applied. The operation is not destructive: existing records are kept.
Supported weather conditions
The module uses standard WMO codes and translates them automatically into 5 languages (FR, EN, DE, ES, IT):
| WMO Code | Description |
|---|---|
| 0 | Clear sky |
| 1 | Mostly clear |
| 2 | Partly cloudy |
| 3 | Overcast |
| 45 / 48 | Fog / Freezing fog |
| 51 / 53 / 55 | Light / Moderate / Dense drizzle |
| 61 / 63 / 65 | Light / Moderate / Heavy rain |
| 71 / 73 / 75 | Light / Moderate / Heavy snow |
| 77 | Snow grains |
| 80 / 81 / 82 | Light / Moderate / Violent showers |
| 85 / 86 | Light / Heavy snow showers |
| 95 | Thunderstorm |
| 96 / 99 | Thunderstorm with light / heavy hail |
APIs used
The module relies on entirely free APIs, with no registration or API key required:
| API | Role | URL |
|---|---|---|
| Open-Meteo | Current weather and forecasts | https://api.open-meteo.com |
| OpenStreetMap Nominatim | Address geocoding → GPS coordinates | https://nominatim.openstreetmap.org |
| Leaflet 1.9.4 | Interactive map library | https://leafletjs.com |
| OpenStreetMap Tiles | Map tiles | https://tile.openstreetmap.org |
What's new in version 24.0.2
Improvements
- Weather tab on members: new
currentweather_member.phppage showing current weather, forecast and map at the member's address. Available only if the native Members module is enabled - Configurable objects: a new Objects to show the weather on setting selects which cards get the Weather tab (Third party, Contact, Member). The change takes effect immediately, with no module reload
- Card summary generalised: the weather summary line, previously limited to third parties, now also appears on the selected contact and member cards
- Cache honoured on all three tabs: the third party, contact and member tabs update the existing record as long as it is newer than the configured cache lifetime, instead of inserting a row on every view
Fixes
- Cache actually effective: record freshness was compared on the
tmscolumn, a MySQLTIMESTAMPreturned in UTC, whereas Dolibarr writes dates in the server time zone. The offset invalidated the cache every time, causing an external API call and a new row on every view. The comparison now usesdate_weather - PHP warnings removed: when the town was missing or geocoding failed, the tabs displayed "Undefined variable" messages. Weather variables are now initialised before display
- Member column hidden: the
fk_memberfield no longer shows up in the third party and contact tab tables
Database
- New
fk_membercolumn inllx_ultimatemeteo_currentweather, added automatically when the module is loaded. The operation is not destructive
What's new in version 24.0.1
Improvements
- Settings tab: 14 configuration parameters replace the previously hardcoded values (units, forecast, map, external services, cache, HTTP timeout)
- Configurable units: temperature in °C or °F, wind in km/h, m/s, mph or knots, passed directly to the Open-Meteo API
- Wind alert: configurable threshold above which wind speed is highlighted in red
- Configurable forecast: number of days (1 to 16) and optional columns (description, precipitation, max wind, sunrise / sunset, UV index)
- Configurable map: initial zoom, block height, and the ability to disable the external CDN load entirely
- Self-hostable services: the Nominatim and Open-Meteo URLs can point to your own instances
- Technical contact email: sent in the User-Agent header, in compliance with the Nominatim usage policy
- Complete translations: all 5 languages (fr, en, de, es, it) now cover every setup label and tooltip
Bug fixes
- Third-party hook fixed: the hook class was moved from
core/hooks/toclass/actions_ultimatemeteo.class.php, the only location scanned by Dolibarr'sHookManager. The weather summary on the third-party card was therefore never displayed - Default values: they are now applied when the module is enabled, through
$this->const, following module builder practices - More accurate geocoding: the lookup now uses the postal code and the city instead of the city alone
- Units in labels: the hardcoded "(°C)" and "(km/h)" mentions were removed from the translations, since the actually configured unit is displayed next to the value
What's new in version 24.0.0
Bug fixes
- 403r error on OpenStreetMap maps: added
referrerPolicyand attribution in compliance with the 2026 OSM tile policy - Leaflet pinned to version 1.9.4 with SRI integrity check (instead of unversioned CDN URL)
- Secure API calls: replaced
file_get_contentswith cURL and proper User-Agent in the third-party hook - Data cache: UPDATE/INSERT mechanism with 30-minute cache (removes systematic INSERT on every page view)
- Dynamic timezone: uses Dolibarr configuration instead of hardcoded Europe/Paris
Improvements
- Complete weather codes: added WMO codes 71-99 (snow, showers, thunderstorms, hail) in all 5 language files
- Internationalization: weather descriptions now use Dolibarr's translation system (
$langs->trans()) - Wiki help links: added contextual documentation links to all module pages
- Dolibarr v24 compatibility: updated patterns to follow v24 conventions
FAQ
Weather is not displayed
Check that the third-party, contact or member card has a postal code and city filled in. Geocoding requires at least a city name.
The Weather tab does not appear on a card
Open the module Settings tab and check that the object is ticked in Objects to show the weather on. For members, also check that the native Members module is enabled: without it the entry is not even offered.
I upgraded the module but the member tab returns an SQL error
The fk_member column has not been created yet. Disable and enable UltimateMeteo once: Dolibarr then replays the module SQL scripts and adds the column. The operation is not destructive.
The map shows "Access blocked" or "403r"
This issue was fixed in version 24.0.0. OpenStreetMap enforced its Referer policy in early 2026. The update includes:
- Adding
referrerPolicy: "strict-origin-when-cross-origin"to the Leaflet configuration - The mandatory
© OpenStreetMap contributorsattribution - Pinning Leaflet to a stable version (1.9.4)
Is weather data updated automatically?
Data is fetched each time the Weather tab is opened. A cache prevents repetitive API calls: if the last record is newer than the configured cache duration (30 minutes by default), it is simply updated in the database instead of creating a new record. This duration is set in the module's Settings tab.
How do I display temperatures in Fahrenheit?
In the module's Settings tab, select Fahrenheit (°F) as the temperature unit. The unit is passed directly to the Open-Meteo API, so the conversion happens at the source, and the selected unit is displayed next to each value.
Is the wind alert threshold converted automatically?
No. The threshold is expressed in the selected wind unit. If you switch from km/h to mph, remember to adjust the threshold value accordingly.
Does the module work offline?
No. The module requires Internet access to query the Open-Meteo and Nominatim APIs.
It is however possible to stay on an internal network by filling in, in the Settings tab, the URLs of self-hosted Nominatim and Open-Meteo instances, and by disabling the map to avoid loading Leaflet from an external CDN.
What languages are supported?
The module is available in: French, English, German, Spanish, Italian.
How to access online help?
Each module page has a contextual help link (? icon in the top right corner) that links to the corresponding section of this wiki page.
See also
- Atoo-Net — Module publisher
- Open-Meteo API documentation
- OpenStreetMap tile usage policy
- Leaflet documentation