Grade how well your home battery is optimised against day-ahead electricity prices (Nord Pool / ENTSO-E), directly in Home Assistant. Wolta analyses your 15-minute battery and grid data and scores how much of your battery's achievable value your operation actually captured. The optimisation grade and measured battery value work across all supported European price zones. Full battery economics (IRR, payback and whole-plant savings) are currently available for Swedish price zones (SE1–SE4).
After setup the integration automatically:
- Uploads 15-minute energy statistics from your HA sensors to Wolta.
- Triggers periodic recomputes on the Wolta backend.
- Exposes the results as Home Assistant sensors.
Entity names are translated (English and Swedish bundled; other languages fall back to English), and HA generates entity IDs from the translated names at install time. Default IDs on an English-language instance:
| Entity | Unit | Description |
|---|---|---|
sensor.wolta_optimisation_grade |
% | Holistic optimisation score (0–100): the share of the battery's theoretically perfect total value your actual operation captured. Appears as a preliminary score after about 7 days of data (server v0.43.0+) and matures at 30 days — the attributes preliminary and n_days tell you which; a preliminary score can swing from day to day. All price zones. |
sensor.wolta_battery_value_per_year |
SEK / EUR | The battery's own annual value — the incremental saving vs. the same plant without a battery. Measured from your actual flows (the same number wolta.se shows as "You captured") once the grade is mature (30 days); before that it falls back to the modelled battery share — a short window multiplied up to a year is not an honest measured figure. Attribute source tells you which (measured/modelled); plant_total_sek carries the plant total. All price zones. Solar's value is not included — it belongs to the solar investment. |
sensor.wolta_plant_savings_per_year |
SEK / EUR | Total annual saving of the whole plant (solar + battery), i.e. what a combined solar-plus-battery investment earns. Attributes battery_sek/solar_sek give the split. SE zones only. |
sensor.wolta_internal_rate_of_return_irr |
% | IRR of the battery investment: the battery-only savings stream against the battery's purchase price (incremental cash-flow principle). Can be negative — that means the battery alone does not carry its cost. SE zones only. |
sensor.wolta_payback_time |
yr | Payback of the battery investment from the battery-only savings stream. unknown when the stream never repays the cost within the projection horizon. SE zones only. |
sensor.wolta_actual_savings_this_year |
SEK / EUR | Actual battery revenue this year. SE zones only. |
sensor.wolta_data_status |
timestamp | Last data point uploaded (diagnostic). Always available. |
sensor.wolta_status |
enum | Computation status: done / computing / waiting_for_data / error (displayed translated). Always available. |
A Recompute button lets you trigger an immediate recompute outside the automatic schedule.
Economy sensors that require the decision engine (plant savings, IRR, payback, actual savings) are only available for Swedish price zones (SE1–SE4). The grade and the measured battery value work for all supported zones.
Before v0.5.0 the battery-value sensor showed the whole plant's saving (solar + battery),
which overstated the battery. A battery's value is the incremental value versus running
the same plant without it — standard methodology in battery-retrofit economics (NREL
solar-plus-storage analyses, Solcellskollen's Swedish calculations) and investment
appraisal (incremental cash-flow principle). If you want the big number, it is still
there: sensor.wolta_plant_savings_per_year, correctly labelled.
- Home Assistant 2025.12.0 or newer
- A battery storage system with energy sensors already configured in Home Assistant's Energy dashboard
- Grid import and export sensors (required); solar production sensor (optional)
One-click (opens HACS on your instance with this repository preloaded):
Or add it manually:
- In Home Assistant, open HACS (install it first if needed).
- Open the three-dot menu (top right) → Custom repositories.
- Paste
https://github.com/Seblin01/wolta-homeassistant, choose category Integration, and select Add. - Search for Wolta in HACS and select Download.
- Restart Home Assistant.
- Go to Settings → Devices & Services → Add Integration and search for Wolta.
Once Wolta is accepted into the HACS default store, you can find it by searching Wolta in HACS directly, without adding a custom repository.
- Copy
custom_components/wolta/into your HAconfig/custom_components/directory. - Restart Home Assistant.
- Add the integration via Settings → Devices & Services.
No account or API token is required. Setup starts with a choice:
-
Create a new profile — Home Assistant provisions a Wolta profile automatically (the flow below).
-
Link an existing wolta.se profile — already used wolta.se? Paste your personal profile link (the one with
?profile=…) or just the token. Your plant parameters are read from the server, the profile is adopted for integration use (backend v0.19.0+), and the plant step is skipped; Home Assistant takes over data uploads from there (overlapping periods are overwritten with sensor data). The profile must include a battery — solar-only profiles are rejected.If the plant already streams its data to wolta.se through another connection (the Sonnen webhook or a Reduxi bridge), the flow offers view-only mode instead: you get all the sensors and the recompute button, but no sensor selection and no uploads — the plant's own connection keeps owning the data, and removing the entry never deletes anything on wolta.se. If the saved token ever stops working, re-authentication simply asks for a fresh token (create one on the plant page on wolta.se while signed in).
Step 1 – Energy sensors
- Map your HA energy sensors for battery charge, battery discharge, grid import and grid export. The integration prefills these from the HA Energy dashboard if it is configured.
- Solar production is optional.
Step 2 – Zone & battery (create path)
- Select your Nordpool/ENTSO-E price zone (e.g. SE3). The dropdown is preselected from your Home Assistant country and, for Sweden, latitude.
- Enter your battery's usable capacity (kWh) and peak power (kW). Usable means what the battery actually delivers to the house on a full discharge (the AC/meter side) — this is lower than the nameplate rating, and lower than the energy your battery app shows at 100 % SoC (that's the DC/cell figure), because the inverter loses energy converting to and from the battery. Use the meter-side value, not nameplate, so the grade compares you fairly against a perfect controller on your own hardware. Both are required and must be greater than zero. (After a couple of months of history, Wolta measures this for you and can offer the value as a Repair — see Troubleshooting.)
- Set the round-trip efficiency (default 0.9), measured on the AC side — not the DC/cell figure. With a few months of battery history in Home Assistant, the field is prefilled with your plant's measured AC round-trip efficiency, and the purchase date is suggested from the first recorded data point.
- Optionally add economy details: battery purchase price and purchase date (used for IRR, payback and this year's actual savings), and your own tariff — grid fee, electricity supplier markup and an export premium/discount (öre/kWh for SEK zones, euro cents/kWh for other zones; the export figure may be negative). Leave any tariff field blank to use your country's standard tariff.
- Optionally set a reserve floor (%) — the share of usable capacity your control system never discharges below (e.g. a backup reserve). Enter usable capacity above; the reserve is subtracted here, don't subtract it twice.
If your history shows more energy leaving the battery than entering it, the Battery charge/discharge reversed toggle is preselected (linked profiles get a separate confirmation step) — see Troubleshooting.
Step 3 – Privacy (create path)
- Opt in to anonymised data sharing (off by default) if you want to contribute to the Wolta benchmark.
- Confirm to create the profile and complete setup.
The integration and wolta.se show the same profile. The server is the source of truth: change a value in the Configure dialog and it shows up on wolta.se; change it on wolta.se and Home Assistant picks it up within about five minutes (a lightweight side-poll watches the profile and refreshes the results as soon as something changed) — the Configure form always opens with the current server values. Last write wins.
Because a linked profile belongs to your wolta.se usage, removing the integration never deletes a linked profile (profiles created by the integration keep the documented delete-on-remove behaviour, see Privacy). A purged/deleted profile triggers re-authentication, which creates a fresh HA-owned profile from the cached settings.
Open the integration's Configure dialog (Settings → Devices & Services → Wolta → Configure) to adjust values without removing the integration. The form is grouped into Battery, Economy and Tariffs sections:
- Battery capacity (kWh), power (kW) and round-trip efficiency — changing these triggers a server-side regrade of your optimisation score.
- Nameplate capacity (kWh) and nameplate power (kW) — optional manufacturer-rated figures. The grade itself always uses the usable/deliverable values above; the rated figures let wolta.se compare per-kWh prices fairly in the expansion calculator and explain measured-vs-rated differences. Clearing a field removes the value.
- Battery purchase price and purchase date — used for IRR, payback and this year's actual savings. Clearing a field removes the value.
- Your own tariff — grid fee, electricity supplier markup and an export premium/discount (öre/kWh for SEK zones, euro cents/kWh for other zones; the export figure may be negative). Clearing a field reverts it to your country's standard tariff.
- Reserve floor (%) — the share of usable capacity your control system never discharges below. Clearing the field removes the reserve.
- Battery charge/discharge reversed — a toggle that swaps the battery charge and discharge streams on upload. See Troubleshooting below.
Only changed fields are sent to Wolta. After saving, a recompute is triggered automatically. The optimisation grade updates first; the economy figures (IRR, payback, actual savings) are recomputed in the background and follow a few minutes later. Throughout, the sensors keep their previous values instead of dropping to unavailable (v0.7.1+).
Changing energy sensors: use the Reconfigure option (Settings → Devices & Services → Wolta → three-dot menu → Reconfigure) to pick new sensors. The full history is re-uploaded from the new sensors and the grade recomputed — no need to remove the integration.
Optimisation grade is strongly negative or looks inverted. This almost always means the battery charge and discharge streams are mapped the wrong way round — some battery integrations and energy meters report the two directions in a way Wolta reads reversed, which makes it look as though the battery charges when power is expensive and discharges when it is cheap. Open the Configure dialog and turn on Battery charge/discharge reversed. Wolta swaps the two streams, re-reads your history and recomputes the grade automatically — you don't need to change any of your Home Assistant sensors. If the grade still looks wrong afterwards, please open an issue.
Payback time shows unknown. The sensor has no payback year to report because the battery doesn't reach break-even — typically a small or expensive battery whose modelled internal rate of return (IRR) is negative. This is a real result, not an error; the IRR sensor shows the (negative) return. Increasing the battery capacity or lowering the entered purchase price moves it towards a payback.
The grade sensor has a capacity_hint attribute (v0.8.0+). The backend sets it when the battery capacity you entered is clearly higher than the usable capacity your measured data shows — a nameplate-vs-usable mix-up. The grade compares you against a perfect dispatch on the capacity you entered, so an oversized entry unfairly lowers the score. Open Configure and set the battery capacity to the attribute's suggested_kwh (or your own better estimate of usable capacity); the grade is recomputed automatically. No hint means no mismatch was detected.
Measured-parameter repairs appear (v0.12.0+). Once there are a couple of months of history, Wolta measures the grade-affecting battery parameters at the meter and, if one clearly disagrees with what you configured, raises a fixable repair. They only appear when the measurement is mature and confident (≥60 days and a real gap), and the measured values are all-time figures, so they're stable across seasons. If you simply haven't fully charged or discharged in the period, ignore and dismiss them.
- Usable capacity — the AC/meter-side usable capacity (not the DC/cell figure your battery app shows). Confirming sets the battery capacity and clears any reserve floor: the measurement already reflects only the window you actually cycle, so the reserve must not be subtracted again.
- Peak power — the most power the battery has charged/discharged at the meter. This is a lower bound (your control may never have demanded full power), so the repair opens an editable field pre-filled with the measured value and asks you to set the battery's real maximum (its inverter limit). Too low a value flatters the grade; too high unfairly lowers it — confirm or raise the figure.
- Round-trip efficiency — the measured AC energy-out ÷ energy-in. A true measurement, so it's a one-click adopt; corrects a stale efficiency set from thin history at setup.
The Wolta device page has a Visit link that opens your complete results on wolta.se (grade breakdown, economy drill-downs, history) using your profile token. Note: anyone with access to your Home Assistant can follow the link.
Your 15-minute energy data is stored on Wolta's servers to power the analysis. No personal data (name, address, account) is sent or required.
Deleting the integration removes your data server-side — for profiles the integration created. Removing the config entry in Home Assistant then triggers a right-to-erasure request to the Wolta backend. Linked profiles are exempt: removing the integration only disconnects Home Assistant; your wolta.se profile and history stay. Delete those from wolta.se itself.
Anonymised corpus sharing is opt-in and defaults to off. See wolta.se/om for the full privacy policy.
- wolta.se – the service
- wolta.se/om – about & privacy
- GitHub issues – bug reports & feature requests
A ready-made Lovelace view for the Wolta sensors is available in dashboards/wolta.yaml (English entity IDs and labels — the default for most instances). A Swedish variant with Swedish entity IDs and labels is available in dashboards/wolta.sv.yaml.
- Open
dashboards/wolta.yamland copy the entire contents. - In Home Assistant go to Settings → Dashboards.
- Create a new dashboard (type: Lovelace) and choose Edit manually.
- Paste the YAML content and save.
Entity names follow your Home Assistant language (English and Swedish translations are bundled; other languages fall back to English). HA generates entity IDs from the translated names at install time. The dashboard YAML uses the English defaults; on a Swedish HA instance, replace them as follows:
| English ID (used in the YAML) | Swedish instance ID |
|---|---|
sensor.wolta_optimisation_grade |
sensor.wolta_optimeringsbetyg |
sensor.wolta_battery_value_per_year |
sensor.wolta_batterivarde_per_ar |
sensor.wolta_internal_rate_of_return_irr |
sensor.wolta_intern_avkastning_irr |
sensor.wolta_payback_time |
sensor.wolta_aterbetalningstid |
sensor.wolta_actual_savings_this_year |
sensor.wolta_facit_i_ar |
sensor.wolta_data_status |
sensor.wolta_datastatus |
sensor.wolta_status |
sensor.wolta_status |
button.wolta_recompute |
button.wolta_rakna_om |
If your entities differ (other language, integrations installed before v0.4.3, or a _2 suffix when installed more than once): go to Settings → Devices & Services → Wolta to see the exact IDs, and adjust the dashboard YAML accordingly.
The dashboard ends with a markdown card linking to your full results on wolta.se. The link is resolved dynamically from the device's configuration_url (v0.4.1+), so no manual token pasting is needed.
Economy sensors (battery value, IRR, payback, actual savings) are only available for Swedish price zones (SE1–SE4). They show unavailable for other zones.
All sensors show unavailable until the first recompute run completes, which requires at least 30 days of uploaded data.
During a recompute (e.g. after changing values), sensors keep their last known values instead of flickering to unavailable; retained attributes carry a computing: true flag and sensor.wolta_status shows Computing (computing) until the new results land (v0.4.2+). The grade is recomputed first and the economy figures (IRR, payback, actual savings) follow a few minutes later; they hold their previous value in the meantime rather than going unavailable (v0.7.1+).
MIT – see LICENSE.