evcc

Solar-aware electric vehicle charging controller

Home Automation ★ 7.3k stars Medium setup MIT

evcc is an open-source EV charging controller that optimizes charging around solar production and electricity prices. It targets EV owners with solar or dynamic tariffs. It is deployed via Docker or a binary.

Key features

  • Solar-optimized EV charging
  • Dynamic tariff support
  • Many wallbox integrations
  • Home Assistant integration

Pros & cons

Strengths

  • Maximizes solar self-use
  • Wide hardware support
  • Lightweight

Trade-offs

  • Niche use case
  • Requires compatible hardware

evcc replaces

Last reviewed Sep 13, 2026 · 883 words

A 10 kWp roof feeding a 60 kWh car through evcc in PV mode will, in a European summer, put most of your driving into the battery at zero marginal cost, and with a dynamic tariff it does the winter equivalent by charging in the 3 or 4 cheapest hours overnight. That is the entire pitch: evcc sits between your wallbox, your grid meter and your inverter and decides moment by moment how much current to allow. It is the most useful piece of software in my house, and also the one where the hardware list matters more than the software.

Check three pieces of hardware before you install anything

evcc needs to talk to a charger it can control, to a meter it can read, and ideally to the car. Chargers: go-e, KEBA, Easee, Wallbox, openWB, Zaptec, the Tesla Wall Connector Gen 3, any OCPP 1.6 wallbox, plus generic Modbus units and dumb chargers behind a Shelly relay. Grid and PV meters: SMA, Fronius, SolarEdge, Kostal, Huawei, Victron, Enphase, and a Shelly 3EM as the budget path. Vehicles: most major brands through their cloud APIs, or any car through the charger's own state-of-charge readout where the charger reports it. The device list at evcc.io is long, but if your wallbox is a locked-down installer-only unit with no API, evcc cannot help you, and that is the "requires compatible hardware" warning in one sentence.

The four modes are the whole user interface

Off does nothing. Now charges at full power regardless of source. Min+PV charges at the minimum current the car accepts (usually 6 A per phase) and adds solar surplus on top, which keeps the car ticking up on cloudy days. PV charges only from surplus and pauses when a cloud passes; a configurable delay stops it flapping. Add a minimum state of charge ("always get me to 40 percent") and a plan ("100 percent by Saturday 9 a.m., cheapest hours") and you have covered what a commercial energy management system charges a four-figure sum for. Phase switching between 1 and 3 phases, where the charger supports it, widens the usable surplus range from about 1.4 kW to 11 kW.

Configuration is one YAML file, and the wizard writes most of it

services:
  evcc:
    image: evcc/evcc:latest
    network_mode: host
    volumes:
      - ./evcc.yaml:/etc/evcc.yaml
      - ./evcc-data:/root/.evcc
    restart: unless-stopped

Run evcc configure once (inside the container works) and it interviews you about charger, meters, vehicles and tariff, then emits evcc.yaml; after that, edit by hand. The web UI listens on port 7070 and is meant for your LAN, so put it behind your proxy's login before exposing it. Host networking is not optional for devices that use multicast or Modbus UDP discovery, and SMA inverters are the usual example. RAM use stays under the 256 MB figure; a Raspberry Pi 4 runs it with room for Home Assistant alongside. Session history lands in an SQLite file in the data directory, which is the only thing you need to back up besides the YAML.

Home Assistant integration is MQTT, and it is the right way round

evcc publishes every value (grid power, PV power, charge power, state of charge, mode) to MQTT under a configurable topic prefix and accepts mode and target changes on set topics, so a Mosquitto broker makes everything appear in Home Assistant as sensors and selects. There is also a community HACS integration that polls evcc's REST API. Either way, keep evcc as the source of truth for charging decisions; it runs a control loop on a configurable interval, 30 seconds by default, and Home Assistant automations that fight it produce a car that never charges. Use HA for the automations around it, such as switching to Now when a calendar event says a long trip starts tomorrow, and feed Grafana from the same MQTT topics for history. The first month with Home Assistant piece covers the broker setup.

The sponsor token

A subset of integrations, mostly vehicle cloud APIs and some chargers, require a sponsor token, which you get by sponsoring the project on GitHub for a couple of euros a month at last check; a free trial token exists for testing. The core, including OCPP chargers, Modbus meters and the PV-mode logic, works without one. I consider it the best-value subscription in my homelab, and it is why a 7,176-star niche project has a core team that answers issues within days.

What I'd do

Buy the wallbox only after checking it against the evcc device list; an OCPP-capable unit is the safe choice. Run evcc in Docker on the same box as Home Assistant, host networking, config from the wizard, MQTT to Mosquitto. Default mode PV in summer and Min+PV in winter, a minimum state of charge of 30 percent, and a dynamic tariff if your supplier offers one. If you have no solar and a flat tariff, skip it; a timer on the wallbox does the same job. The rest of the home automation category is optional; this is the one that pays for the server.

Compare evcc

19 head-to-head comparisons.

Similar home automation apps