Pro Weather.
Weather features

Solar forecast

An hour-by-hour power forecast for your own solar panels, scored against your station's solar sensor, with an API for evcc, EMHASS and Home Assistant.

An hour-by-hour forecast of what your own panels will make over the next two days, for the software that schedules your battery or car charging. Set it up under Setup → Machine learning. It is included in Pro and the free trial.

How it works

Every hour, Pro Weather takes the sunshine forecast from several weather models for your station's location, gives more weight to the models your station's solar sensor has found most accurate, and turns that into power for each of your panel arrays: sun position, panel angle, panel temperature, losses and inverter limit.

The forecast is marked corrected once your solar sensor has scored the models for a couple of days. Without a solar sensor every model counts the same. Your sensor sees the sky, not your roof: to account for shade or dirty panels, send your measured production.

Setting up your panels

Add one row per roof face, up to four. An east-west roof is two rows.

  • kWp: peak power of the array, from your installer's paperwork or panel count times panel rating.
  • Tilt °: 0 for flat, 90 for a wall. Pitched roofs are usually 30 to 45.
  • Azimuth °: 0 is south, -90 east, 90 west, 180 north.
  • Losses %: wiring, dirt and inverter. 14% suits most systems.
  • Inverter kW: the inverter's maximum output. Leave empty if unknown.

Then create an API token on the same page. Creating a new token stops the old one immediately.

Connect evcc

Add this to evcc.yaml:

tariffs:
  solar:
    - type: custom
      tariff: solar
      forecast:
        source: http
        uri: https://pro-weather.com/api/solar
        headers:
          - Authorization: Bearer <your token>
        jq: .slots | tostring
      interval: 1h

Connect EMHASS or a script

With a 60-minute optimization time step, pass each slot's value to EMHASS's dayahead-optim action:

curl -s -H "Authorization: Bearer <your token>" https://pro-weather.com/api/solar \
  | jq '{pv_power_forecast: [.slots[].value]}'

Node-RED and your own scripts can read the same URL.

Home Assistant

The Pro Weather Solar Forecast integration feeds the Energy dashboard's solar forecast and adds sensors for automations.

  1. In HACS, open the three-dot menu → Custom repositories, add https://github.com/LNNRT-STN/ha-pro-weather as an Integration, download Pro Weather Solar Forecast and restart Home Assistant.
  2. Under Settings → Devices & services → Add integration, pick Pro Weather Solar Forecast and paste your token.
  3. Under Settings → Dashboards → Energy, edit your solar production and select the Pro Weather entry as its Solar production forecast.

You get power now, energy this hour and next, energy today, remaining today and tomorrow, peak power and peak time today, and a Corrected by station sensor. "Today" follows your Home Assistant time zone.

For Predbat, point pv_forecast_today and pv_forecast_tomorrow at the energy today and energy tomorrow sensors. They carry a Solcast-style detailedForecast attribute with pv_estimate10 and pv_estimate90 (integration 0.2.0 and later).

Teach it your roof

In the integration's options (Settings → Devices & services → Pro Weather Solar Forecast → Configure), pick your Solar production sensor: the kWh or Wh sensor your Energy dashboard uses for solar production. The integration then sends each finished hour to Pro Weather.

From bright hours where the sky did what the forecast said, Pro Weather learns how much of the forecast your panels actually deliver. Power cuts, snow, a full battery and export limits are left out. After 24 good hours it is applied to every number, and it keeps learning over the last 30 days. Setup → Machine learning shows it, for example "your panels make 92 % of what the forecast expected". It stays between 50% and 130%: a bigger gap means the kWp, tilt or azimuth is wrong.

A battery that is often full can make the number read low, because the inverter then produces less than the roof could.

Without the integration

A REST sensor gives you the rest of today's forecast. In secrets.yaml, set proweather_solar: "Bearer <your token>", then:

rest:
  - resource: https://pro-weather.com/api/solar
    headers:
      Authorization: !secret proweather_solar
    scan_interval: 1800
    sensor:
      - name: Solar forecast rest of today
        unit_of_measurement: kWh
        value_template: "{{ ((value_json.daily.values() | list)[0] / 1000) | round(1) }}"

A REST sensor cannot feed the Energy dashboard's forecast line.

The API

GET https://pro-weather.com/api/solar with Authorization: Bearer <your token> returns the next 48 hours:

{
  "generatedAt": "2026-09-24T09:12:03.120Z",
  "issuedAt": "2026-09-24T09:00:00.000Z",
  "corrected": true,
  "station": { "name": "Ardooie", "timezone": "Europe/Brussels" },
  "arrays": [{ "name": "Roof south", "kwp": 5.2 }],
  "scale": { "active": true, "value": 0.92, "samples": 212 },
  "slots": [
    { "start": "2026-09-24T09:00:00Z", "end": "2026-09-24T10:00:00Z", "value": 2140, "wh": 2140, "ghi": 512, "p10": 1310, "p90": 2780 }
  ],
  "wh_hours": { "2026-09-24T09:00:00Z": 2140 },
  "daily": { "2026-09-24": 14800, "2026-09-25": 21300 },
  "daily_p10": { "2026-09-24": 9600, "2026-09-25": 13900 },
  "daily_p90": { "2026-09-24": 18900, "2026-09-25": 26100 }
}
  • slots: one per hour, times in UTC. value is average power in W, wh energy in Wh, ghi the sunshine forecast in W/m². p10 and p90 are the cautious and bright case in W: one hour in ten should come in below p10, one in ten above p90. At night both equal value.
  • wh_hours: the same energy keyed by hour start.
  • daily: Wh per day in your station's time zone, starting with the rest of today. daily_p10 and daily_p90 add up the hourly cases; treat daily_p10 as a floor for a battery reserve, not a typical bad day.
  • scale: what your measured production has taught the forecast. value is already applied to every number above, and is 1 while active is false.
  • A new forecast is ready once an hour; poll every 15 to 60 minutes. More than 60 requests an hour from one address get 429.

Errors: 401 missing or unknown token, 403 plan does not include the solar forecast, 409 no panels set up or no station location.

Sending production from your own script

The Home Assistant integration does this for you. Anything else can post finished hours with the same token:

curl -s -X POST https://pro-weather.com/api/solar/production \
  -H "Authorization: Bearer <your token>" -H "Content-Type: application/json" \
  -d '{"hours": [{"start": "2026-09-24T09:00:00Z", "wh": 2140}]}'
  • start is a finished hour in UTC, on the hour; wh is what all panels together made in it.
  • Up to 168 hours per request, none older than 7 days. Resending an hour replaces it, so resending the last day every hour is fine.
  • One bad hour rejects the whole request with 400, naming the hour. 413 above 32 KB, 415 without the JSON content type, 429 above 30 requests an hour from one address.
  • The response gives the number of hours accepted and the current scale.

On this page