Integrations

OpenEVCharger ships local-first integrations that don't require a vendor cloud account. The safety MCU exposes a small binary protocol over UART; the FC41D Wi-Fi module on the other end speaks ESPHome, Home Assistant, and OCPP 1.6-J.

Home Assistant

The FC41D module runs an ESPHome config that exposes the charger as a first-class Home Assistant device via the native API: roughly 30 sensors, 12 buttons, 5 numbers, 5 switches, and 3 binary sensors. State, current, energy, faults, RFID auth UI, BL0939 calibration push-button, and the OTA push flow all flow over the same channel.

Reference YAML: fc41d/openevcharger.yaml .

OCPP 1.6-J

Full Charge Point on the FC41D side via esphome-ocpp-server + MicroOcpp. StartTransaction / StopTransaction round-trip through the safety MCU's TLV surface (CSMS Accept relays to MCU request_start_resume / request_stop) so the safety core stays in control of the contactor. RFID auth and SmartCharging (SetChargingProfile → live amp-limit derate) are wired end-to-end.

Use any compliant CSMS — bench-validated against evcc (live amp adjustment validated 2026-05-07); works with SteVe, CitrineOS, Open e-Mobility, or anything else that speaks OCPP 1.6-J.

evcc

Configure as the ocpp charger type in evcc; the FC41D advertises a Charge Point ID over OCPP that evcc connects to. Live amp adjustments from evcc reach the contactor in under a second (FC41D → MCU TLV → CP duty update). Energy and power telemetry feed evcc's session log unchanged.

TLV protocol

The MCU ↔ FC41D protocol is a small binary TLV over UART4 — 28 commands and 23 events at v1. Surface includes state report, config, calibration, RFID auth list, OTA chain, time sync, restart, and simulate-replug.

The protocol stays bit-for-bit compatible across boards, so the ESPHome integration works unchanged on any port. Full surface and the wire format: specs/ in the firmware repo.

OTA

Updates flow Home Assistant → FC41D (HTTP fetch) → MCU (TLV chunked upload) → W25Q SPI NOR (CRC verify) → reboot → RAM-resident apply path erases bank 0 + word-programs + SYSRESETREQ. Self-rolls back on CRC mismatch. Today's image cap is 64 KB (current image ~52 KB).