VW e-Up via OBD2

Vehicle Type: VWUP.OBD

This vehicle type supports the VW e-UP (new model from year 2020 onwards). Untested (so far) but probably working: The older models of the e-Up as well as Skoda Citigo E IV and Seat MII electric.

Connection is via the standard OBD-II port (above the drivers left foot):

All communication with the car is read-only. For changing values (i.e. climate control) see the T26A connection to the Comfort CAN bus.

Support Overview

Function

Support Status

Hardware

No specific requirements

Vehicle Cable

OBD-II to DB9 Data Cable for OVMS (1441200 right, or 1139300 left)

GSM Antenna

1000500 Open Vehicles OVMS GSM Antenna (or any compatible antenna)

GPS Antenna

1020200 Universal GPS Antenna (SMA Connector) (or any compatible antenna)

SOC Display

Yes

Range Display

Yes

GPS Location

Yes

Speed Display

Yes

Temperature Display

Yes

BMS v+t Display

Yes (including cell details)

TPMS Display

Yes

Charge Status Display

Yes

Charge Interruption Alerts

Yes

Charge Control

No

Cabin Pre-heat/cool Control

No

Lock/Unlock Vehicle

No

Valet Mode Control

No

Others

See list of metrics below

Vehicle States

Warning

For proper state detection, the 12V calibration is crucial. Calibrate using the OVMS Web UI: Config → Vehicle → 12V Monitor

Three vehicle states are supported and detected automatically:

Vehicle ON

The car is on: It is drivable.

Vehicle CHARGING

The car is charging: The car’s Charger ECU is responsive and reports charging activity.

Vehicle OFF

The car is off: It hasn’t drawn (or charged) any current into the main battery for a period of time and the 12V battery voltage is smaller than 12.9V.

Supported Standard Metrics

Metrics updated in state “Vehicle ON” or “Vehicle CHARGING”

Metric name

Example value

Description

v.e.on

yes

Is ignition on and drivable (true = “Vehicle ON”, false = “Vehicle OFF” state)

v.c.charging

yes

Is vehicle charging (true = “Vehicle CHARGING” state. v.e.on=false if this is true)

v.c.limit.soc

100%

Sufficient SOC: timer mode SOC destination or user CTP configuration (see below)

v.c.mode

range

“range” = charging to 100% SOC, else “standard”

v.c.timermode

no

Yes = current/next charge under timer control

v.c.state

done

charging, stopped, done

v.c.substate

scheduledstop

scheduledstop, scheduledstart, onrequest, timerwait, stopped, interrupted

v.b.12v.voltage [1]

12.9 V

Current voltage of the 12V battery

v.b.voltage

320.2 V

Current voltage of the main battery

v.b.current

23.2 A

Current current into (negative) or out of (positive) the main battery

v.b.power

23.234 kW

Current power into (negative) or out of (positive) the main battery.

v.b.energy.used.total

540.342 kWh

Energy used total (life time) of the main battery

v.b.energy.recd.total

578.323 kWh

Energy recovered total (life time) of the main battery (charging and recuperation)

v.b.temp

22.5 °C

Current temperature of the main battery

v.p.odometer

2340 km

Total distance traveled

Metrics updated only in state “Vehicle ON”

Metric name

Example value

Description

v.b.soc [2]

88.2 %

Current usable State of Charge (SoC) of the main battery

v.e.drivemode

2

1=STD, 2=ECO, 3=ECO+

v.e.gear

1

1=forward, 0=neutral, -1=reverse (2020 model only)

Metrics updated only in state “Vehicle CHARGING”

Metric name

Example value

Description

v.c.power

7.345 kW

Input power of charger

v.c.efficiency

91.3 %

Charging efficiency calculated by v.b.power and v.c.power

Custom Metrics

In addition to the standard metrics above the following custom metrics are read from the car or internally calculated by OVMS using read values.

State metrics

Metric name

Example value

Description

xvu.e.hv.chgmode

0

High voltage charge mode; 0=off, 1=Type2, 4=CCS

xvu.e.lv.autochg

1

Auxiliary battery (12V) auto charge mode (0/1)

xvu.e.lv.pwrstate

0

Low voltage (12V) power state (0=off, 4=12V, 8=HVAC, 15=on)

Timed charge metrics

Metric name

Example value

Description

xvu.c.limit.soc.max

80%

Charge schedule maximum SOC

xvu.c.limit.soc.min

20%

Charge schedule minimum SOC

xvu.c.timermode.def

yes

Charge timer defined & default

xvu.c.timermode.def tells if a charge schedule has been configured and enabled. If so, the car uses timed charging by default (the charge mode button will be lit). v.c.timermode tells if the charge timer is or will actually be used for the current or next charge, i.e. reflects the mode selected by pushing the button.

With timed charging, the car first charges to the minimum SOC as soon as possible (when connected). If the maximum SOC configured for the schedule hasn’t been reached by then, it will then wait for the timer to signal the second phase to charge up to the maximum SOC. The “sufficient SOC” v.c.limit.soc will be the maximum SOC if less than 100%. If the timer is disabled or set to charge up to 100%, the sufficient SOC is set to the user configured charge time prediction SOC limit (config xvu ctp.soclimit).

Charging above v.c.limit.soc is classified as the “topping off” charge phase. When crossing that SOC threshold, an intermediate charge status notification is sent.

Note: xvu.c.limit.soc.min will show the configured minimum SOC also if no schedule is currently enabled. xvu.c.limit.soc.max shows the maximum for the current/next schedule to apply. If no schedule is enabled, it will be zero.

Metrics updated in state “Vehicle ON” or “Vehicle CHARGING”

Metric name

Example value

Description

xvu.b.cell.delta

0.012 V

Delta voltage between lowest and highest cell voltage

xvu.b.soc

85.3 %

Current absolute State of Charge (SoC) of the main battery

Metrics updated only in state “Vehicle CHARGING”

Metric name

Example value

Description

xvu.c.eff.ecu [3]

92.3 %

Charger efficiency reported by the Charger ECU

xvu.c.loss.ecu [3]

0.620 kW

Charger power loss reported by the Charger ECU

xvu.c.ac.p

7.223 kW

Current charging power on AC side (calculated by ECU’s AC voltages and AC currents)

xvu.c.dc.p

6.500 kW

Current charging power on DC side (calculated by ECU’s DC voltages and DC currents)

xvu.c.eff.calc

90.0 %

Charger efficiency calculated by AC and DC power

xvu.c.loss.calc

0.733 kW

Charger power loss calculated by AC and DC power

xvu.c.ccs.u [4]

331.5V

CCS charger supplied voltage [V]

xvu.c.ccs.i [4]

62.2A

CCS Charger supplied current [A]

xvu.c.ccs.p [4]

20.6193kW

CCS Charger supplied power [kW]

Battery Capacity & SOH

e-Up Model

Total capacity

Usable capacity

Gen 1 (2016)

18.7 kWh / 50 Ah

16.4 kWh / 43.9 Ah (87.7%)

Gen 2 (2020)

36.8 kWh / 120 Ah

32.3 kWh / 105.3 Ah (87.7%)

There are currently two ways to get an estimation of the remaining capacity of the e-Up:

  1. By deriving a usable energy capacity from the MFD range estimation.

  2. By deriving a total coulomb capacity from the coulombs charged.

You can configure which of the estimations you want to use as the standard SOH from the “Features” web page or by setting the config parameter xvu bat.soh.source to either charge (default) or range.

Note

Consider the capacity estimations as experimental / preliminary. We need field data to optimize the readings. If you’d like to help us, see below.

The MFD range estimation seems to include some psychological factors with an SOC below 30%, so we only provide this and the derived capacity in two custom metrics. The capacity derivation is only calculated with SOC >= 30% (initial value needs SOC >= 70%), but if so is available immediately after switching the car on. This can serve as a quick first estimation, relate it to the usable capacity of your model.

The range based SOH is taken at it’s maximum peaks observed and copied if higher than the previously observed value or added smoothed if lower. So to take the next reading directly, set metric xvu.b.soh.range to 0 before switching on the car.

The charge coulomb based estimation provides a better estimation but will need a little more time to settle. Usable measurements need charges of at least 30% SOC, the more the better. Estimations are only calculated if a charge has exceeded 30% SOC, and results are smoothed over multiple charges to provide stable readings.

  • To get a rough capacity estimation, charge at least 30% normalized SOC difference.

  • To get a good capacity estimation, do at least three charges with each covering 60% or more normalized SOC difference.

Charging by CCS (DC) apparently yields higher results, especially on the energy estimations. We don’t know yet the reason or if we need to compensate this.

Note: the SOH (state of health) is currently coupled directly and solely to the calculated amp-hour capacity CAC.

To log your capacity data on a connected V2 server, do:

OVMS# config set xvu log.chargecap.storetime 30

30 is the number of days to keep the data, set to 0 to disable. The counters will be stored in table XVU-LOG-ChargeCap, with one entry every 2.4% absolute SOC difference. Resulting CAC/SOH updates will be logged in table XVU-LOG-ChargeCapSOH. You can also extract the data from your module log file by filtering lines matching ChargeCap.

Capacity and SOH metrics

Metric name

Example value

Description

xvu.b.soh.charge

99.23%

SOH based on charge energy sum

xvu.b.soh.range

98.89%

SOH based on MFD range estimation

xvu.b.cap.ah.abs

122.71Ah

Total coulomb capacity estimation

xvu.b.cap.ah.norm

113.63Ah

Usable coulomb capacity estimation

xvu.b.cap.kwh.abs

39.1kWh

Total energy capacity estimation

xvu.b.cap.kwh.norm

36.21kWh

Usable energy capacity estimation

xvu.b.cap.kwh.range

32.8947kWh

Usable energy capacity estimation from MFD range

xvu.b.energy.range

18.5kWh

Current energy used by MFD range estimation

Provide Data to the Developers

To help us with optimizing the capacity estimations, first of all enable file logging if not already enabled. Then enable extended polling and logging before a charge by…:

OVMS# config set xvu dc_interval 30
OVMS# log level verbose v-vweup

After the charge, disable the extended polling and logging:

OVMS# config set xvu dc_interval 0
OVMS# log level info v-vweup

Then download all log files written during the charge (archived and current), zip them and mail the zip to Michael Balzer <dexter@dexters-web.de>. The log data will only be used for technical analysis and deleted afterwards.

Note: if you forgot enabling the local log but still have chargecap logs on the server: these can help as well.

Thanks!

Configuration Variables

The main configuration variables can be set through the web configuration page:

  • VW e-Up → Features

Some configuration variables are kept “under the hood”, as these will normally not need to be changed, except for some special use cases or for development / debugging.

Configuration variables can be listed using command config list xvu and changed using command config set xvu <variable> <value>.

Configuration variable

Default value

Description

bat.soh.source

charge

SOH source – see above

bms.autoreset

no

Reset BMS statistics on use phase transitions

canwrite

no

Allow CAN write access

cell_interval_awk

60

BMS cell query interval in awake state [s]

cell_interval_chg

60

BMS cell query interval in charge state [s]

cell_interval_drv

15

BMS cell query interval in drive state [s]

con_obd

yes

Enable OBDII connection

con_t26

yes

Enable T26 connection

ctp.maxpower

0

Charge time prediction: fallback power limit [kW] (0=none)

ctp.soclimit

80

Charge time prediction: fallback SOC limit [%]

dc_interval

0

Development: additional DC charge PID query interval [s] (0=off)

log.chargecap.cpstep

24

Charge capacity: checkpoint interval [1/10%]

log.chargecap.minvalid

272

Charge capacity: min SOC hub for SOH change [1/10%]

log.chargecap.storetime

0

Charge capacity: server log archive time [days] (0=off)

modelyear

2012

Vehicle model year

notify.charge.start.delay

24

Charge start notification delay [s] [5]

Shell Commands

  • xvu polling <status|pause|continue> – control OBD2 polling

    The OBD2 polling is normally continuously active as long as the vehicle module is loaded. To free the CAN bus from this load during an extended OBD2 diagnostics or modification (coding / adaptation) session, you can temporarily pause the polling using this command.

    There is no time limit for a pause, keep in mind you need to explicitly continue the polling when you’re done. During a polling pause, no vehicle state changes can be detected.

Custom Status Page for Web UI

Note

This plugin is obsolete, use the standard page VW e-Up → Charging Metrics instead. We keep the source here as a base for user customization.

The easiest way to display custom metrics is using the Web Plugins feature of OVMS (see Installing Web Plugins).

This page plugin content shows the metrics in a compact form which can be displayed on a phone in landscape mode on the dashboard of the car. Best approach is to connect the phone directly to the OVMS AP-WiFi and access the web UI via the static IP (192.168.4.1) of OVMS.

../../../_images/data.png
<div class="panel panel-primary">
  <div class="panel-heading">VW eUp</div>
  <div class="panel-body">

  <hr/>

  <div class="receiver">
    <div class="clearfix">
    <div class="metric progress" data-metric="v.b.soc" data-prec="2">
      <div class="progress-bar value-low text-left" role="progressbar"
      aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%">
      <div>
        <span class="label">SoC</span>
        <span class="value">?</span>
        <span class="unit">%</span>
      </div>
      </div>
    </div>
    <div class="metric progress" data-metric="xvu.b.soc" data-prec="2">
      <div class="progress-bar progress-bar-info value-low text-left" role="progressbar"
      aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%">
      <div>
        <span class="label">SoC (absolute)</span>
        <span class="value">?</span>
        <span class="unit">%</span>
      </div>
      </div>
    </div>
    </div>
    <div class="clearfix">
    <div class="metric number" data-metric="v.b.energy.used.total" data-prec="3">
      <span class="label">TOTALS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used</span>
      <span class="value">?</span>
      <span class="unit">kWh</span>
    </div>
    <div class="metric number" data-metric="v.b.energy.recd.total" data-prec="3">
      <span class="label">Charged</span>
      <span class="value">?</span>
      <span class="unit">kWh</span>
    </div>
    <div class="metric number" data-metric="v.p.odometer" data-prec="0">
      <span class="label">Distance</span>
      <span class="value">?</span>
      <span class="unit">km</span>
    </div>
    </div>

    <h4>Battery</h4>

    <div class="clearfix">
    <div class="metric progress" data-metric="v.b.voltage" data-prec="1">
      <div class="progress-bar value-low text-left" role="progressbar"
      aria-valuenow="0" aria-valuemin="300" aria-valuemax="350" style="width:0%">
      <div>
        <span class="label">Voltage</span>
        <span class="value">?</span>
        <span class="unit">V</span>
      </div>
      </div>
    </div>
    <div class="metric progress" data-metric="v.b.current" data-prec="1">
      <div class="progress-bar progress-bar-danger value-low text-left" role="progressbar"
      aria-valuenow="0" aria-valuemin="-200" aria-valuemax="200" style="width:0%">
      <div>
        <span class="label">Current</span>
        <span class="value">?</span>
        <span class="unit">A</span>
      </div>
      </div>
    </div>
    <div class="metric progress" data-metric="v.b.power" data-prec="3">
      <div class="progress-bar progress-bar-warning value-low text-left" role="progressbar"
      aria-valuenow="0" aria-valuemin="-70" aria-valuemax="70" style="width:0%">
      <div>
        <span class="label">Power</span>
        <span class="value">?</span>
        <span class="unit">kW</span>
      </div>
      </div>
    </div>
    </div>
    <div class="clearfix">
    <div class="metric number" data-metric="v.b.temp" data-prec="1">
      <span class="label">Temp</span>
      <span class="value">?</span>
      <span class="unit">°C</span>
    </div>
    <div class="metric number" data-metric="xvu.b.cell.delta" data-prec="3">
      <span class="label">Cell delta</span>
      <span class="value">?</span>
      <span class="unit">V</span>
    </div>
    </div>

    <h4>Charger</h4>

    <div class="clearfix">
    <div class="metric progress" data-metric="xvu.c.ac.p" data-prec="3">
      <div class="progress-bar progress-bar-warning value-low text-left" role="progressbar"
      aria-valuenow="0" aria-valuemin="0" aria-valuemax="8" style="width:0%">
      <div>
        <span class="label">AC Power</span>
        <span class="value">?</span>
        <span class="unit">kW</span>
      </div>
      </div>
    </div>
    <div class="metric progress" data-metric="xvu.c.dc.p" data-prec="3">
      <div class="progress-bar progress-bar-warning value-low text-left" role="progressbar"
      aria-valuenow="0" aria-valuemin="0" aria-valuemax="8" style="width:0%">
      <div>
        <span class="label">DC Power</span>
        <span class="value">?</span>
        <span class="unit">kW</span>
      </div>
      </div>
    </div>
    </div>
    <div class="clearfix">
    <div class="metric number" data-metric="v.c.efficiency" data-prec="1">
      <span class="label">Efficiency (total)</span>
      <span class="value">?</span>
      <span class="unit">%</span>
    </div>
    <div class="metric number" data-metric="xvu.c.eff.calc" data-prec="1">
      <span class="label">Efficiency (charger)</span>
      <span class="value">?</span>
      <span class="unit">%</span>
    </div>
    <div class="metric number" data-metric="xvu.c.loss.calc" data-prec="3">
      <span class="label">Loss (charger)</span>
      <span class="value">?</span>
      <span class="unit">kW</span>
    </div>
    </div>
  </div>
  </div>
</div>