Configuration examples for the EVCC EV Charge Controller.
EVCC supports a growing list of chargers, meters and vehicles. See below for detailed configuration.
Additional devices can be configured using the generic
device type and related plugins.
If you want to contribute configurations to this repository please open a Pull Request ("PR"). PRs should contain:
- updated or new
yaml
configuration (see https://github.com/andig/evcc-config/tree/master/yaml) - run
make
to generate compilable Go code (configurations are used for testing) and update the README
- EVSE DIN (Modbus RTU)
- EVSE DIN (Modbus/TCP)
- EVSE-Wifi
- FritzDECT
- Generic
- Generic (MQTT)
- go-eCharger
- go-eCharger (Cloud)
- i-CHARGE CION (Modbus RTU-over-TCP)
- KEBA Connect
- Mobile Charger Connect (Audi, Bentley, Porsche)
- NRGKick BT (Bluetooth)
- NRGKick Connect
- openWB (MQTT)
- Phoenix EM-CP-PP-ETH Controller (Modbus/TCP)
- Phoenix EV-ETH Controller (Modbus/TCP)
- Phoenix EV-SER Controller (Modbus RTU)
- Shelly
- Tasmota
- TinkerForge WARP Charger
- TP-LINK Smart Plug
- Wallbe (Eco, Pro)
- Wallbe (pre 2019 EV-CC-AC1 controller)
- Discovergy
- E3DC (Battery Meter)
- E3DC (Grid Meter)
- E3DC (PV Meter)
- Eastron SDM Modbus Meter (RTU)
- Eastron SDM Modbus Meter (RTU-over-TCP)
- Fronius Solar API V1 (Battery Meter/ HTTP)
- Fronius Solar API V1 (Grid Meter/ HTTP)
- Fronius Solar API V1 (PV Meter/ HTTP)
- Fronius Symo GEN24 Plus (Battery Meter)
- Fronius Symo GEN24 Plus (Grid Meter)
- Fronius Symo GEN24 Plus (PV Meter)
- Generic (MQTT)
- Generic (Script)
- Generic SunSpec 3-phase meter via inverter (Grid Meter)
- Generic SunSpec battery inverter (Battery Meter)
- Generic SunSpec PV inverter (PV Meter)
- Kostal Energy Meter via inverter (Grid Meter)
- Kostal Hybrid Inverter (Battery Meter)
- Kostal Inverter (PV Meter)
- Kostal Smart Energy Meter (Grid Meter)
- Multiple DC MPP strings combined (PV Meter)
- Multiple PV inverters combined (PV Meter)
- SMA Sunny Home Manager / Energy Meter (Speedwire)
- SMA Sunny Island / Sunny Boy Storage (Battery Meter)
- SMA SunnyBoy / TriPower / other PV-inverter (PV Meter)
- SolarEdge Energy Meter via inverter (Grid Meter)
- SolarEdge Hybrid Inverter (PV Meter)
- SolarEdge StorEdge (Battery Meter)
- Solarlog (Grid Meter)
- Solarlog (PV Meter)
- Solarwatt MyReserve (Battery Meter/ HTTP)
- Solarwatt MyReserve (Grid Meter/ HTTP)
- Solarwatt MyReserve (PV Meter/ HTTP)
- Sonnenbatterie Eco/10 (Battery Meter/ HTTP)
- Sonnenbatterie Eco/10 (Grid Meter/ HTTP)
- Sonnenbatterie Eco/10 (PV Meter/ HTTP)
- Tesla Powerwall (Battery Meter)
- Tesla Powerwall (Grid Meter)
- Tesla Powerwall (PV Meter)
- vzlogger (HTTP)
- vzlogger (Push Server/ Websocket)
- vzlogger (split import/export channels)
- Audi (eTron etc)
- BMW (i3)
- evNotify (https://evnotify.de/)
- Ford (Kuga, Mustang, etc)
- Generic
- Generic (Script)
- Generic EV without SoC (Javascript)
- Hyundai (Kona, Ioniq)
- Kia (e-Niro, e-Soul, etc)
- Nissan (Leaf)
- NIU E-Scooter
- Porsche
- Renault (Zoe)
- Tesla
- VW (e-Up, e-Golf, etc)
- VW ID (ID.3, ID.4, but also e-Golf, e-Up)
- type: discovergy
user: [email protected]
password: demo # password
meter: 1ESY1161229886
- type: custom
power:
source: modbus
uri: e3dc.fritz.box:502
id: 1 # ModBus slave id
register: # manual register configuration
address: 40069
type: holding
decode: int32s
scale: -1 # reverse direction
soc:
source: modbus
uri: e3dc.fritz.box:502
id: 1 # ModBus slave id
register: # manual register configuration
address: 40082
type: holding
decode: uint16
- type: custom
power:
source: modbus
uri: e3dc.fritz.box:502
id: 1 # ModBus slave id
register: # manual register configuration
address: 40073
type: holding
decode: int32s
- type: custom
power:
source: modbus
uri: e3dc.fritz.box:502
id: 1 # ModBus slave id
register: # manual register configuration
address: 40067 # (40068 - 1) "Photovoltaikleistung in Watt"
type: holding
decode: int32s
- type: modbus
model: sdm
device: /dev/ttyUSB0 # serial port
baudrate: 9600
comset: 8N1
id: 1
energy: Sum # only required for charge meter usage
- type: modbus
model: sdm
uri: 192.0.2.2:502
rtu: true # serial modbus rtu (rs485) device connected using simple ethernet adapter
id: 1
energy: Sum # this assignment is only required for charge meter usage
- type: custom
power:
source: http
uri: http://192.0.2.2/solar_api/v1/GetPowerFlowRealtimeData.fcgi
jq: if .Body.Data.Site.P_Akku == null then 0 else .Body.Data.Site.P_Akku end
soc:
source: http
uri: http://192.0.2.2/solar_api/v1/GetPowerFlowRealtimeData.fcgi
jq: .Body.Data.Inverters."1".SOC
- type: custom
power:
source: http
uri: http://192.0.2.2/solar_api/v1/GetPowerFlowRealtimeData.fcgi
jq: if .Body.Data.Site.P_Grid == null then 0 else .Body.Data.Site.P_Grid end
- type: custom
power:
source: http
uri: http://192.0.2.2/solar_api/v1/GetPowerFlowRealtimeData.fcgi
jq: if .Body.Data.Site.P_PV == null then 0 else .Body.Data.Site.P_PV end
- type: custom
power:
source: calc
add:
- source: modbus
model: sunspec
uri: 192.0.2.2:502
id: 1
value: 160:3:DCW # mppt 3 charge
scale: -1
- source: modbus
model: sunspec
uri: 192.0.2.2:502
id: 1
value: 160:4:DCW # mppt 4 discharge
soc:
source: modbus
model: sunspec
uri: 192.0.2.2:502
id: 1
value: ChargeState
- type: modbus
model: sunspec
uri: 192.0.2.2:502
id: 200
power: 213:W # sunspec meter
- type: custom
power:
source: calc
add:
- source: modbus
model: sunspec
uri: 192.0.2.2:502
id: 1
value: 160:1:DCW # mpp 1 pv
- source: modbus
model: sunspec
uri: 192.0.2.2:502
id: 1
value: 160:2:DCW # mpp 2 pv
- type: custom
power: # power reading
source: mqtt # use mqtt plugin
topic: mbmd/sdm1-1/Power # mqtt topic
timeout: 10s # don't use older values
- type: custom
power:
source: script # use script plugin
cmd: /bin/sh -c "echo 0" # actual command
timeout: 3s # kill script after 3 seconds
- type: modbus
model: sunspec
uri: 192.0.2.2:502
id: 1
power: 203:W # sunspec meter
- type: modbus
uri: 192.0.2.2:502
id: 1
soc: ChargeState
- type: modbus
uri: 192.0.2.2:502
id: 1
- type: custom
power:
source: modbus # use ModBus plugin
uri: 192.0.2.2:1502 # inverter port
id: 71
register: # manual non-sunspec register configuration
address: 252 # (see ba_kostal_interface_modbus-tcp_sunspec.pdf)
type: holding
decode: float32
- type: modbus
uri: 192.0.2.2:1502
id: 71
power: 802:W
soc: 802:SoC
- type: modbus
uri: 192.0.2.2:1502
id: 71
- type: modbus
uri: 192.0.2.2:502
id: 71
- type: custom
power:
source: calc
add:
- source: modbus
model: sunspec
value: 160:1:DCW # SunSpec Model 160 MPP string 1 DCW
uri: 192.0.2.2:502
id: 1
- source: modbus
model: sunspec
value: 160:2:DCW # SunSpec Model 160 MPP string 2 DCW
uri: 192.0.2.2:502
id: 1
- type: custom
power:
source: calc
add:
- source: modbus
model: sunspec
uri: 192.0.2.2:502
id: 1
- source: modbus
model: sunspec
uri: 192.0.2.3:502
id: 1
- type: sma
uri: 192.0.2.2
- type: modbus
uri: 192.0.2.2:502
id: 126
soc: ChargeState
- type: modbus
uri: 192.0.2.2:502
id: 126
- type: custom
power:
source: modbus
model: sunspec
uri: 192.0.2.2:502 # Port 502 (SetApp) or 1502 (LCD)
id: 1
subdevice: 1 # Metering device
value: 203:W
scale: -1
- type: custom
power:
source: calc
add:
- source: modbus
model: sunspec
uri: 192.0.2.2:502 # Port 502 (SetApp) or 1502 (LCD)
id: 1
value: 103:DCW
- source: modbus
uri: 192.0.2.2:502 # Port 502 (SetApp) or 1502 (LCD)
id: 1
register:
address: 62836 # Battery 1 Instantaneous Power
type: holding
decode: float32s
- type: custom
power:
source: modbus
uri: 192.0.2.2:502 # Port 502 (SetApp) or 1502 (LCD)
id: 1
register:
address: 62836 # Battery 1 Instantaneous Power
type: holding
decode: float32s
scale: -1
soc:
source: modbus
uri: 192.0.2.2:502 # Port 502 (SetApp) or 1502 (LCD)
id: 1
register:
address: 62852 # Battery 1 State of Energy (SOE)
type: holding
decode: float32s
- type: custom
power:
source: modbus
uri: 192.0.2.2:502 # IP address of the SolarLog device and ModBus port address
id: 1
register:
address: 3518
type: input
decode: uint32s
- type: custom
power:
source: modbus
uri: 192.0.2.2:502 # IP address of the SolarLog device and ModBus port address
id: 1
register:
address: 3502
type: input
decode: uint32s
- type: custom
power:
source: http
uri: http://192.0.2.2/rest/kiwigrid/wizard/devices # EnergyManager
jq: .result.items[] | select(.deviceModel[].deviceClass == "com.kiwigrid.devices.location.Location" ) | .tagValues.PowerConsumedFromStorage.value - .tagValues.PowerBuffered.value
soc:
source: http
uri: http://192.0.2.2/rest/kiwigrid/wizard/devices # EnergyManager
jq: .result.items[] | select(.deviceModel[].deviceClass == "com.kiwigrid.devices.solarwatt.MyReserve") | .tagValues.StateOfCharge.value
- type: custom
power:
source: http
uri: http://192.0.2.2/rest/kiwigrid/wizard/devices # EnergyManager
jq: .result.items[] | select(.deviceModel[].deviceClass == "com.kiwigrid.devices.location.Location" ) | .tagValues.PowerConsumedFromGrid.value - .tagValues.PowerOut.value
- type: custom
power:
source: http
uri: http://192.0.2.2/rest/kiwigrid/wizard/devices # EnergyManager
jq: .result.items[] | select(.deviceModel[].deviceClass == "com.kiwigrid.devices.location.Location" ) | .tagValues.PowerProduced.value
- type: custom
power:
source: http
uri: http://192.0.2.2:8080/api/v1/status
jq: .Pac_total_W
soc:
source: http
uri: http://192.0.2.2:8080/api/v1/status
jq: .USOC
- type: custom
power:
source: http
uri: http://192.0.2.2:8080/api/v1/status
jq: .GridFeedIn_W
scale: -1 # reverse direction
- type: custom
power:
source: http
uri: http://192.0.2.2:8080/api/v1/status
jq: .Production_W
- type: tesla
uri: http://192.0.2.2/
usage: battery
- type: tesla
uri: http://192.0.2.2/
usage: grid
- type: tesla
uri: http://192.0.2.2/
usage: pv
- type: custom
power: # power reading
source: http # use http plugin
uri: http://demo.volkszaehler.org/api/data/<uuid>.json?from=now
jq: .data.tuples[0][1] # parse response json
- type: custom
power:
source: ws # use websocket plugin
uri: ws://192.0.2.2:8082/socket
jq: .data | select(.uuid=="<uuid>") .tuples[0][1] # parse response json
timeout: 30s
scale: 1
- type: custom
power:
source: calc # use calc plugin
add:
- source: http # import channel
uri: http://demo.volkszaehler.org/api/data/<import-uuid>.json?from=now
jq: .data.tuples[0][1] # parse response json
- source: http # export channel
uri: http://demo.volkszaehler.org/api/data/<export-uuid>.json?from=now
jq: .data.tuples[0][1] # parse response json
scale: -1 # export must result in negative values
- type: simpleevse
device: /dev/ttyUSB0 # serial RS485 interface
- type: simpleevse
uri: 192.0.2.2:502 # Modbus/TCP converter adress
- type: evsewifi
uri: http://192.0.2.2
- type: fritzdect
uri: https://fritz.box # FRITZ!Box ip address (local)
user: xxxxxxxxxx # FRITZ!Box username (Has to have Smart Home privileges!)
password: yyyyyyyyyy # FRITZ!Box password
ain: '007788992233' # switch actor identification number without blanks (see AIN number on switch sticker)
standbypower: 15 # treat as charging above this power
- type: custom
status: # charger status A..F
source: ...
# ...
enabled: # charger enabled state (true/false or 0/1)
source: ...
# ...
enable: # set charger enabled state
source: ...
# ...
maxcurrent: # set charger max current
source: ...
# ...
- type: custom
status: # charger status A..F
source: mqtt
topic: some/topic1
enabled: # charger enabled state (true/false or 0/1)
source: mqtt
topic: some/topic2
enable: # set charger enabled state
source: script
cmd: /bin/sh -c "echo ${enable}"
maxcurrent: # set charger max current
source: script
cmd: /bin/sh -c "echo ${maxcurrent}"
- type: go-e
uri: http://192.0.2.2 # go-e ip address (local)
- type: go-e
token: 4711c # go-e cloud API token
cache: 10s # go-e cloud API cache duration
- type: custom
status:
source: modbus
uri: 192.0.2.2:502
rtu: true # Modbus over TCP
id: 1
register: # manual register configuration
address: 139 # CP-Status
type: holding
decode: uint16
enabled:
source: modbus
uri: 192.0.2.2:502
rtu: true # Modbus over TCP
id: 1
register: # manual register configuration
address: 100 # Zustand
type: holding
decode: uint16
enable:
source: modbus
uri: 192.0.2.2:502
rtu: true # Modbus over TCP
id: 1
register: # manual register configuration
address: 100 # ein / aus
type: writesingle
decode: uint16
maxcurrent:
source: modbus
uri: 192.0.2.2:502
rtu: true # Modbus over TCP
id: 1
register: # manual register configuration
address: 127 # Strom max
type: writesingle
decode: uint16
- type: keba
uri: 192.0.2.2
rfid:
tag: 765765348 # RFID tag, see `evcc charger` to show tag
- type: mcc
uri: https://192.0.2.2
password: # home user password
- type: nrgkick-bluetooth
mac: 00:1E:C0:XX:XX:XX # BT device MAC address (sudo hcitool lescan)
pin: 1234 # App PIN number (write protection, ignore leading zeros)
- type: nrgkick-connect
uri: http://192.0.2.2
mac: 00:1E:C0:XX:XX:XX # BT device MAC address (sudo hcitool lescan)
password: # password
- type: openwb
broker: 192.0.2.2 # openWB IP
id: 1 # loadpoint id
- type: phoenix-em-eth
uri: 192.168.0.8:502
meter:
power: true # charge meter connected to controller
energy: true # charge meter connected to controller
currents: true # charge meter connected to controller
- type: phoenix-ev-eth
uri: 192.168.0.8:502
meter:
power: true # charge meter connected to controller
energy: true # charge meter connected to controller
currents: true # charge meter connected to controller
- type: phoenix-ev-ser
device: /dev/ttyUSB0
baudrate: 9600 # configurable (S2/DIP 1)
comset: 8N1
id: 1 # configurable (S2/DIP 2–6)
- type: shelly
uri: http://192.168.xxx.xxx # shelly device ip address (local)
channel: 0 # shelly device relay channel
standbypower: 15 # treat as charging above this power
- type: tasmota
uri: http://192.168.xxx.xxx # tasmota device ip address (local)
# user: xxxx # user, (optional) in case user + password are defined
# password: xxxxx # (optional) in case user + password are defined
standbypower: 15 # treat as charging above this power
- type: warp
broker: 192.0.2.2:1883
topic: warp
useMeter: true # WARP Charger Pro
timeout: 30s
- type: tplink
uri: 192.0.2.2 # TP-LINK Smart Plug ip address (local)
standbypower: 15 # treat as charging above this power
- type: wallbe
uri: 192.168.0.8:502 # TCP ModBus address
- type: wallbe
uri: 192.168.0.8:502 # TCP ModBus address
legacy: true # enable for older Wallbes with Phoenix EV-CC-AC1-M3-CBC-RCM controller
- type: audi
title: eTron # display name for UI
capacity: 14 # kWh
user: # user
password: # password
vin: WAUZZZ... # optional
- type: bmw
title: i3 # display name for UI
capacity: 65 # kWh
user: # user
password: # password
vin: WBMW... # optional
evNotify (https://evnotify.de/)
- type: custom
title: My Car # display name for UI
capacity: 39 # kWh
charge:
type: http
uri: https://app.evnotify.de/soc?akey=AKEY&token=1234567890abcdef # evNotify Server + AKEY
method: GET
jq: .soc_display
cache: 5m # cache duration
- type: ford
title: Kuga # display name for UI
capacity: 10 # kWh
user: # user
password: # password
vin: WF0FXX... # optional
- type: custom
title: Mein Auto # display name for UI
capacity: 50 # kWh
charge:
source: ...
# ...
- type: custom
title: Auto # display name for UI
capacity: 50 # kWh
charge:
source: script # use script plugin
cmd: /bin/sh -c "echo 50" # actual command
timeout: 3s # kill script after 3 seconds
status: # optional
source: script # use script plugin
cmd: /bin/sh -c "echo B" # actual command
timeout: 3s # kill script after 3 seconds
range: # optional
source: script # use script plugin
cmd: /bin/sh -c "echo 123" # actual command
timeout: 3s # kill script after 3 seconds
cache: 5m # cache duration
- type: custom
title: My electric vehicle # display name for UI
capacity: 10 # kWh
charge:
source: js
script: 95 // vehicle SoC in %
- type: hyundai
title: Kona # display name for UI
capacity: 64 # kWh
user: # user
password: # password
- type: kia
title: e-Niro # display name for UI
capacity: 64 # kWh
user: # user
password: # password
- type: nissan
title: Leaf # display name for UI
capacity: 60 # kWh
user: # user
password: # password
- type: niu
title: NIU E-Scooter # display name for UI
capacity: 4 # kWh
user: xxxxxxx # NIU app user
password: xxxxxx # NIU app password
serial: NXXXXXXXXXXXXXXX # NIU E-Scooter serial number like shown in app
- type: porsche
title: Taycan # display name for UI
capacity: 83 # kWh
user: # user
password: # password
vin: WP...
- type: renault
title: Zoe # display name for UI
capacity: 60 # kWh
user: # user
password: # password
vin: WREN... # optional
- type: tesla
title: Model S # display name for UI
capacity: 90 # kWh
user: # email
password: # password
vin: WTSLA...
- type: vw
title: Golf # display name for UI
capacity: 10 # kWh
user: # user
password: # password
vin: WVWZZZ... # optional
- type: id
title: ID.3 # display name for UI
capacity: 50 # kWh
user: # user
password: # password
vin: WVWZZZ... # optional