OpenEVSE is an open-source electric vehicle supply equipment (EVSE) platform consisting of three tightly integrated components: an AVR-based charging controller, an ESP32 WiFi gateway, and a Svelte web interface. Together they deliver a fully featured, locally hosted EV charging station with cloud integration, energy management, and smart-home connectivity.
┌─────────────────────────────────────────────────────┐
│ Web Browser / App │
│ openevse-gui-v2 (Svelte / Vite) │
└────────────────────┬────────────────────────────────┘
│ HTTP REST / WebSocket
┌────────────────────▼────────────────────────────────┐
│ ESP32 WiFi Gateway Firmware │
│ openevse_esp32_firmware (C / C++ / ESP-IDF) │
│ WiFi · Ethernet · MQTT · OCPP · Home Assistant │
└────────────────────┬────────────────────────────────┘
│ Serial RAPI API (UART) 115200
┌────────────────────▼────────────────────────────────┐
│ OpenEVSE EV Safety Controller Firmware │
│ open_evse (C++, ATmega328P/ARM SAMD21) │
│ J1772 · GMI/GFI · Relay · Pilot · Proximity │
└─────────────────────────────────────────────────────┘
Repository: https://github.com/OpenEVSE/open_evse
MCU: ATmega328P / ATSAMD21G18
Language: C++ (83.8%), Roff
Standard: SAE J1772 (Level 1 & Level 2)
- GFI (Ground Fault Interrupter) protection
- Pilot signal generation and state machine (A/B/C/D/E/F)
- Relay control with stuck-relay and no-ground fault detection
- Time-based scheduled charging
- Display with 3.5" TFT or Text RGB backlight
- Temperature monitoring (MCP9808)
- Ammeter with calibration
- Charge time and energy limits
- Heartbeat supervision for gateway watchdog
- Mennekes lock control (EU Type 2)
- Pre-compiled binaries available on GitHub Releases
- Compile with VSCode / PlatformIO using bundled library versions
- Flash via
avrdudewith USBASP or compatible ISP programmer - Hardware definitions in
/boards/, firmware source in/firmware/open_evse/
The Remote API (RAPI) is a serial ASCII protocol used by the ESP32 gateway (and any host) to control and query the OpenEVSE controller over UART.
Format: $<cmd> [args...]*<checksum>\r\n
Response: $OK [values...] or $NK (not OK)
| Command | Description | Parameters |
|---|---|---|
FD |
Disable EVSE | — |
FE |
Enable EVSE | — |
FS |
Sleep EVSE | — |
FR |
Restart EVSE | — |
F0 |
Enable/disable display updates | 1=enable, 0=disable |
F1 |
Simulate front-panel button press | — |
FB |
Set LCD backlight color | 0=OFF 1=RED 2=GREEN 3=YELLOW 4=BLUE 5=VIOLET 6=TEAL 7=WHITE |
FP |
Print text on LCD | x, y, text |
FF |
Enable/disable feature flag | feature_id (B/D/E/F/G/R/T/V), 0/1 |
| Command | Description | Parameters |
|---|---|---|
SC |
Set current capacity | amps, [V|M] |
SL |
Set service level | 1=L1, 2=L2, A=Auto |
ST |
Set timer | starthr, startmin, endhr, endmin |
S3 |
Set charge time limit | cnt × 15 min |
SH |
Set charge limit | kWh |
SK |
Set accumulated Wh | value |
SV |
Set voltage for power calc | millivolts |
SA |
Set ammeter calibration | currentscalefactor, currentoffset |
SM |
Set voltmeter calibration | voltscalefactor, voltoffset |
S1 |
Set RTC clock | yr, mo, day, hr, min, sec |
S2 |
Enable/disable ammeter cal mode | 0/1 |
S4 |
Set auth lock | 0=unlocked, 1=locked |
S5 |
Mennekes lock setting | A=auto, M=manual, 0=unlock, 1=lock |
SB |
Clear boot lock | — |
SY |
Set heartbeat supervision | interval, currentlimit |
S0 |
Set LCD type | 0=monochrome, 1=RGB |
| Command | Description | Response |
|---|---|---|
GS |
Get EVSE state | evsestate, elapsed, pilotstate, vflags |
GG |
Get charging current & voltage | milliamps, millivolts |
GU |
Get energy usage | Wattseconds, Whacc |
GC |
Get current capacity info | minamps, hmaxamps, pilotamps, cmaxamps |
GE |
Get settings | amps, flags |
GV |
Get firmware & protocol version | firmware_version, protocol_version |
GT |
Get RTC time | yr, mo, day, hr, min, sec |
GP |
Get temperature sensors | ds3231temp, mcp9808temp, tmp007temp |
GO |
Get overtemperature thresholds | ambientthresh, irthresh |
GH |
Get charge limit | kWh |
G3 |
Get charge time limit | cnt |
GD |
Get delay timer | starthr, startmin, endhr, endmin |
GF |
Get fault counters | gfitripcnt, nogndtripcnt, stuckrelaytripcnt |
GA |
Get ammeter settings | currentscalefactor, currentoffset |
GM |
Get voltmeter settings | voltscalefactor, voltoffset |
G0 |
Get EV connect state | connectstate (0/1/2) |
G4 |
Get auth lock state | lockstate |
G5 |
Get Mennekes settings | state, mode |
GI |
Get MCU ID | mcuid |
GY |
Get heartbeat supervision status | interval, currentlimit, trigger |
Repository: https://github.com/OpenEVSE/openevse_esp32_firmware
MCU: ESP32
Language: C (73%), C++ (24.7%)
License: GPL v3
Latest Release: v5.1.5 (October 2025)
Minimum OpenEVSE firmware: v7.1.3
- 802.11 b/g/n WiFi (AP + STA modes)
- Wired Ethernet via ESP32 Gateway board
- UART to OpenEVSE controller (RAPI)
| Feature | Status |
|---|---|
| Web UI control (start/pause, current, schedules, limits) | Stable |
| MQTT status & control | Stable |
Emoncms logging (data.openevse.com or self-hosted) |
Stable |
| Eco / Solar divert mode | Stable |
| Power shaper (grid capacity management) | Stable |
| OTA firmware updates | Stable |
| OCPP v1.6J | Stable |
| Home Assistant integration | Stable |
| Tesla vehicle API | Available |
Base URL: http://<device-ip> (default hostname: openevse.local)
| Method | Endpoint | Description |
|---|---|---|
GET |
/status |
Current EVSE operational state |
POST |
/status |
Push external data (voltage, power, solar, grid, battery) |
GET |
/ws |
WebSocket — real-time state stream |
| Method | Endpoint | Description |
|---|---|---|
GET |
/config |
Read WiFi/EVSE settings |
POST |
/config |
Write config (EmonCMS, solar divert, charging mode, Tesla credentials) |
| Method | Endpoint | Description |
|---|---|---|
GET |
/override |
Read current override |
POST |
/override |
Set override with custom parameters |
PATCH |
/override |
Toggle override state |
DELETE |
/override |
Clear override |
| Method | Endpoint | Description |
|---|---|---|
GET |
/claims |
List all client claims |
GET |
/claims/{client} |
Get specific client claim |
POST |
/claims/{client} |
Create/update claim |
DELETE |
/claims/{client} |
Release claim |
| Method | Endpoint | Description |
|---|---|---|
GET |
/schedule |
List all schedule events |
POST |
/schedule |
Batch update events |
GET |
/schedule/{id} |
Get event by ID |
POST |
/schedule/{id} |
Update event |
DELETE |
/schedule/{id} |
Remove event |
GET |
/schedule/plan |
Planned events by day |
| Method | Endpoint | Description |
|---|---|---|
GET |
/limit |
Get active charge limit |
POST |
/limit |
Set charge limit |
DELETE |
/limit |
Clear charge limit |
| Method | Endpoint | Description |
|---|---|---|
POST |
/restart |
Restart gateway or EVSE (device param) |
GET |
/time |
Get current time and timezone offset |
POST |
/time |
Set time and timezone |
DELETE |
/emeter |
Reset energy meter |
GET |
/logs |
Log block index |
GET |
/logs/{index} |
Fetch log events for block |
| Method | Endpoint | Description |
|---|---|---|
GET |
/tesla/vehicles |
List vehicles linked to Tesla account |
| Method | Endpoint | Description |
|---|---|---|
GET |
/certificates |
List uploaded TLS certificates |
POST |
/certificates |
Upload certificate |
GET |
/certificates/{id} |
Get certificate by ID |
DELETE |
/certificates/{id} |
Delete certificate |
OpenAPI / Swagger specification: api.yml in the firmware repository root.
Interactive docs: https://openevse.stoplight.io/docs/openevse-wifi
Repository: https://github.com/OpenEVSE/openevse-gui-v2
License: BSD-2-Clause
Stack: Svelte, Vite, Bulma CSS
Language: Svelte (54.9%), JavaScript (44.2%)
- Dashboard: live state, current draw, energy session
- Start / pause charging
- Current capacity slider
- Scheduler: create, edit, and delete timed charging events
- Eco/Solar divert mode controls
- System configuration (WiFi, MQTT, EmonCMS, limits)
- Internationalization (i18n)
# Clone with submodules
git clone --recurse-submodules https://github.com/OpenEVSE/openevse-gui-v2.git
cd openevse-gui-v2
npm install
# Set target device (defaults to openevse.local)
export VITE_OPENEVSEHOST=192.168.x.x
npm run dev # Dev server on :5173 — proxies API to VITE_OPENEVSEHOST
npm run build # Production build → dist/The ESP32 gateway publishes EVSE state and subscribes to control topics. Configure broker, username, password, and base topic via /config or the web UI. Commonly used with Home Assistant MQTT discovery.
Data can be logged to enoncms.org or a self-hosted Emoncms instance. Set emoncms_apikey, emoncms_server, and emoncms_node in /config.
The gateway accepts real-time solar generation and grid import data via POST /status (fields: solar, grid_ie, voltage) and adjusts the pilot current to charge only from surplus renewable energy.
Beta native integration. Alternatively, use MQTT with HA's MQTT integration. The gateway's auto-discovery payloads populate entities automatically.
Beta support for communicating with a central management system (CMS/CSMS). Configure OCPP server URL and identity via /config.
| Component | Link |
|---|---|
| OpenEVSE Plus v5 Controller | https://github.com/OpenEVSE/OpenEVSE_PLUS |
| ESP32 WiFi Kit | https://www.openevse.com |
| OpenEVSE Hardware Repo | https://github.com/OpenEVSE/OpenEVSE_PLUS |
Tip Jar: Lincomatic developed/maintains this firmware on a volunteer basis. Any donation, no matter how small, is greatly appreciated.
Open EVSE is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
Open EVSE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Open EVSE; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
* Open EVSE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.