A custom Lovelace card for Home Assistant that provides a comprehensive dashboard for EVCC - the open-source EV charging controller - using the ha-evcc integration.
All charge points and site entities are automatically discovered via the HA entity registry - no manual entity mapping required. Starting with v0.5.0, the card includes a native visual editor - just add the card and configure everything interactively.
| Charge Point | Site | Flow | Grid |
|
|
|
|
| Statistics | Battery | Compact | Plan |
|
|
|
|
| Priority | Repeat plan | ||
|
|
| Feature | Description |
|---|---|
| Auto-discovery | Automatically detects all charge points and site entities via the HA entity registry - zero configuration |
| Visual editor | Native card editor in Home Assistant - configure everything interactively, no YAML needed |
| Live updates | Power, SoC and status update in real time without full re-render |
| Responsive scaling | Card automatically scales to fit larger screens via CSS container queries; can be overridden with a fixed size |
| SoC display | Vehicle state of charge as a progress bar with percentage and estimated range |
| Slider controls | Adjust Target SoC, Min SoC, Priority, smart charging limit, feed-in priority limit, battery boost, Max current and Min current inline |
| Phase switching | Auto / 1-phase / 3-phase control built in |
| Plan strategies | Continuous charging and battery preconditioning settings inline in the plan block |
| Repeating plans | repeatplan mode lists evcc's weekly repeating charge plans per vehicle and toggles them on/off (ha-evcc 2026.6.1+) |
| Live plan preview | In plan mode, a live chart previews the planned charging window over the upcoming tariff/forecast, with duration, power and average price/CO₂ (ha-evcc 2026.6.x+) |
| Session statistics | stats mode is powered directly by evcc's charging-session history: no helper sensors or recorder setup, with metric (energy / cost / CO₂) and grouping (solar / charge point / vehicle) toggles (ha-evcc 2026.6.x+) |
| Heating loadpoints | Heat-pump / heating loadpoints are detected automatically: no EV charge plan, and the target/limit is shown as a temperature |
| Action indicators | Pending phase switches (1↔3 phase) and PV-charging start/stop shown as inline countdown chips |
| Diagnostics | Built-in debug mode collects card / HA / integration state into a copy-paste-ready bug report |
| Multi-language | Support for various languages - auto-detected from HA language setting, easily extensible |
- Home Assistant (2023.x or newer)
- ha-evcc integration installed and configured, with a running EVCC instance connected to it
- For the live plan preview and the session-based statistics, ha-evcc 2026.6.x or newer is required (it ships evcc's WebSocket data API). On older versions these features fall back automatically and the rest of the card keeps working.
hass-evcc-card is part of the default HACS repository - no custom repository setup needed.
- Open HACS in Home Assistant
- Search for EVCC Card
- Click Download
- Reload your browser
Note for YAML mode users: If your Lovelace is configured with
mode: yamlinconfiguration.yaml, HACS cannot register the resource automatically. Add the resource entry manually - see Manual resource registration below.
- Download
evcc-card.jsand thelocales/folder from the latest release - Copy them to
config/www/hass-evcc-card/in your Home Assistant instance, preserving the folder structure:
config/www/hass-evcc-card/
├── evcc-card.js
└── locales/
├── index.json
└── *.json
- Register the resource - see Manual resource registration below.
- Reload your browser
Depending on how your Lovelace is set up, register the resource in one of two ways:
UI mode (default): Go to Settings → Dashboards → ⋮ → Resources and add:
url: /hacsfiles/hass-evcc-card/evcc-card.js # if installed via HACS
# or
url: /local/hass-evcc-card/evcc-card.js # if installed manually
type: moduleYAML mode (lovelace_mode: yaml in configuration.yaml): Add the resource to your Lovelace YAML configuration file (typically ui-lovelace.yaml or referenced via lovelace: !include):
resources:
- url: /hacsfiles/hass-evcc-card/evcc-card.js # if installed via HACS
type: module
# or
- url: /local/hass-evcc-card/evcc-card.js # if installed manually
type: moduleThen restart Home Assistant or reload the Lovelace resources.
Add the card to any Lovelace dashboard and use the visual editor to configure it - all options are available interactively, and the editor shows only the options relevant to the selected mode.
| Option | Type | Default | Description |
|---|---|---|---|
mode |
string |
loadpoint |
Card mode: loadpoint, compact, battery, site, flow, grid, stats, plan, repeatplan, priority, debug |
title |
string |
(auto) | Replaces the default card header |
loadpoints |
list |
(all) | Filter charge points by name |
language |
string |
(auto) | Override UI language |
size |
string |
(auto) | Fixed card scale: small, medium or large. When unset, the card auto-scales to its container width |
no_plan |
list |
(none) | Hide charge plan block for specific charge points |
repeating_plan_vehicles |
list |
(all) | Limit the repeatplan mode to specific vehicles |
plan_loadpoint_index |
map |
(auto) | YAML only — Override the evcc loadpoint index (1-based) used for the plan preview, e.g. { openwb: 1, wp: 2 }. Only needed if the auto-detected order does not match evcc |
no_pv |
list |
(none) | Treat specific charge points as having no PV system, mirroring evcc's own mode logic: Min+PV is hidden and PV is replaced by a single Smart mode when a dynamic tariff is configured (otherwise only Off / Now remain). See Charge modes below |
site_details |
string |
expanded |
collapsed to hide the IN/OUT detail table by default in site and flow mode |
charge_current_settings |
string |
collapsed |
expanded to show charge settings expanded by default |
stats_period |
string |
total |
Default statistics period for the footer/summary: month, year, total, none |
prefix |
string |
(auto) | YAML only — Entity prefix, auto-detected from ha-evcc. Only needed for multiple EVCC instances with custom prefixes. |
The main charge point view. For each discovered charge point it shows:
- Charge mode buttons (Off / PV / Min+PV / Now) - see Charge modes for when which mode is shown
- Vehicle SoC progress bar with percentage and estimated range
- Current charging session: energy, cost, duration, phases
- Sliders: Target SoC, Min SoC
- Charge plan block
The mode selector mirrors evcc's own logic, where the available modes depend on whether the charge point has a PV system (controlled here via the no_pv option) and whether a dynamic electricity tariff is configured:
| Situation | Modes shown |
|---|---|
| PV system present (default) | Off / PV / Min+PV / Now |
no_pv set + dynamic tariff available |
Off / Smart / Now |
no_pv set + no dynamic tariff |
Off / Now |
About the Smart mode: Without a PV system, charging is driven by electricity tariffs rather than solar surplus, so evcc renames the PV mode to Smart and drops Min+PV. The card does the same: the Smart button still sets the same underlying
pvcharge mode, only the label and icon change. A dynamic tariff is detected via thetariff_grid(price) ortariff_co2(CO2) sensor; if neither reports a value, only Off / Now are offered.
The loadpoint header also shows live action indicators when EVCC has scheduled a pending phase switch or PV-charging change - e.g. "Switching to 3-phase in 0:42" or "PV charging on in 1:15". The chip disappears automatically once the action is executed. Requires ha-evcc with the phase_action / pv_action sensors exposed.
The CHARGE SETTINGS section is collapsed by default and can be toggled using the gear icon. It contains:
- Phase switch: Auto / 1-phase / 3-phase
- Max current / Min current sliders
- Battery boost - lets the vehicle draw from the home battery; the slider sets the battery SoC threshold above which boosting is allowed. Only shown when ha-evcc exposes the battery boost entities (
battery_boost_limit,battery_boost) - Priority - PV-surplus priority of this charge point relative to the others
- Smart charging limit - threshold below which charging starts automatically; shows "Off" when set to 0; EVCC supports either CO2-based (g/kWh) or price-based (EUR/kWh) - not both simultaneously; the active mode is reflected in the entity's unit
- Feed-in priority limit - threshold above which EVCC prioritizes feeding into the grid over charging from PV surplus, shown directly under the smart charging limit. Like the smart charging limit, it follows EVCC's global cost mode, so the slider is in currency/kWh (price mode) or g/kWh (CO2 mode). It has a slider, an "active" hint (from the
smart_feed_in_priority_activesensor) and a clear button. Thesmart_feed_in_priority_limit/smart_feed_in_priority_activeentities ship disabled by default in ha-evcc, so the row stays hidden until you enable them
Price mode - slider range issue: When switching the smart charging mode in EVCC from CO2-based to price-based, ha-evcc may not recreate the limit entity. The slider then still shows the CO2 range (0-500 g/kWh) instead of the price range. To fix this, go to Settings -> Devices & Services -> ha-evcc -> Reconfigure, and enable the option "Remove and recreate all Devices".
Full site energy overview:
- PV production bar split into: home consumption / charging / battery / feed-in
- Individual PV string values (e.g. BKW, Dach) shown as indented sub-rows
- Live power table with IN/OUT sections: Grid import/export, PV generation, home consumption, charging, battery
- Battery SoC shown inline in the charging/discharging row
- Active charge points shown as indented sub-rows under the charging row
The IN/OUT detail table can be toggled by clicking the power bar. It opens expanded by default; set site_details to collapsed in the editor to start collapsed instead.
Sankey-style energy flow diagram showing how energy is distributed from sources to consumers in real time:
- Sources (left): PV strings, battery (discharging), grid import — each as a colored node
- Consumers (right): home consumption, individual charge points, battery (charging), grid export
- Flowing bands connect sources to consumers, with width proportional to power — PV is distributed first, then battery, then grid
- Each node shows an MDI icon and current power value; battery and vehicle nodes include SoC as a sub-label
- All nodes are clickable to open the Home Assistant entity detail dialog
- Collapsible IN/OUT detail table below — click the diagram to toggle (same as
sitemode)
Compact site energy overview with a focus on the current grid status:
- Large net grid value with color coding: red for import, green for export
- Solar self-sufficiency badge (e.g.
86 % Solar) shown when PV is active - Source chips: active energy sources (PV generation, grid import, battery discharge)
- Consumer chips: active consumers (home consumption, charge points with vehicle SoC/temperature, battery charging, grid export)
Deprecation notice:
mode: site2still works but is deprecated and will be removed in a future release. Please migrate tomode: grid.
Charging statistics, powered directly by evcc's charging-session history (ha-evcc 2026.6.x+). No helper sensors and no HA Recorder setup are required: the card reads the full session list once via the integration's WebSocket data API and computes everything in the browser. The header mirrors evcc's own statistics view:
- Period: Month, Year or Total, each with back/forward steppers to pick the exact month and year
- Metric: switch the bars between Energy (kWh), Cost and CO₂
- Grouping: stack the bars by Solar vs grid, by charge point or by vehicle, with a colour legend
- Tooltips: hover or tap a bar to see every series and the total for that day, month or year
- KPI tiles above the chart summarise the selected period (charged energy, solar share, cost, CO₂)
| Period | Bars |
|---|---|
| Month | One bar per day of the selected month |
| Year | One bar per month of the selected year |
| Total | One bar per year (falls back to monthly when only one year of data exists) |
- The data comes from a single request that is cached for 5 minutes on the card and additionally cached inside the integration, so switching periods, metrics and groupings is instant and puts practically no load on evcc.
- A compact summary also appears as a footer row at the bottom of
siteandgridcards. The period shown there is controlled viastats_period(default:total); setstats_periodtononeto hide the footer entirely.
Heating loadpoints (heat pumps) are included like any other loadpoint; with the charge point or vehicle grouping they show up as their own series.
Note on the Solar grouping: for the Cost and CO₂ metrics the solar share carries no marginal cost/emissions, so those are attributed to the grid series (only Energy is split proportionally into solar and grid).
On ha-evcc versions before 2026.6.x the WebSocket session API is not available. The card then falls back to the previous statistics implementation, which is built on dedicated stat_* sensor entities and the HA Recorder. In that mode the period tabs are 30 days / 365 days / This year / Total, each bar is split into a green (solar) and blue (grid) portion via sensor.evcc_stat_total_solar_k_wh_template, and the data is fetched lazily per tab and cached for 5 minutes.
Periods not showing data? The Total period is enabled by default in ha-evcc. The sensor entities for 30 days, 365 days and This year are disabled by default in Home Assistant and must be enabled manually. If a period tab shows a warning instead of statistics, follow the steps below.
The stat sensors exist in your ha-evcc integration but are disabled by default. To enable them:
- In Home Assistant, open Settings -> Devices & Services
- Click on the ha-evcc integration
- Open your evcc device (e.g. "evcc Solar Charging [evcc]")
- Scroll down to the section that says "X disabled entities" and click on it
- Enable the statistics entities for the periods you want: 30 days (
stat30_*), 365 days (stat365_*) and/or This year (stat_this_year_*) - Each period has three entities:
_charged_kwh,_solar_percentageand_avg_price- enable all three for full statistics. Since ha-evcc 2026.2 there is also_solar_k_wh_templatewhich is needed for the solar/grid split in the bar chart - Wait a moment or reload the ha-evcc integration - the stat periods should then appear in the card
Note: After enabling, it may take a few minutes until the first values appear, as Home Assistant needs to record the initial data points for these entities.
Single-year fallback: If the Total tab detects that only one calendar year of data is available in the HA Recorder, it automatically falls back to showing the monthly breakdown of the current year - identical to the This year chart.
Home battery management block:
- Current battery SoC with visual indicator
- Buffer SoC slider
- Priority SoC slider
- Discharge lock toggle
PV surplus priority management: reorder all loadpoints by drag-and-drop to set which one is preferred when distributing PV excess. Higher position = higher priority.
- One row per discovered loadpoint, sorted by current priority (highest at top)
- Drag the ⋮⋮ handle to reorder; the rendered target value updates live
- Rows with a target that differs from the current entity state are highlighted in amber and show the old value as
(N)next to the target - Apply writes the new priorities via
number.set_valuefor every loadpoint whose value would change. Values are assigned contiguously: top =N-1, bottom =0 - Reset discards unapplied changes and re-syncs the visible order to the current state
- Respects the
loadpointsconfig filter; loadpoints without apriorityentity are shown disabled
Same content as loadpoint, but organized into four tabs - ideal for dashboards where vertical space is limited or multiple charge points are shown side by side:
| Tab | Contents |
|---|---|
| Control | Charge mode buttons, vehicle SoC bar, current charging power |
| Settings | Target SoC, Min SoC sliders, phase switch, current limits, battery boost, priority, smart charging limit, feed-in priority limit |
| Plan | Charge plan: vehicle selector, target time, target SoC, activate/delete |
| Session | Energy, cost, duration and phases of the current session |
The selected tab is remembered per charge point across re-renders.
Minimalist charge plan view:
- Vehicle selector
- Target time picker
- Target SoC slider
- Live preview - as soon as a target SoC and time are set, a chart previews the planned charging window over the upcoming tariff/forecast, with the expected duration, charging power and the average price or CO₂ of the plan (ha-evcc 2026.6.x+). It updates while you drag and is debounced and cached so it never floods evcc
- Continuous charging toggle - keeps the charge running without interruption once started
- Preconditioning select - pre-heats/cools the battery before reaching the target SoC (off / minutes / hours / all)
- Activate / delete plan
Note: The Continuous charging and Preconditioning controls only appear when ha-evcc exposes the corresponding entities (
plan_strategy_continuous,plan_strategy_precondition). The same controls also show up in the plan block of theloadpointandcompactmodes.
Heating loadpoints: loadpoints that evcc marks as heating (for example a heat pump) do not get an EV charge plan; the plan block is skipped for them and their target/limit is shown as a temperature instead of a state of charge.
Repeating charge plans per vehicle - evcc's weekly departure schedules:
- One block per vehicle, listing each repeating plan
- Active weekdays shown as badges, plus the departure time and target SoC
- On/off toggle to activate or deactivate a plan directly from the dashboard
Note: Repeating plans can only be created and edited in evcc itself - the card only switches them on or off (an info icon in the header points this out). Requires the repeating plan entities from ha-evcc 2026.6.1+ (
repeating_plan_*); on older integration versions the entities do not exist yet and the mode shows an empty state.
Diagnostics view for bug reports. Shows everything the card has detected:
- Card, Home Assistant and browser versions
- ha-evcc integration status (entity count, detected prefix vs. configured prefix)
- All discovered charge points with their feature coverage and the list of missing entity suffixes
- Site features (found vs. missing)
- Orphan entity groups (loadpoint-like but missing
charge_power— usually meters or devices with non-standard names) - The current card configuration
- Loaded translation files
The Copy report button copies a Markdown-formatted summary to the clipboard, ready to paste into a bug report. An optional Mask names toggle anonymises loadpoint, vehicle and title strings before copying. No live state values or sensor data are included.
Tip: If your card shows "No loadpoints found", click the Open debug mode link in the empty state — orphan groups in the meters bucket are usually the hint to why discovery missed your charge points.
The card automatically detects all ha-evcc entities via the Home Assistant entity registry (platform: evcc_intg). The entity prefix is derived automatically - no configuration needed.
Entities follow the ha-evcc naming convention:
sensor.evcc_<loadpoint_name>_<entity_type>
select.evcc_<loadpoint_name>_mode
number.evcc_<loadpoint_name>_limit_soc
...
Edge case: If you run multiple EVCC instances with a custom prefix (e.g.
evcc2_), you can override the auto-detection via YAML:type: custom:evcc-card prefix: evcc2_
The card ships with multiple languages and automatically uses the language configured in Home Assistant. You can override it per card in the visual editor or via the language config option.
Translations are stored as simple JSON files in the dist/locales/ folder. Adding a new language takes only two steps:
- Create a new file
dist/locales/<lang>.jsonby copying an existing one (e.g.en.json) and translating the values - Add the language code to
dist/locales/index.json
Want to contribute a translation? Pull requests for new languages are very welcome! Have a look at dist/locales/en.json as a starting point and open a PR with your new language file.
The solar share is taken from each charging session's recorded solar percentage. Sessions that evcc recorded before it started tracking that value are missing the underlying data, so a correct solar share cannot be calculated retroactively. Only sessions recorded after upgrading to a recent evcc/ha-evcc version will show solar share data. (On the older entity-based statistics fallback, the solar split additionally requires sensor.evcc_stat_total_solar_k_wh_template, introduced in ha-evcc 2026.3.3.)
Pull requests are welcome! Please open an issue first to discuss what you'd like to change.
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Commit your changes:
git commit -m 'Add my feature' - Push to the branch:
git push origin feature/my-feature - Open a Pull Request
Contributions that are especially appreciated:
- New translations - see the Translations section above
- Bug reports and fixes
- Feature suggestions and implementations
The card was featured in YouTube videos - showing installation, configuration and usage in practice. Note: the videos are in German.
|
|
A detailed blog post about the card is available on smarterkram.de (German).



















