evcc logo

evcc

Local, vendor-independent EV charge controller and home energy management system

Alternative to: tesla app, solaredge monitoring, sma sunny portal, wallbox mywallbox

evcc screenshot

About Versions (109)

0.316.0

2026-09-22

Changelog

Breaking Changes 🚨

  • 949002965464831f66fe7fa4200707ba500fed68 Home Assistant charger: make milliamp current control optional (BC) (#33858)
  • ddbc8f325fb28a1cf2325c020a305babf5805fc6 Home Assistant: drop battery minsoc/maxsoc preset (BC) (#33707)
  • 54403e68bcb16bf8496401533e05b5ee8e7f03c4 Mode Redesign: rename pv to smart, replace minpv with always charge (BC) (#32490)
  • 8160673647fbb183894c98db2c6dabdaf2a87642 Tariffs: reject slots shorter than 15min (BC) (#33865)
  • db12193697eb82920399b2b73951555ba47ee70a Templates: move phases1p3p param to defaults.yaml (BC) (#33588)
  • 064e585ccbdb45424336471ccc29850ae744322e Zendure Solarflow: consolidate battery templates (BC) (#33505)

New Features 💫

  • c591a67f1e8e8f64fc5a7ec8f093036d9aa5b49f Add battery forced discharge to grid mode (feed-in arbitrage) (#31995)
  • 515cb14e987a4eaaae84b9d6971c750e127cc281 Anker Solarbank Max AC: add discharge (#32365)
  • 5ece95b84b157c921a8f3772f2562aa53844f59c Atmoce: add battery discharge (#33437)
  • 2791792dc6ac74677ce925248e16c7606b980bc9 EcoFlow Stream: add battery control (#33433)
  • cc3feb47832afc731085abacf87989d3c8de111b Home Assistant: add holdcharge and discharge battery modes (#33841)
  • 61ddada0c3aa538df0b75eab89f581d4c612781b Hoymiles OpenDTU: add cache (#33669)
  • 0daa1fe16ccf998a23e1d310c7f07d6dfaccd974 Huawei SUN2000: add force-discharge (#32307)
  • 4bccfd3e262ef6af92eef4f377f6fe83d1d4a337 Issue page: add copy-as-markdown button and menu shortcut (#33699)
  • 41fc3867fa98d3bd55a9dc71e6d2f99bd7511b7c Kostal Plenticore: add forced discharge mode (#32396)
  • e5611ade150e262c531835119eff543e174238e1 Loadpoint: add fast charging phase upscale delay (#28174)
  • 3938f4358fa3918794ab5cba8bcd85a5a794ac46 Loadpoint: add solar share setting (#32104)
  • 77e828473f7af366aa81192a23dc21b7c5017d38 Meter (Deye): add HTTP micro inverter logger template (#33485)
  • c2683e2370b88fd50cdf74d3551d76ffe62b1de1 Meter: add Solarman V5 transport and Deye micro inverter template (#33502)
  • 8dd67f1e90aa37552bbdf93b0beac4dde55b8c97 Meter: add verifybatterymodes command (#33857)
  • 8fca47d014a041cbae94081893a89a22e48f5254 Polestar: add official Data Portal M2M API (#33814)
  • 7c2f4c57618ebb56fc7bc9fc3aa6f424917f3693 Script plugin: add float setter (#33426)
  • 825573b33675de98cbefb22569b1d5a1536fd040 Spelsberg: add meter capability (#33823)
  • cf0fd9fc4012f02d0b151f798be471091aab53e2 Sungrow: add holdcharge battery mode (#32932)
  • 03d12af9c76e2aca8784892fb6a980471edaaf10 Tariff: add epexprijzen-be template for Belgium (#33762)
  • 51a95cb689890945c917ad84e19ec18189fb195c Tariffs: add spotovaelektrina.cz (#33581)
  • 691c77e09983c93dec8f00b9af63cfb52ee44474 Tesla BLE: add charged energy (#33585)
  • c28a1f6d63c82df231b2bada6ac3db91958fb124 UI: add missing German date format translations (#33347)
  • 68d2f49749e02c66fe121137ff9f45f13cc41d81 Vehicle: add LiveWire S2 motorcycle (#33683)
  • c1619334bb5c8bfcf5a963f212de8df2ecb76c0c Viessmann: add power and temperature (#32219)
  • e11cdef6c26bde842e41d3f2e2e5cdd02ec3ae71 Weishaupt: add heat pump (Modbus TCP) (#33193)
  • b79e469433db1580a65c93337110578cf57d1ff5 Zendure Solarflow: add forced discharge mode (#33801)
  • 50572d9d05dcd0e2bd95c848f9b64a1d4a49df97 go-e: add status reason for access control (#33661)
  • c140fc86ffba76922499f4d4e58964b3aea4ba84 my-PV HEA: add 5s heartbeat to rewrite active relays (#33626)
  • cca3f096ba7f712fa47bed8f525113c902168f9b my-PV: add HEA THOR 3.5 and 9.0 support (#33500)

Other Changes ☀️

  • c9fa4d90ef02eea2d73828baa251a061de5bb979 API: raise the jq query limit to 8k (#33394)
  • 87f76134a5170c54e944c935cbbc3b4e178b36e4 Battery UI: make new battery page default, remove classic layout (#33434)
  • 879639555808d6b001617f3d7403f9560087daa1 Battery: report supported modes per device (#32648)
  • bab3970670a83308747866215e8d391ffe6bec7a Charger (Stiebel Eltron WPM): optional inverter power (#33367)
  • 9582e96b5d0d9e341a95d2616cfa3ac5e7a00c16 Chargers: use verify enabled helper (#33811)
  • 3e0464e04a97ec639b834a19cf5864adc8b9adae Charging plan: disable optimization when late charging covers everything (#33422)
  • f7c48528d66d8d59fad11c53e2ada3cb780b2bb6 Charts: consistent y-axis unit scaling for small values (#33334)
  • b34a9895bbee871422d816be7ef25783c918c6b7 Config UI Loadpoint: rework min/max current inputs (#33418)
  • a1a4b2c37e3d2fa475f2d7890f388134c644e6b4 Config UI: clarify battery soc limit help texts (#33414)
  • 50345cd4422346e6f000109c680cbb80bd144a1d Config UI: improve modal slide transitions (#33833)
  • 212dd03c33c4fb4c53ee192068c0a10cf7ae649b Config UI: raise device test timeout to 15s (#33118)
  • 296f6f184873f80efaee294c725c5d22ddba1f1e Config UI: untranslated ‘continuous’ in device card and test result (#33487)
  • 53061f7e841553fd67c4cc7e852f78c7f3b1029e Config UI: usage-specific energy labels for device tags (#33402)
  • e7a8e4d650f1fdc7fb15d314f52f7ee792790e15 EEBus: capture vehicle identification from update event (#33458)
  • c04cf61e6013c3eb1f52409423fe974b23fdacad EEBus: expose LPC and LPP capabilities only when supported (#33525)
  • 32c86ab25733e458818f4a762211aba92604d72e EEBus: make milli amp current control optional (#33739)
  • 3d38f43c5369c9a8f42051c1b242a235467ee8cc EEBus: replay use case support to devices registering after discovery (#33423)
  • 0fd6548b91527469138146022ad36f33c5c3ce5b EEBus: replay use case support to devices registering after discovery (#33430)
  • c90b7d0ffb1fc7335e58094579761d621f63fc40 EEBus: wait for use case data before returning the device (#33386)
  • 535e655dd7fd801e58f37dfff6294450f84f1786 Energy demand profile: improve prediction accuracy for heating loadpoints (#28232)
  • db2841e6d2c436559af9f63ad653295faa8bf8e9 Ghost (Elli): re-login when the REST API rejects the token (#33785)
  • 266fe2720f8cb8fc92c8acb5f4a955bee916da20 HEMS Pro: also probe I2C bus 0 for RTC (#33639)
  • 078efa1e71a286612dd76115e4966b72f8dd3ffb HTTP digest: accept X-WWW-Authenticate challenge header (#33793)
  • eddfca3aa2deb9e9ee5219cc49e07fa0d89dca6b History: remove energy netting, unify bidirectional detection (#33338)
  • a611309c287803b0ac9286182fe64cb47ee36baa Keba modbus: switch back to 1p on disable (#32665)
  • a0a96efdb34cbbc6e1e5387f503e520c076ce878 Keep access and refresh tokens out of the logs (#33339)
  • 556d8745be165fd062c89af618f54df5293882df Loadpoint: derive remaining energy and duration from energy limit (#33637)
  • a3490cd3fffbc1a90918451813e2a1cca9669224 Loadpoint: do not send zero power values to estimator (#33846)
  • 0c6250e2a01085a93e7d53cb07a32eb14b4398fd Loadpoint: don’t fail setup when the charger has lost phase switching (#33619)
  • 2e6873c8f15cf154047c73747e0b82f1e81eb0aa Loadpoint: honor configured phases in minimum active phases (#33462)
  • 197043e1551ab7c6be63c10f3aa8e864c26bba5c Loadpoint: ignore dimmer not available (#33486)
  • 4e3a60eadb3883ae06cc7f6ed4db8a170a56b58d Loadpoint: log when circuit limit falls below min current (#33671)
  • 219cdf1a1a4cca86990f6ccf5e0d1df6000c6e65 Loadpoint: recompute charge plan immediately on vehicle-side plan changes (#33467)
  • a306d05ae8d136b00f832d49e36434c9e196503a Loadpoint: resolve charge meter capabilities once at boot (#33672)
  • ef937f405b860c7ed54f7ee23fd9003ebca52853 Loadpoint: resume charging during phase switch (#33552)
  • efa9bf6a9b4228976221f4247575e7353994ee3e Loadpoint: seed unknown phases from charger on startup (#33701)
  • 10c5d484ac60494af2493960bd38d8a6671cd6dc Loadpoint: test that persisted settings remain valid config (#33450)
  • fc15910c8f7a1fc5a884713ed03032cf70303931 Loadpoint: treat alwaysCharge as dynamic config (#33444)
  • d15b1dc935eb229929ed9167814062188cc3f8f3 MQTT: sanitize map keys used as topic levels (#33819)
  • 4e129aadb407c78186080c1f0a737531cd3ef0fa Make diagnostics more discoverable (2) (#33734)
  • 39f01dbc3966a1776074413bdd96182222f84f22 Marstek Venus A/D: derive battery power from AC power minus MPPT (#33473)
  • f73c2bd4cff94091d2cd1b38eb9569026407c0a9 Merge remote-tracking branch ‘origin/master’
  • 203452356bfc83ef23a8e4fa14a7961fb1c56522 Merge remote-tracking branch ‘origin/master’
  • 6512758d8bad5ed9a17eea50a1ddbfe65a2366f9 Merge remote-tracking branch ‘origin/master’
  • 5323314c0a884e06dd96877b3b916121c71838c3 Merge remote-tracking branch ‘origin/master’
  • 33ab9168c5b393888cdb6495d0593f86f4fa5463 Merge remote-tracking branch ‘origin/master’
  • 2ea21547608de89c53056e283d59f6066d2e8e92 Merge remote-tracking branch ‘origin/master’
  • acd0087863d789315c3264b39a7a71cfe57316b0 Merge remote-tracking branch ‘origin/master’
  • 54aa6abf76e01573b98ba447d2e8ffe11908460d Merge remote-tracking branch ‘origin/master’
  • 4a335df431b827f52b53b7e4f375d76f75594c7d Merge remote-tracking branch ‘origin/master’
  • 1be861a88ac9aaad7900683a70f3683d78ffcea3 Merge remote-tracking branch ‘origin/master’
  • 23286bd91ab3892dccaaf07301e4b168398a8d68 Merge remote-tracking branch ‘weblate/master’
  • 0df8641394bed1505df8abe5e0a8e4ebcbe71b25 Meter: default battery minsoc/maxsoc to 0/100 (#33589)
  • 945ecf798e95fe0b2f4ba73ad4f80235b3235661 Modbus proxy: keep default device port after serial round-trip (#33744)
  • 4f4f3ea827c4b6afc99e4df46f57c07864e3a514 Mode UI: smart mode label and popover alignment (#33479)
  • 31d074552fb411cb4129676a09b0bb3e7d62d823 MySkoda: prefer charge limit of current saved location (#33612)
  • 75b5b7c3d2f5b08a0953efb82402952e0a9eb746 MyŠkoda: expose welcomecharge (#33570)
  • a57763747d59535cab4b7e291eea4c49bb39b490 NIU E-Scooter: use vehicle-common preset (#33945)
  • 0f9c74cfc40c9f6eb66a66745789f595b6b6983c NRGkick Connect: write current and enable state in a single request (#33675)
  • 15b57447fbc75762b7ab51161a66cfd43257ed78 Nordpool tariff: cache day-ahead price requests (#33655)
  • a83118d3662566a8756fc007ea780e104fcf05eb OAuth: persistent token source (#33370)
  • 871817b9c2b21dc554e3f830ffcfe58833c641ef OCPP: allow transaction-specific charging profiles (#33512)
  • 11ffab1650b550755f475c30a6a14c3baedfa8f0 OCPP: keep live meter reading when duplicate measurand contexts collide (#33257)
  • a779067ef93a955d419a2aa5daccebb3964ddfd4 Open-Meteo: cache forecast requests short-term (#33797)
  • 0a3cc0a17360178d5d948032428ec01bfcbc6692 OpenEVSE: use websocket for state and claims API for control (#33539)
  • 9912bcb002c61d72d15eb503521ff11717b8e201 Oprimizer: align battery forecast times to slot boundaries (#33385)
  • 275ad684ccc5beea1dce1143426a2d8c3afeb3d9 Optimizer: apply active result slot (#33501)
  • b08459e7ac7eac536db858d1c76a66fc2fdf2908 Optimizer: break down household demand into individual profiles (#33749)
  • 5e649cb4d34d79711970e3f67ad23b40a39b0658 Optimizer: configurable per-slot percentile for the energy demand profiles (#33700)
  • 819fb94603682ae54b13acd1cf4b2c6c1f7a28ae Optimizer: empty state, menu entry when enabled, feedback link (#33750)
  • b46b2e67d33c2d2ce7d56d47a92a289a195a769b Optimizer: floor end of horizon battery value at export price (#33746)
  • dd62baaf8de4483daf025a75eca82b4ae6decfdb Optimizer: only offer grid discharge for batteries with discharge mode (#33860)
  • 60df102f7b15404a73bfb08f8b7a16dc847dc344 Optimizer: reapply last solve to newer slots from the control cycle (#33583)
  • 3d104bb680c1d72ac37608c732adc746dbe32939 Optimizer: report loadpoint charging state (#33802)
  • 035853de89eb79772514d21bf071ddd5b69776bf Optimizer: treat unknown battery mode as normal for suggestions (#33698)
  • e91c3db920744008641053124c54ab59988930c6 Planner: clarify precondition log message (#33400)
  • 97e47b56f34e965fa46f344395a73a06c3ed7245 Playwright: follow Shelly Pro 3EM product rename
  • 103aa33702200eb2540daccbb5fc6178bc51bea1 Remote Access UI: don’t show toast for proxy errors (#33514)
  • 365adffa2228ebcd2bc9865d6adea215288934d5 Remote access: cache verified basic-auth credentials (#33593)
  • a8d5832c86a71439978a3a5eaed0f0daaad35c08 Revert “CI: disable Claude workflows (#33507)”
  • 2dc2068059d1a4e29bf1c9ceb8bb055f10484442 Revert “EEBus: replay use case support to devices registering after discovery (#33423)”
  • a3a34410f8502d6db44a3ba07b83ab69928274e9 Revert “ui: hide temperature limit controls for SGReady devices” (#33840)
  • 9efc5a965217c7a31053e6cd0e6a172e8094db3c Shelly: decorate phase readings only when the device meters them (#33706)
  • 0ceb4287a0f52b63ee0aadecc977b2c155481be9 Site: hide config-disabled loadpoints in energy flow (#33714)
  • 5bcfd7f621a0065ea084e239b7b2e473a18c3162 Smart-hello: retry once with a fresh login when the api rejects the token (#33369)
  • 0eb008cf6729c9cf63a751f5e9f4f5216c27b9ae Solis Hybrid S: require minsoc and maxsoc for active battery control (#33580)
  • 0c94a0a00e23183f3d7da39c6dff3e0ae633eb9c Sponsor: accept temp token from hardware check (#33631)
  • f3edc12b3bad0da042ca041738249834f0416573 Subaru vehicle: handle range unit conversion (#33453)
  • 7fec24fd45f84bb8e513e9183f77e68ace9812f1 Tariff (DWD, ESIOS): evaluate forecast dates per request (#33601)
  • a120fb5bfa0ffae32cded23c3a2566bb60b12d1e Tariff (fixed): drop zero-length slot on dst spring forward (#33869)
  • e78e382d372a04a05e6e9a2fb3296f3161541516 Tariff: don’t serve cached rates that have entirely elapsed (#33904)
  • f8a2b2a27f4d75bffeb3e10c99d5c36879661d83 Tariff: keep serving cached rates and retry while tariff unavailable (#33880)
  • a683ffda21c9f034ddd91819a73681311d28bb20 Tariff: retry creating unavailable tariff (#33894)
  • 592f39c0397d23ff4d159abb3dd1e3212f49210f Templates: pass bool params as real booleans (#33153)
  • 5a3c4d1c52a98859b4bd519be829146488546e6b Translated using Weblate (Catalan)
  • 4f8a5c132712a730f55e2357a7c5bcf6d0ba73b9 Translated using Weblate (Danish)
  • 2a890b572f70fd52d2989bf6eaf65141ffa0b520 Translated using Weblate (Dutch)
  • ae8841bd8f68d20c1f31c9f11cf8aa04d5fbdc37 Translated using Weblate (Finnish)
  • c5338fa3dc7d1a7aa20f455f04e3f33271051991 Translated using Weblate (Latvian)
  • 252240c79bfc83c13c0efae84eabde5f790050f8 Translated using Weblate (Lithuanian)
  • 48fb60f2d2a9f2de182b2ce92f58c145ed07f8b6 Translated using Weblate (Russian)
  • 0c6529268a8f31c726b63e2a3d6c026829d84379 Translated using Weblate (Swedish)
  • de0faa41b4f82a92e4b5c0ea96643d2afd874333 Translated using Weblate (Turkish)
  • f63cd7036545aeb687dd87ac6c47402cab79265c UI: improve chart line readability (#33410)
  • be68265dbb1e180abadb9a9c056f4fc64a1a2699 UI: place chart tooltips beside the pointer (#33411)
  • b5dfdee16871e648738219fc8cf451b9b2aaa19a Use official vite+ image for Devcontainer (#33564)
  • 7f0bfb431036424abe23cd2ae450349b13c72827 Vehicle API: handle TeslaMate sleeping response (#33560)
  • 93dbcb47778c8a356312c87e716013027729ca63 Voltie: detect phase switching from the capability register (#33574)
  • d470c99f54ae3e3b12f64b80c5356c13c06d770e Zaptec: do not offer phase switching in passive mode (#33447)
  • 84e1e5945edfcbc7f2b62e5d0286ffdb5e7064dc Zaptec: don’t expose phase switching for Go (#33484)
  • 890b00fb08e4b062d650d67870b7aa73fa749926 Zaptec: ignore empty session identifier in connection duration (#33720)
  • a7a3ad941953d948d3d1dfaf7c8c0c914c0863a0 Zendure Solarflow: read charge setpoint from device (#33803)
  • c6dae0b7dc5e040bdd0d2be4e2e8eb2c97900241 Zendure Solarflow: suggest battery serial via HTTP (#33510)
  • 8af06cf303908bc06442b1182107c75664e0e643 aa55 udp: reject responses whose length does not match the request (#33696)
  • 584977e7bd45ab22175506e0ae80672bad9f5c8c eebus-ohpcf: fail setup when the device does not support OHPCF (#33468)
  • ea60ae350890cefc3f7617864a00f51485065ee8 fox-ess-h3-smart: hold via On-Grid SoC reserve instead of Feed-in First (#33537)
  • 9893252b178346f133f3f76db1a2686a95f46f9a my-PV HEA: derive heartbeat interval from power timeout register (#33628)
  • 732078550d13478dac193b01574fa066ab71bcc9 ui: hide temperature limit controls for SGReady devices (#33754)

Bug Fixes 🐞

  • fe065ee91cfd53b01aac78bbfe61d04ac59cc711 EEBus: fix ship-go connection backoff reset (#33384)
  • bb9491db8bae13ac910a8824b0af71ac63da2362 Huawei EMMA: fix grid import/export energy registers (#33432)
  • 432d318a21602baafc3c2cafb14bee4b2fb58b84 Issue triage: apply area label alongside type Bug, fix label names (#33663)
  • b2274a5f4b873093b5ac0900bfda5b7635cae8fd Optimizer: fix plan SoC goal slot placement off-by-one (#33832)
  • e48599802d1babf0d562115468aa9fad6b8c0551 Shelly TopAC: fix enabled (#33805)
  • 09efbf980adefecf7d4daf2478bf8b5e3f0ac31c Toyota: fix partial api response handling (#33689)
  • 85c10175686f1aebc57f358663063713816f753c Vehicle: fix UI location in deprecated mode warning (#33551)
  • af4aa75cb817b96001622d7aaaa60801672fa470 Zaptec: fix model detection (#33504)