# PV production forecast
BETA
The box forecasts the production of your panels, hour by hour, until the end of the
next day, and shows it in the app next to the measured production. It is a feature of
the **Community** edition (GPL-3.0): it relies on the energy engine and the
[OpenMeteo](../appareils/tarifs/openmeteo.md) plugin, with no ETM service involved.
!!! info "Beta"
Delivered and running on our test installation, it is not yet published in a
channel of the APT repository.
## What you see in the app
- **The expected production curve**, hour by hour until the end of the next day,
overlaid on the measured production.
- **A weather range** around this curve (see below).
- **Hour-by-hour weather** on the "Journée" card: an icon (sun, clouds, rain…), day or
night, and the temperature.
## How the forecast is computed
For each declared PV plane — tilt, orientation, peak power (kWp) and system efficiency
—, the box converts the irradiance forecast by Open-Meteo into power. It then adds up
all the planes of the site.
Two corrections apply, both **deterministic**: public physical models, parameterised
from datasheets, with no learning at all.
- **Temperature correction**: a hot module produces less. The box estimates this from
the forecast temperature, the NOCT and the temperature coefficient of the modules.
- **Inverter ceiling**: the sum of the planes never exceeds the inverter's maximum AC
power, if it has been entered.
The forecast is recomputed whenever the weather models publish a new run — at most once
an hour.
### A forecast, and an optimistic ceiling
What the box shows is a **forecast**, not a measurement. It is also an **optimistic
ceiling**: shading (trees, chimney, neighbouring buildings) and soiled panels are not
modelled. Actual production below the curve is therefore normal and does not indicate a
fault.
### An hour without data is a gap, never a zero
If an hour is missing (internet down, weather service unavailable), the curve breaks.
The box never writes "0" instead: a zero would read as "no sun expected".
## The weather range
Around the curve, the app draws a band:
**forecast × (1 ± spread of the day's models)**. The spread measures how far several
weather models disagree about the day.
This band qualifies **the weather**, and only the weather. It says nothing about the
accuracy of the production forecast: shading and soiling are not in it. On a clear,
stable day it is narrow, precisely when the error from those factors is largest. It is
therefore neither an "expected error" nor a "confidence interval".
## Commissioning
1. Install the OpenMeteo plugin and create the **site** and its **PV planes** — see
[OpenMeteo](../appareils/tarifs/openmeteo.md).
2. **Designate the forecast site** in the app. Until one is designated, the forecast
card shows a notice and offers the available sites. All planes of the designated
site are added up.
3. Optional: enter the **inverter ceiling** (maximum AC power, in W). Without it, no
ceiling is applied.
## What the forecast does not do
This is the central rule of the Community edition: **without an optimiser, control is
rule-based** (solar surplus, load shedding, priorities). The PV forecast, the
[entered tariff](../tarifs.md) and the baseload are **displayed** and **recorded
locally**, but never used to decide. An automated test checks this: the engine makes
the same decisions with and without forecast, tariff and consumption profile.
The local record is used to measure forecast accuracy over time. Validation on a real
installation is under way; no accuracy figure is published before it is complete.
## Baseload forecast COMING
The box will compute a household consumption profile, excluding controlled loads, from
its own measurements: a median for each hour of the day, separately for working days
and weekends. A profile needs at least **7 days** of measurements. Until then nothing
is shown: an absence, never a zero.
## Your data
Only the OpenMeteo plugin connects to the internet. It sends only the **site's
coordinates** (rounded to about 1 km in the plugin versions that carry this feature; version `1.15.2+etm1` in the testing channel sends them unrounded), its **altitude** if entered, and the
**orientation of the panels** (tilt, azimuth). Measurements, recorded forecasts, the
tariff and consumption stay on the box. Remote access is disabled by default: it opens
only if you enable it yourself in the app.
## What about an optimiser?
An optimiser, on the other hand, can use these forecasts to plan: the engine hands them
over, together with the entered tariff and the baseload, through an
[open, published protocol](../optimiseur/protocole.md). The optimiser runs at your place,
on the box or on a machine in your local network, and gets its data from the engine only;
its setpoints stay capped by the engine's bounds and safety. Connecting an optimiser is
being tested; the Community edition works entirely without one. See the
[Optimizer](../optimiseur/index.md) section.