EVBox protocol documentation
Project – | Article by Maarten Tromp | Published , updated | 3265 words.
Introduction
This page documents the internal "Max" communications protocol, used between EVBox modules in the PublicLine, HomeLine and Elvi chargers.
All information is collected from tests on my own charger, combined with whatever I could find on the internet. Background information on the project can be found on the project page. If you noticed any errors or have additional information, please let me know.
In this article:
The charger used for most of the documentation is an EVBox HomeLine G3, single phase, 32A, 7.4kW. ChargeBox model 471011.3, serial number 1917911, ChargePoint model EU 471046.2, serial number 1919129.
Other numbers on the box are: modem number EVB-P1919129, connector 1917911, serial number B19239404, article H1320-50082-EN, registration number EVB-P1919129, production date 13/06/2019.
Models, modules and software
G2 (generation 2) charger modules can be recognized by the blue 3-pin LED connector. G3 has a 4-pin connector. A stand-alone charger module has different firmware and no CP module.
PublicLine uses the same charger modules as HomeLine. BusinessLine uses different hardware, but might use the same protocol.
Elvi G4 combines both charger and CP modules into a single (non potted) board. There is a version with metering and cellular modem, and a version without.
G5+ stations, such as Livo and Liviqo, use entirely different hardware and software.
The EV-Box ChargeStaton Tool is a software / hardware bundle to configure your own ChargePoint modules. It only works with the supplied (proprietary) USB to RS-485 adapter.
The physical layer deals with byte-by-byte delivery over a physical medium.
Connectors are pluggable terminal blocks, 4 pins, by Phoenix Contact.
Charger modules have male MSTBVA 2,5/ 4-G-5,08 1x4 PCB header.
CP modules have a female ICV 2,5/ 4-G-5,08 1x4 PCB header.
pin | function
|
---|
1 | +12V
|
2 | RS-485 A
|
3 | RS-485 B
|
4 | GND
|
CP and charger module(s) communicate over an RS-485 bus. The bus is terminated on the CP module, but not on the charger module. On such a short bus this should not be a problem, and on a longer bus termination can be added at the last module. There is no bias. The bus is in multi master mode, so each module can transmit messages on the bus.
The CP module RS-485 driver uses 3V levels, while the charger module RS-485 driver uses 5V levels.
Serial baud rate is 38400bps 8N1, half-duplex.
Notes:
- EVBox supports a maximum of 20 charger modules + 1 CP module per bus.
- Maximum bus length is 1200m, using shielded twisted-pair cabling.
The data link layer deals with transferring data frames between modules across the physical layer, and detecting errors.
A frame exists of: start of frame marker, payload, checksum, parity, and end of frame marker.
Except the frame start and end markers, all values are ASCII strings, containing only numbers and capital letters.
Checksum and parity values are hex encoded. Example: frame bytes 0x3341 → ASCII string "3A" → value 0x3a (hex) = 58 (decimal).
The first byte in a frame is the start of frame marker. Anything before SoF is ignored.
Value: 0x02.
Next bytes are payload. Length is flexible, between 6 and 132 bytes.
Value: ASCII-encoded string, containing only numbers and capital letters. This is described in more detail in the network layer.
Next 2 bytes are payload checksum. This is the sum of all payload bytes, discarding overflow.
Value: 2 ASCII-encoded characters, forming a hex pair, resulting in a 1 byte value.
Example code:
checksum = sum(self._payload) % 256
checksum_enc = f"{checksum:02X}".encode("ascii")
Next 2 bytes are payload parity. This is XOR over all payload bytes.
Value: 2 ASCII-encoded characters, forming a hex pair, resulting in a 1 byte value.
Example code:
parity = 0
for payload_byte in self._payload:
parity = parity ^ payload_byte
parity_enc = f"{parity:02X}".encode("ascii")
The last 2 bytes of a frame are the end of frame marker.
Value: 0x03FF, but the Max protocol specification defines this as a single byte with value 0x03.
data (hex) | 02 | 38 30 30 31 32 31 | 32 43 | 30 41 | 03 FF
|
---|
function | SoF | payload | checksum | parity | EoF
|
---|
Notes:
- Frames with incorrect checksum or parity are ignored.
- Frames do not contain sequence numbers.
- Frames do not contain payload length.
- Shortest possible frame has a length of 13 bytes.
- Longest observed frame has a length of 145 bytes.
- Flow control is implemented as keeping the bus idle for at least 100ms between messages.
The network layer deals with addressing packets across the data link layer,
A packet (ASCII-decoded frame payload) exists of: destination address, source address, and application data.
The entire packet is a string, containing only numbers and capital letters.
Addresses are hex encoded. Example: string "3A" → address 0x3a (hex) = 58 (decimal).
The first 2 characters of a packet are packet destination address.
Value: hex pair, resulting in a 1 byte destination address.
Next 2 characters are packet source address.
Value: hex pair, resulting in a 1 byte source address.
The remaining characters are application data. This is described in more detail in the application layer.
Every module has unique address.
address | name | details
|
---|
00 | new modules | charger module before address assignment
|
01 | charger module | ChargeBox module
|
70 | unknown | observed with commands E1 and E4
|
80 | CP module | ChargePoint module (modem)
|
A0 | SmartGrid module | explained in Max protocol specification
|
BC | broadcast
|
FD | ChargeStation | configuration and management tool
|
packet (hex) | 80 | 01 | 21
|
---|
function | destination | source | application data
|
---|
The application layer is an abstraction layer that deals with process to process communication and depends on the network layer for transport,
Application data exists of: command and parameters.
The first 2 characters of application data are command. Some documentation refers to these as "action".
Value: hex pair, resulting in a 1 byte command.
Similar commands are grouped, indexes are 1-based. Commands 11-1F are initialization, 21-2F are initiated by charger, 31-3F are initiated by CP, 41-4F are hardware configuration, 61-6F are power management, E1-FF mostly deal with ChargeStation communication.
The remaining zero of more characters are parameters. Protocol Max documentation refers to these as "data".
Value: variable length and encoding, depending on the command. Most parameters are encoded as hex pair, but a few as string. Each command has a fixed number of parameters, with fixed encoding and length. The only way to know the correct parameter type and length is to know the protocol. Some string parameters are preceded by used length.
The first 2 or 4 bytes are usually state. Some universal states are AA00: ack, 0055: nack, 01: success.
When a parameter value is shorter than the predetermined length, it is padded with zeroes.
The number of parameter bytes sent is not included in the message. There is also no validation on the number of parameter bytes received. When too little parameter bytes are sent, the next bytes in the frame are interpreted as parameter bytes.
Application data procedures
Most communication follows the form: request - response, but there are a few exceptions.
Response messages have the same command byte as the request message, but (usually) different parameters. There is no way of knowing if an individual message is request or response without knowing the protocol. If multiple messages with the same command byte are sent, only the last one can be responded to.
When a response is required, but not received, the request is repeated every 2 seconds.
The first thing a charger module does after boot is request an address. All charger modules start at address 0x00, and send command 11 requests to the CP, containing their serial number. The CP then sends a response containing charger module serial number and assigned bus address. From that point, normal communication can start.
All decision making is done in the CP.
This is an example of command 23 (start metering) request parameters, sent from charger to CP.
0E01 2345 6789 ABCD EF00 0000 00FF 30F2
The first 2 bytes are hex-encoded length of charge card number: 0E
resulting in a length of 14 characters.
The next 22 bytes are a string, containing charge card number value, padded with zeroes: 0123456789ABCD00000000
, resulting in card number 0123456789ABCD.
Last 8 bytes are hex-encoded meter value: 00FF30F2
, resulting in raw value 1672421, resulting in a meter value of 16724.21kWh.
This is a list of all observed commands. Those are mostly understood and, mostly, safe to use.
Request: sent by charger (from address 00), 15 bytes.
byte | parameter | length | encoding
|
---|
0-6 | charger module serial number | 7 bytes | string
|
7-10 | firmware version | 4 bytes | hex
|
13-14 | hardware generation | 2 bytes | hex
|
Response: broadcast, 11 bytes.
byte | parameter | length | encoding
|
---|
0-6 | charger module serial number | 7 bytes | string
|
7-8 | new address | 2 bytes | hex
|
9-10 | protocol version | 2 bytes | hex
|
Example:
dst: 80 (CP)
src: 00 (new)
cmd: 11 request (register), length: 15
dat: 1917911 0125 00 03 (serial number: 1917911, firmware version: 0125, hardware generation: 03)
dst: BC (broadcast)
src: 80 (CP)
cmd: 11 response (register), length: 11
dat: 1917911 01 03 (serial number: 1917911, address: 01, gen: 03)
Notes:
- Requesting to register an address is the first thing a charger does after boot.
- No other messages are accepted by the charger until an address is assigned. Command 42 set address is accepted.
- I assume all modules initialize at address 00.
- Request without parameters results in CP sending a response with invalid checksum and parity, followed by command 13 (get meter info) request.
- Response does not need to be broadcast. Direct addressing can be used as well.
- No Response parameters can be left out, but setting last 2 bytes to 00 is accepted by charger.
- The only observed firmware version is 0125, the only observed hardware generation is 03
Command 13: Get meter info
Request: sent by CP, 0 bytes.
Response: 64 bytes.
byte | parameter | length | encoding
|
---|
0-3 | meter detected | 4 bytes | hex
|
22-23 | model name length | 2 bytes | hex
|
24-39 | model name value | 16 bytes | string
|
56-59 | mains frequency | 4 bytes | hex
|
Example:
dst: 01 (charger)
src: 80 (CP)
cmd: 13 request (get meter info), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 13 response (get meter info), length: 64
dat: AA00 0216 0000 0000 0000 000B ALD1 D5FS 00A0 0000 364D 3341 0000 0000 1388 2001 (model name: ALD1D5FS00A, mains frequency: 50.0Hz)
Notes:
- Value 0055 (nack) is treated as not received, so request is repeated.
Command 18: Request message
Request: sent by CP, 2 bytes.
byte | parameter | length | encoding
|
---|
0-1 | type | 2 bytes | hex
|
type | request
|
---|
01 | command 21 heartbeat
|
02 | command 26 state update
|
03 | command 26 state update
|
04 | nothing
|
Response: none.
Example:
dst: 01 (charger)
src: 80 (CP)
cmd: 18 request (request message), length: 2
dat: 02 ()
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger update), length: 132
dat: 0215 0000 0000 0012 AD00 FF30 F200 000A 2EB8 2F03 F078 0008 0008 00DC 6400 0000 0000 00E2 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 0384 1388 (charger: idle, meter value: 16724.21kWh, temperature: 22.0°C, session: 0, voltage: 226/0/0V, current: 0.0/0.0/0.0A, power factor: 1.0/0.0/0.0, current limit: 90.0A, frequency: 50.0Hz)
Notes:
- When no charger modules have been registered at CP, request is sent as broadcast. Otherwise direct addressing is used.
- The only observed value is 02. Other values are found by experimenting.
Command 1B: Connection state changed
Request: sent by CP as broadcast, 10 bytes.
Response: none.
Example:
dst: BC (broadcast)
src: 80 (CP)
cmd: 1B request (connection state changed), length: 10
dat: 0000 0384 00 ()
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 0215 0000 0000 0012 B000 FF30 F200 000A 2EB0 2F04 F078 0008 0008 0104 6400 0000 0000 00E2 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 0384 1388 (charger: idle, meter value: 16724.21kWh, temperature: 26.0°C, session: 0, voltage: 226/0/0V, current: 0.0/0.0/0.0A, power factor: 1.0/0.0/0.0, current limit: 90.0A, frequency: 50.0Hz)
Notes:
- Request is sent once CP has established backend connection.
- Request without parameters is accepted by charger.
- Request is followed by charger sending command 26 charger state update request.
Command 1E: Restart registration
Request: sent by CP as broadcast, 0 bytes.
Response: none.
Example:
dst: BC (broadcast)
src: 80 (CP)
cmd: 1E request (restart registration), length: 0
dst: 80 (CP)
src: 00 (new)
cmd: 11 request (register), length: 15
dat: 1917911 0125 00 03 (serial number: 1917911, firmware version: 0125, hardware generation: 03)
Notes:
- Request results in charger setting it's address to 00 and sending an command 11 register request. All settings are preserved.
- Request is the first message CP sends after boot.
- Request does not need to be broadcast. Direct addressing can be used as well.
Request: sent by charger, 0 bytes.
Response: 0 bytes.
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: 21 request (heartbeat), length: 0
dst: 01 (charger)
src: 80 (CP)
cmd: 21 response (heartbeat), length: 0
Notes:
- Request is sent at 16 minute interval.
Command 22: Authorize card
Request: sent by charger, 26 bytes.
byte | parameter | length | encoding
|
---|
0-1 | state | 2 bytes | hex
|
2-3 | card number length | 2 bytes | hex
|
4-25 | card number value | 22 bytes | string
|
Response: 30 bytes.
byte | parameter | length | encoding
|
---|
0-1 | state | 2 bytes | hex
|
2-3 | card number length | 2 bytes | hex
|
4-25 | card number value | 22 bytes | string
|
state | description
|
---|
00 | request
|
01 | access granted
|
03 | not connected to backend
|
12 | access denied
|
1D | invalid card number
|
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: 22 request (card authentication request), length: 26
dat: 000E xxxx xxxx xxxx xx00 0000 00 (authentication request, card number: xxxxxxxxxxxxxx)
dat: 0008 0000 00AS 0000 0000 0000 00 (authentication request, auto start)
dst: 01 (charger)
src: 80 (CP)
cmd: 22 response (card authentication request), length: 30
dat: 010E xxxx xxxx xxxx xx00 0000 00FF FF (access granted, card number: xxxxxxxxxxxxxx)
dat: 120E xxxx xxxx xxxx xx00 0000 00FF FF (access denied, card number: xxxxxxxxxxxxxx)
dat: 0300 0000 0000 0000 0000 0000 00FF FF (not connected to backend)
Notes:
- Request is sent after scanning RFID charge card or, when auto start is enabled, after plugging in EV.
- Auto start uses "card number" 000000AS.
- Response is followed by charger sending command 6A charging state.
Command 23: Metering start
Request: sent by charger, 32 bytes.
byte | parameter | length | encoding
|
---|
0-1 | card number length | 2 bytes | hex
|
2-24 | card number value | 22 bytes | string
|
2-31 | meter value | 8 bytes | string
|
Response: 18 bytes.
byte | parameter | length | encoding
|
---|
0-1 | state | 2 bytes | hex
|
2-9 | session id | 8 bytes | hex
|
10-17 | timestamp | 8 bytes | hex
|
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: 23 request (metering start), length: 32
dat: 0Exx xxxx xxxx xxxx 0000 0000 00FF 30F2 (card number: xxxxxxxxxxxxx, meter value: 16724.21kWh)
dst: 01 (charger)
src: 80 (CP)
cmd: 23 response (metering start), length: 18
dat: 0100 0000 002E 7C41 F5 (session: 0, timestamp: 2024-09-17 13:34:45)
# a few seconds later
dst: 01 (charger)
src: 80 (CP)
cmd: 23 response (metering start), length: 18
dat: 0100 C079 EA2E 7C41 F9 (session: 12614122, timestamp: 2024-09-17 13:34:49)
Notes:
- Request follows on CP sending command 6B start charging.
- Request without parameters is accepted by CP.
- Request gets two responses. The first response has Session id 0, in the second response it has a value.
- Omitting the second response is accepted by charger.
- Response is followed by charger sending a command 26 state update request.
Request: sent by charger, 50 bytes.
byte | parameter | length | encoding
|
---|
0-1 | card number length | 2 bytes | hex
|
2-23 | card number value | 22 bytes | string
|
24-31 | meter value | 8 bytes | hex
|
32-39 | session id | 8 bytes | hex
|
40-41 | state | 2 bytes | hex
|
42-49 | timestamp | 8 bytes | hex
|
Response: 2 bytes.
byte | parameter | length | encoding
|
---|
0-1 | state | 2 bytes | hex
|
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: 24 request (metering end), length: 50
dat: 0Exx xxxx xxxx xxxx 0000 0000 00FF 3156 00C0 79EA 392E 7C44 49 (card number: xxxxxxxxxxxxxx, meter value: 16724.31kWh, session: 12614122, timestamp: 2024-09-17 13:44:41)
dst: 01 (charger)
src: 80 (CP)
cmd: 24 response (metering end), length: 2
dat: 01 ()
Notes:
- Request is sent after unplugging EV.
- Request is sent after stopping session from charger (Harm Otten)
- Request without parameters is accepted by CP.
- Response without parameters is accepted by charger.
- Response results in charger sending command 6A charging state.
Command 26: Charger state update
Request: sent by charger, 132 bytes.
byte | parameter | length | encoding
|
---|
0-1 | state | 2 bytes | hex
|
2-3 | always same | 2 bytes | hex
|
4-7 | state1 | 4 bytes | hex
|
8-11 | state2 | 4 bytes | hex
|
12-15 | state3 | 4 bytes | hex
|
18-25 | meter | 8 bytes | hex
|
48-49 | state4 | 2 bytes | hex
|
52-55 | temperature | 4 bytes | hex
|
58-65 | session id | 8 bytes | hex
|
68-71 | voltage phase 1 | 4 bytes | hex
|
72-75 | voltage phase 2 | 4 bytes | hex
|
76-79 | voltage phase 3 | 4 bytes | hex
|
80-83 | current phase 1 | 4 bytes | hex
|
84-87 | current phase 2 | 4 bytes | hex
|
88-91 | current phase 3 | 4 bytes | hex
|
96-99 | power factor phase 1 | 4 bytes | hex
|
100-103 | power factor phase 2 | 4 bytes | hex
|
104-107 | power factor phase 3 | 4 bytes | hex
|
124-127 | current limit | 4 bytes | hex
|
128-131 | frequency | 4 bytes | hex
|
state | state1 | state2 | state3 | state4 | description
|
---|
02 | 0000 | 0000 | 0012 | 64 | idle
|
0A | | | | | error
|
47 | 0000 | 0000 | 2012 | 64 | starting (EV plugged in, or card authenticated, but not both)
|
48 | 0001 | 0401 | 2012 | 21 | charging
|
4A | 0000 | 0301 | 2012 | 0A | ready
|
4B | 0000 | 0001 | 2012 | 64 | finished (EV still plugged in)
|
States: 02 (idle) → 47 (starting) → 4A (ready) → 48 (charging) → 4A (ready) → 4B (finished) → 02 (idle)
Response: 16 bytes.
byte | parameter | length | encoding
|
---|
0-7 | session id | 8 bytes | hex
|
8-15 | timestamp | 8 bytes | hex
|
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4815 0001 0401 2012 A900 FF5B 180C 1C0C 2E98 17D4 2F2F 0010 000F 0136 2100 C23E 5901 00DE 0000 0000 0532 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 00C8 1388 (charger: charging, meter value: 16735.0kWh, temperature: 31.0°C, session: 12729945, voltage: 222/0/0V, current: 13.3/0.0/0.0A, power factor: 1.0/0.0/0.0, current limit: 20.0A, frequency: 50.0Hz)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 00C2 3E59 2E84 3391 (session: 12729945, timestamp: 2024-09-23 14:11:29)
Notes:
- Response timestamp is set to 0 when CP is not connected to backend.
- Response with session set to 0 is accepted by charger.
- There does not seem to be a difference between the command 26 message sent after EV plugged in, but not authenticated yet, and authenticated, but not plugged in yet.
- During charging session (from metering start to metering end) command 26 update is sent at a configurable interval.
Command 33: Get configuration
Request: sent by CP, 0 bytes.
Response: 74 bytes.
byte | parameter | length | encoding
|
---|
20-23 | command 26 interval (seconds) | 8 bytes | hex
|
36-37 | led brightness (percent) | 2 bytes | hex
|
54-55 | enable auto start | 2 bytes | hex
|
66-67 | allow remote start | 2 bytes | hex
|
Example:
dst: 01 (charger)
src: 80 (CP)
cmd: 33 request (get configuration), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 33 response (get configuration), length: 74
dat: 0000 003C 0000 0384 0000 0384 0300 0001 0100 1E01 0000 0000 0000 0000 0000 0000 0000 03E8 01 (led brightness: 30%, command 26 interval: 900s, auto start: 0, remote start: 0)
Command 34: Set configuration
Request: sent by CP, 86 bytes.
byte | parameter | length | encoding
|
---|
0-7 | mask | 8 bytes | hex
|
8-9 | led brightness (percent) | 2 bytes | hex
|
38-39 | enable auto start | 2 bytes | hex
|
58-65 | command 26 interval (seconds) | 8 bytes | hex
|
74-75 | allow remote start | 2 bytes | hex
|
Response: 4 bytes.
byte | parameter | length | encoding
|
---|
0-3 | ack | 4 bytes | hex
|
Example:
dst: 01 (charger)
src: 80 (CP)
cmd: 34 request (set configuration), length: 86
dat: 03A3 F781 1E03 0000 0101 0001 0000 0000 0000 0000 0000 0000 3C00 0003 8400 0003 8400 0000 0000 03E8 0100 00 (led brightness: 30%, command 26 interval: 900s, auto start: 0, remote start: 0)
dst: 80 (CP)
src: 01 (charger)
cmd: 34 response (set configuration), length: 4
dat: AA00 (ack)
Notes:
- I assume the mask is to indicate which of the many values have been changed, and which have not.
- When auto start is enabled, the RFID reader is disabled.
- Values that would probably be in there are: default charging delay, amount of connectors, led idle state, led idle time on, led idle time off, external current loss, smart charge pause, accept remote start, auto start, auto stop, auto stop when offline, EV reconnect charge, and some others.
- Response without parameters results in CP sending a command 33 request.
Command 68: Charging state
Request: sent by SmartGrid.
Notes:
- Explained in Max protocol specification.
Command 69: Charging state
Request: sent by SmartGrid.
Notes:
- Explained in Max protocol specification.
Command 6A: Charging state
Request: sent by charger, 4 bytes.
byte | parameter | length | encoding
|
---|
0-1 | state | 2 bytes | hex
|
2-3 | always same | 2 bytes | hex
|
state | description
|
---|
07 | unknown, mentioned by Harm Otten
|
80 | EV has unplugged
|
81 | charging started
|
A0 | charger idle
|
A7 | charging starting
|
C1 | finished
|
E7 | failed
|
States: A0 (idle) → A7 (starting) → 81 (started) → C1 (finished) → 80 (unplugged) → A0 (idle)
Response: 4 bytes.
byte | parameter | length | encoding
|
---|
0-3 | ack | 4 bytes | hex
|
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: 6A request (charging mode), length: 4
dat: A03C (state: charger idle)
dst: 01 (charger)
src: 80 (CP)
cmd: 6A response (charging mode), length: 4
dat: AA00 (ack)
Notes:
- Request without parameters is accepted by CP.
Command 6B: Set current limit
Request: sent by CP, 18 bytes.
byte | parameter | length | encoding
|
---|
0-1 | always same | 2 bytes | hex
|
2-5 | minimum current | 4 bytes | hex
|
6-9 | current limit phase 1 | 4 bytes | hex
|
10-13 | current limit phase 2 | 4 bytes | hex
|
14-17 | current limit phase 3 | 4 bytes | hex
|
Response: 0 bytes.
Example:
dst: 01 (charger)
src: 80 (CP)
cmd: 6B request (set current limit), length: 18
dat: 0100 3C00 A000 A000 A0 (current min: 6.0A, current limit: 16.0/16.0/16.0A)
dst: 80 (CP)
src: 01 (charger)
cmd: 6B response (set current limit), length: 0
Notes:
- Request is sent when charging has started or ended.
- Request follows on command 6A charging state.
- Response is followed by charger sending a command 23 metering start request.
- This command also acts as "start charging".
- There might be 3 current limits for 3 phases, but command 23 only returns a single one.
- Request without parameters is accepted by charger.
This is a list of commands found by experimenting. It is not always clear what those might do.
Command 1C: LED ring enable
Request: sent by CP as broadcast, 2 bytes.
byte | parameter | length | encoding
|
---|
0-1 | state | 2 bytes | hex
|
state | description
|
---|
00 | disable
|
01 | enable
|
Response: ??
Notes:
- Mentioned by Harm Otten
- LED ring dimming is possible using command 34 set configuration.
Request: sent by charger.
Response:
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: 2A request (unknown), length: 0
dst: 02 (unknown)
src: 80 (CP)
cmd: 2A response (unknown), length: 0
Request: sent by CP, from back office, 24 bytes.
byte | parameter | length | encoding
|
---|
0-1 | card number length | 2 bytes | hex
|
2-23 | card number value | 22 bytes | string
|
Response: 2 bytes.
byte | parameter | length | encoding
|
---|
0-1 | state | 2 byte | hex
|
state | description
|
---|
01 | success
|
23 | failed
|
Example:
dst: 01 (charger)
src: 80 (CP)
cmd: 31 request (remote start), length: 24
dat: 0Exx xxxx xxxx xxxx 0000 0000 (card number: xxxxxxxxxxxxxx)
dst: 80 (CP)
src: 01 (charger)
cmd: 31 response (remote start), length: 2
dat: 23 ()
Notes:
- Mentioned by Harm Otten
Request: sent by CP, from back office, 8 bytes.
byte | parameter | length | encoding
|
---|
0-7 | session id | 8 bytes | hex
|
Response: 2 bytes.
byte | parameter | length | encoding
|
---|
0-1 | state | 2 bytes | hex
|
state | description
|
---|
01 | success
|
23 | failed (already stopped)
|
Notes:
- Mentioned by Harm Otten
Request: sent by CP as broadcast, 2 bytes.
byte | parameter | length | encoding
|
---|
0-1 | state | 2 bytes | hex
|
Observed state values are 52 and 3F.
Response: none.
Example:
dst: BC (broadcast)
src: 80 (CP)
cmd: 35 request (reboot), length: 2
dat: 52 (unknown)
Notes:
- Mentioned by to Harm Otten.
- Does not work for me.
Request: sent by CP, 0 bytes.
Response: 2 bytes.
Example:
dst: 01 (charger)
src: 80 (CP)
cmd: 36 request (unknown 36), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 36 response (unknown 36), length: 2
dat: 23 ()
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 0215 0000 0100 0012 A000 FF75 4400 000A 2EB8 2F02 F078 0008 0008 00DC 6400 0000 0000 00E4 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 0384 1388 (charger: idle, meter value: 16741.7kWh, temperature: 22.0°C, session: 0, voltage: 228/0/0V, current: 0.0/0.0/0.0A, power factor: 1.0/0.0/0.0, current limit: 90.0A, frequency: 50.0Hz)
Notes:
- Response is followed by charger sending a command 26 state update.
Request: sent by CP, 0 bytes.
Response: 2 bytes.
Example:
dst: 01 (charger)
src: 80 (CP)
cmd: 37 request (unknown 37), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 37 response (unknown 37), length: 2
dat: 16 (unknown)
Request: sent by CP, 0 bytes.
Response: 2 bytes.
Example:
dst: 01 (charger)
src: 80 (CP)
cmd: 38 unknown (unknown), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 38 unknown (unknown), length: 2
dat: 02 (unknown)
Request: sent by both CP and charger, 0 bytes.
Response: either 54 or 2 bytes.
Example sent to charger:
dst: 01 (charger)
src: 80 (CP)
cmd: 41 unknown (unknown 41), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 41 unknown (unknown 41), length: 54
dat: 0100 0008 0008 2EBA 129A 08FC F87F 00BE 0375 4430 4203 3030 3032 45 ()
dat: 0100 0008 0008 2EB8 12A0 2F03 F078 00DC 0375 4430 4203 3237 4503 30 ()
Example sent to CP:
dst: 80 (CP)
src: 01 (charger)
cmd: 41 unknown (unknown), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: 41 unknown (unknown), length: 2
dat: 37 ()
Notes:
- This is probably another system info / hardware info command.
- If request is sent by charger, CP sends request to ChargeStation.
Command 42: Set serial number
Request: sent by CP, 7 bytes.
byte | parameter | length | encoding
|
---|
0-6 | charger module serial number | 7 bytes | string
|
Response: 7 bytes.
byte | parameter | length | encoding
|
---|
0-6 | charger module serial number | 7 bytes | string
|
Example:
dst: BC (broadcast)
src: 80 (CP)
cmd: 42 request (set serial number), length: 7
dat: 1917 911 (serial number: 1917911)
dst: 80 (CP)
src: 00 (new)
cmd: 42 response (set serial number), length: 7
dat: 1917 911 (serial number: 1917911)
Notes:
- Request without parameters is accepted by charger. This results in setting serial number 2F0F\x0300 (which is request checksum, parity, EoF, padded with 0).
- Request can be sent during address negotiation.
- Response is sent from address 00, but charger keeps its address.
Command 43: Hardware info
Request: sent by ChargeStation, 0 bytes.
Response: 18 bytes.
byte | parameter | length | encoding
|
---|
0-1 | hardware generation | 2 bytes | hex
|
2-5 | firmware version | 4 bytes | hex
|
Example:
dst: 01 (charger)
src: 80 (CP)
cmd: 43 request (hardware info), length: 0
dst: FD (ChargeStation)
src: 01 (charger)
cmd: 43 response (hardware info), length: 18
dat: 03 0125 01 004C 0D04 2C (hardware generation: 03, firmware version: 0125)
Notes:
- Response is sent to ChargeStation, regardless of source address.
- Remaining values might include number of phases, type of relay, type of cable, etc.
Command 65: Set meter update interval
Request: sent by charger, 4 bytes.
byte | parameter | length | encoding
|
---|
0-3 | interval | 4 bytes | hex
|
Response: none
Example:
dst: 01 (charger)
src: 80 (CP)
cmd: 65 request (set meter update interval), length: 4
dat: 003C (interval: 60s)
dst: 80 (CP)
src: 01 (charger)
cmd: 66 request (meter value), length: 44
dat: 00E6 0000 0000 0000 0000 0000 03E8 0000 0000 00FF 7544 (voltage: 230/0/0V, current: 0.0/0.0/0.0A, power factor: 1.0/0.0/0.0, meter value: 16741.7kWh)
Notes:
- Value 0 disables update interval.
Request: sent by charger, 44 bytes.
byte | parameter | length | encoding
|
---|
0-3 | voltage phase 1 | 4 bytes | hex
|
4-7 | voltage phase 2 | 4 bytes | hex
|
8-11 | voltage phase 3 | 4 bytes | hex
|
12-15 | current phase 1 | 4 bytes | hex
|
16-19 | current phase 2 | 4 bytes | hex
|
20-23 | current phase 3 | 4 bytes | hex
|
24-27 | power factor phase 1 | 4 bytes | hex
|
28-31 | power factor phase 2 | 4 bytes | hex
|
32-35 | power factor phase 3 | 4 bytes | hex
|
36-43 | meter value | 8 bytes | hex
|
Response: 0 bytes.
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: 66 request (meter value), length: 44
dat: 00E6 0000 0000 0000 0000 0000 03E8 0000 0000 00FF 7544 (voltage: 230/0/0V, current: 0.0/0.0/0.0A, power factor: 1.0/0.0/0.0, meter value: 16741.7kWh)
dst: 01 (charger)
src: 80 (CP)
cmd: 66 response (meter value), length: 0
Request: sent by CP.
Response: 2 bytes.
Example:
dst: 01 (charger)
src: 80 (CP)
cmd: 6C request (unknown 6C), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 6C response (unknown 6C), length: 2
dat: 23 ()
Request: sent by CP.
Response: none
Example:
dst: 01 (charger)
src: 80 (CP)
cmd: E0 unknown (unknown), length: 4
dat: 0100 (unknown)
Request: sent by CP.
Response:
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: E1 response (unknown), length: 0
dst: 70 (unknown)
src: 80 (CP)
cmd: E6 request (unknown), length: 0
Notes:
- Response is followed by CP sending command E6 request to address 70, regardless of source address.
Request: sent by charger.
Response: none.
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: E3 request (reboot), length: 0
dst: BC (broadcast)
src: 80 (CP)
cmd: 1E request (restart registration), length: 0
Notes:
- Request results in CP rebooting.
Request: sent by address 70.
Response: 4 bytes.
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: E4 request (unknown), length: 0
dst: 70 (unknown)
src: 80 (CP)
cmd: E4 response (unknown), length: 4
dat: AA00 (ack)
Notes:
- Response is sent to address 70, regardless of source address.
Request: sent by CP.
Response:
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: E1 response (unknown), length: 0
dst: 70 (unknown)
src: 80 (CP)
cmd: E6 request (unknown), length: 0
Notes:
- Request follows on E1 response.
Request: sent by charger.
Response: 8 bytes.
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: EB request (unknown), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: EB response (unknown), length: 8
dat: 0134 0125 (unknown)
dst: BC (broadcast)
src: 80 (CP)
cmd: 1B request (connection state changed), length: 10
dat: 0000 0384 00 ()
Notes:
- Response is sent to ChargeStation, regardless of source address.
- Response is followed by CP broadcasting command 1B connection state changed request.
Request: sent by charger.
Response:
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: EC request (unknown), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: EC response (unknown), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: ED request (unknown), length: 2
dat: 08 (unknown)
Notes:
- Response is sent to ChargeStation, regardless of source address.
- Response is followed by CP sending command ED request to ChargeStation.
Request: sent by CP.
Response:
Example:
dst: FD (ChargeStation)
src: 80 (CP)
cmd: ED request (unknown), length: 2
dat: 08 (unknown)
Notes:
- Request follows on command EC response.
- Request is sent to ChargeStation.
Request: sent by ChargeStation.
Response: 102 bytes.
Example initiated by charger:
dst: 80 (CP)
src: 01 (charger)
cmd: F0 request (unknown), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: F0 response (unknown), length: 102
dat: 407C 30FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FF ()
Example initiated by CP:
dst: 01 (charger)
src: 80 (CP)
cmd: F0 request (unknown), length: 0
dst: FD (ChargeStation)
src: 01 (charger)
cmd: F0 response (unknown), length: 102
dat: 3F7F 30FF 2ABF 66E9 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FF (unknown)
Notes:
- Response is sent to ChargeStation, regardless of source address.
Request: sent by ChargeStation.
Response: 6 bytes.
Example initiated by CP:
dst: 01 (charger)
src: 80 (CP)
cmd: F1 request (unknown), length: 0
dst: FD (ChargeStation)
src: 01 (charger)
cmd: F1 response (unknown), length: 6
dat: 407E 30 (unknown)
Example initiated by charger:
dst: 80 (CP)
src: 01 (charger)
cmd: F1 request (unknown F1), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: F1 response (unknown F1), length: 6
dat: 417D 30 ()
Notes:
- Response is sent to ChargeStation, regardless of source address.
Request: sent by ChargeStation.
Response:
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: F2 request (unknown), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: F2 response (unknown), length: 0
Notes:
- Response is sent to ChargeStation, regardless of source address.
Request: sent by ChargeStation.
Response: 10 bytes.
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: F3 request (unknown), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: F3 response (unknown), length: 10
dat: 437F 3000 00 (unknown)
Notes:
- Response is sent to ChargeStation, regardless of source address.
Request: sent by ChargeStation.
Response: 10 bytes.
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: F4 request (unknown), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: F4 response (unknown), length: 10
dat: 4478 3000 00 (unknown)
Notes:
- Response is sent to ChargeStation, regardless of source address.
Request: sent by ChargeStation.
Response:
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: F5 response (unknown), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: F6 request (unknown), length: 0
Notes:
- Response is followed by CP sending command F6 request to ChargeStation.
Request: sent by ChargeStation.
Response: none.
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: F6 request (reboot), length: 0
dst: BC (broadcast)
src: 80 (CP)
cmd: 1E request (restart registration), length: 0
Notes:
- Request follows on command F5 response.
- Request results in CP rebooting.
Request: sent by ChargeStation.
Response:
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: F7 request (unknown), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: F7 response (unknown), length: 0
Notes:
- Response is sent to ChargeStation, regardless of source address.
Request: sent by ChargeStation.
Response: 122 bytes.
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: F8 request (unknown), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: F8 response (unknown), length: 122
dat: 4874 330D 38FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FF (unknown)
Notes:
- Response is sent to ChargeStation, regardless of source address.
Request: sent by ChargeStation.
Response: 10 bytes.
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: F9 request (unknown), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: F9 response (unknown), length: 10
dat: 4975 330D 38 (unknown)
Notes:
- Response is sent to ChargeStation, regardless of source address.
Request: sent by ChargeStation.
Response:
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: FA request (unknown), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: FA response (unknown), length: 0
Notes:
- Response is sent to ChargeStation, regardless of source address.
Request: sent by ChargeStation.
Response:
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: FB request (unknown), length: 0
dst: FD (ChargeStation)
src: 80 (CP)
cmd: FB response (unknown), length: 0
dst: BC (broadcast)
src: 80 (CP)
cmd: 35 request (reboot), length: 2
dat: 52 (unknown)
Notes:
- Response is sent to ChargeStation, regardless of source address.
- Request results in CP broadcasting command 35 (reboot) request.
Request: sent by ChargeStation.
Response: none.
Example:
dst: 80 (CP)
src: 01 (charger)
cmd: FD request (unknown), length: 0
dst: BC (broadcast)
src: 80 (CP)
cmd: 1E request (restart registration), length: 0
Notes:
- Request results in CP rebooting.
Here are 2 logs, one from boot and one from from a charging session.
dst: BC (broadcast)
src: 80 (CP)
cmd: 1E request (restart registration), length: 0
dst: 80 (CP)
src: 00 (new)
cmd: 11 request (register), length: 15
dat: 1917911 0125 00 03 (serial number: 1917911, firmware version: 0125, hardware generation: 03)
dst: BC (broadcast)
src: 80 (CP)
cmd: 11 request (register), length: 11
dat: 1917 9110 103 (serial number: 1917911, address: 01, gen: 03)
dst: 01 (charger)
src: 80 (CP)
cmd: 1B request (connection state changed), length: 10
dat: 0000 0384 00 ()
dst: 80 (CP)
src: 01 (charger)
cmd: 6A request (charging mode), length: 4
dat: A000 (state: charger idle)
dst: 01 (charger)
src: 80 (CP)
cmd: 6A response (charging mode), length: 4
dat: AA00 (ack)
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 0215 0000 0000 0012 AD00 FF30 F200 000A 2EB8 2F03 F078 0008 0008 00DC 6400 0000 0000 00E2 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 0384 1388 (charger: idle, meter value: 16724.21kWh, temperature: 22.0°C, session: 0, voltage: 226/0/0V, current: 0.0/0.0/0.0A, power factor: 1.0/0.0/0.0, current limit: 90.0A, frequency: 50.0Hz)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 0000 0000 0000 0000 (not connected to backend)
dst: 01 (charger)
src: 80 (CP)
cmd: 13 request (get meter info), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 13 response (get meter info), length: 64
dat: AA00 0216 0000 0000 0000 000B ALD1 D5FS 00A0 0000 364D 3341 0000 0000 1388 2001 (model name: ALD1D5FS00A, mains frequency: 50.0Hz)
dst: 01 (charger)
src: 80 (CP)
cmd: 33 request (get configuration), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 33 response (get configuration), length: 74
dat: 0000 003C 0000 0384 0000 0384 0300 0001 0100 1E01 0000 0000 0000 0000 0000 0000 0000 03E8 01 (led brightness: 30%, command 26 interval: 900s, auto start: 0, remote start: 0)
dst: 01 (charger)
src: 80 (CP)
cmd: 34 request (set configuration), length: 86
dat: 03A3 F781 1E03 0000 0101 0001 0000 0000 0000 0000 0000 0000 3C00 0003 8400 0003 8400 0000 0000 03E8 0100 00 (led brightness: 30%, command 26 interval: 900s, auto start: 0, remote start: 0)
dst: 80 (CP)
src: 01 (charger)
cmd: 34 response (set configuration), length: 4
dat: AA00 ()
# CP connected to backend
dst: BC (broadcast)
src: 80 (CP)
cmd: 1B request (connection state changed), length: 10
dat: 0000 0384 00 ()
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 0215 0000 0000 0012 A800 FF30 F200 000A 2EB0 2F04 F078 0008 0008 0104 6400 0000 0000 00E1 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 0384 1388 (charger: idle, meter: 16724.21kWh, temperature: 26.0°C, session: 0, voltage: 225V, current: 0.0A, limit: 90.0A)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 0000 0000 2DF4 7A2C (session: 0, timestamp: 2024-06-06 13:46:20)
dst: 01 (charger)
src: 80 (CP)
cmd: 18 request (request message), length: 2
dat: 02 ()
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 0215 0000 0000 0012 A800 FF30 F200 000A 2EB0 2F04 F078 0008 0008 0104 6400 0000 0000 00DE 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 0384 1388 (charger: idle, meter: 16724.21kWh, temperature: 26.0°C, session: 0, voltage: 222V, current: 0.0A, limit: 90.0A)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 0000 0000 2DF4 7A37 (session: 0, timestamp: 2024-06-06 13:46:31)
# plug in EV
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4715 0000 0000 2012 AA00 FF31 5600 000B 2E91 234C F080 0010 000D 0136 6400 0000 0000 00E2 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 0384 1388 (charger: starting, meter: 16724.31kWh, temperature: 31.0°C, session: 0, voltage: 226V, current: 0.0A, limit: 90.0A)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 0000 0000 2E80 3F5E (session: 0, timestamp: 2024-09-20 14:12:46)
# scan fob
dst: 80 (CP)
src: 01 (charger)
cmd: 22 request (card authentication request), length: 26
dat: 000E xxxx xxxx xxxx xxxx xxxx xx (authentication request, card: xxxxxxxxxxxxxxxxxxxxxx)
dst: 01 (charger)
src: 80 (CP)
cmd: 22 response (card authentication request), length: 30
dat: 010E xxxx xxxx xxxx xxxx xxxx xxFF FF (authenticated, card: xxxxxxxxxxxxxxxxxxxxxx)
dst: 80 (CP)
src: 01 (charger)
cmd: 6A request (charging mode), length: 4
dat: A73C (state: charger starting)
dst: 01 (charger)
src: 80 (CP)
cmd: 6A response (charging mode), length: 4
dat: AA00 (ack)
dst: 01 (charger)
src: 80 (CP)
cmd: 6B request (set current limit), length: 18
dat: 0100 3C00 3C00 3C00 3C (current limit: 6.0A)
dst: 80 (CP)
src: 01 (charger)
cmd: 6B response (set current limit), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 23 request (metering start), length: 32
dat: 0Exx xxxx xxxx xxxx xxxx xxxx 00FF 3156 (card: xxxxxxxxxxxxxxxxxxxxxx, meter: 16724.31kWh)
dst: 01 (charger)
src: 80 (CP)
cmd: 23 response (metering start), length: 18
dat: 0100 0000 002E 803F 76 (session: 0, timestamp: 2024-09-20 14:13:10)
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4A15 0000 0301 2012 A800 FF31 5600 000D 2E9F 0816 2F66 0010 000E 0136 0A00 0000 0000 00E0 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 003C 1388 (charger: ready, meter: 16724.31kWh, temperature: 31.0°C, session: 0, voltage: 224V, current: 0.0A, limit: 6.0A)
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4A15 0000 0301 2012 A800 FF31 5600 000E 2EA0 012C 2F68 0010 0010 0136 0A00 0000 0000 00E0 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 003C 1388 (charger: ready, meter: 16724.31kWh, temperature: 31.0°C, session: 0, voltage: 224V, current: 0.0A, limit: 6.0A)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 0000 0000 2E80 3F79 (session: 0, timestamp: 2024-09-20 14:13:13)
dst: 01 (charger)
src: 80 (CP)
cmd: 23 response (metering start), length: 18
dat: 0100 C178 1F2E 803F 7A (session: 12679199, timestamp: 2024-09-20 14:13:14)
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4A15 0000 0301 2012 A800 FF31 5600 000B 2E90 234C F0BC 0010 0010 0136 0A00 C178 1F00 00E1 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 003C 1388 (charger: ready, meter: 16724.31kWh, temperature: 31.0°C, session: 12679199, voltage: 225V, current: 0.0A, limit: 6.0A)
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4A15 0000 0301 2012 A800 FF31 5600 000B 2E9D 2184 2F58 0010 0010 0136 0A00 C178 1F00 00E1 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 003C 1388 (charger: ready, meter: 16724.31kWh, temperature: 31.0°C, session: 12679199, voltage: 225V, current: 0.0A, limit: 6.0A)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 00C1 781F 2E80 3F7B (session: 12679199, timestamp: 2024-09-20 14:13:15)
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4815 0001 0401 2012 A800 FF31 5600 000C 2E98 1709 2F58 0010 0010 0136 0A00 C178 1F00 00E1 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 003C 1388 (charger: charging, meter: 16724.31kWh, temperature: 31.0°C, session: 12679199, voltage: 225V, current: 0.0A, limit: 6.0A)
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4815 0001 0401 2012 A900 FF31 5600 000C 2E98 1708 2F58 0010 000F 0136 0A00 C178 1F00 00E1 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 003C 1388 (charger: charging, meter: 16724.31kWh, temperature: 31.0°C, session: 12679199, voltage: 225V, current: 0.0A, limit: 6.0A)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 00C1 781F 2E80 3F7E (session: 12679199, timestamp: 2024-09-20 14:13:18)
dst: 80 (CP)
src: 01 (charger)
cmd: 6A request (charging mode), length: 4
dat: A73C (state: charger starting)
dst: 01 (charger)
src: 80 (CP)
cmd: 6A response (charging mode), length: 4
dat: AA00 (ack)
dst: 01 (charger)
src: 80 (CP)
cmd: 6B request (set current limit), length: 18
dat: 0100 3C00 3C00 3C00 3C (current limit: 6.0A)
dst: 80 (CP)
src: 01 (charger)
cmd: 6B response (set current limit), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 6A request (charging mode), length: 4
dat: 813C (state: charging started)
dst: 01 (charger)
src: 80 (CP)
cmd: 6A response (charging mode), length: 4
dat: AA00 (ack)
dst: 01 (charger)
src: 80 (CP)
cmd: 6B request (set current limit), length: 18
dat: 0100 3C00 C800 C800 C8 (current limit: 20.0A)
dst: 80 (CP)
src: 01 (charger)
cmd: 6B response (set current limit), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4815 0001 0401 2012 AB00 FF34 080B C20C 2E97 17D6 2F31 0010 000F 0140 2100 C178 1F01 00DD 0000 0000 0514 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 00C8 1388 (charger: charging, meter: 16725.0kWh, temperature: 32.0°C, session: 12679199, voltage: 221V, current: 13.0A, limit: 20.0A)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 00C1 781F 2E80 4304 (session: 12679199, timestamp: 2024-09-20 14:28:20)
dst: 80 (CP)
src: 01 (charger)
cmd: 21 request (heartbeat), length: 0
dst: 01 (charger)
src: 80 (CP)
cmd: 21 response (heartbeat), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4815 0001 0401 2012 AF00 FF36 B00A 820C 2E92 17D4 2F38 0010 0010 0140 2100 C178 1F01 00DD 0000 0000 0488 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 00C8 1388 (charger: charging, meter: 16725.68kWh, temperature: 32.0°C, session: 12679199, voltage: 221V, current: 11.6A, limit: 20.0A)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 00C1 781F 2E80 4688 (session: 12679199, timestamp: 2024-09-20 14:43:20)
dst: 80 (CP)
src: 01 (charger)
cmd: 21 request (heartbeat), length: 0
dst: 01 (charger)
src: 80 (CP)
cmd: 21 response (heartbeat), length: 0
(...)
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4A15 0000 0301 2012 AF00 FF58 4804 240B 2E98 22C5 2F29 0010 000F 0140 2100 C178 1F00 00E1 0000 0000 01CC 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 00C8 1388 (charger: ready, meter: 16734.28kWh, temperature: 32.0°C, session: 12679199, voltage: 225V, current: 4.6A, limit: 20.0A)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 00C1 781F 2E80 768F (session: 12679199, timestamp: 2024-09-20 18:08:15)
# charging finished
dst: 80 (CP)
src: 01 (charger)
cmd: 6A request (charging mode), length: 4
dat: C13C (state: charger finished)
dst: 01 (charger)
src: 80 (CP)
cmd: 6A response (charging mode), length: 4
dat: AA00 (ack)
dst: 01 (charger)
src: 80 (CP)
cmd: 6B request (set current limit), length: 18
dat: 0100 3C00 C800 C800 C8 (current limit: 20.0A)
dst: 80 (CP)
src: 01 (charger)
cmd: 6B response (set current limit), length: 0
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4A15 0000 0301 2012 A800 FF58 4800 000B 2E98 22C8 2F23 0010 0010 0136 2100 C178 1F01 00E6 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 00C8 1388 (charger: ready, meter: 16734.28kWh, temperature: 31.0°C, session: 12679199, voltage: 230V, current: 0.0A, limit: 20.0A)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 00C1 781F 2E80 7A13 (session: 12679199, timestamp: 2024-09-20 18:23:15)
dst: 80 (CP)
src: 01 (charger)
cmd: 21 request (heartbeat), length: 0
dst: 01 (charger)
src: 80 (CP)
cmd: 21 response (heartbeat), length: 0
# unplug EV
dst: 80 (CP)
src: 01 (charger)
cmd: 6A request (charging mode), length: 4
dat: 803C (state: EV has unplugged)
dst: 01 (charger)
src: 80 (CP)
cmd: 6A response (charging mode), length: 4
dat: AA00 (ack)
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4B15 0000 0001 2012 A800 FF58 4800 000A 2EA0 2EFC F350 000F 0010 0136 6400 C178 1F00 00E0 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 0384 1388 (charger: finished, meter: 16734.28kWh, temperature: 31.0°C, session: 12679199, voltage: 224V, current: 0.0A, limit: 90.0A)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 00C1 781F 2E80 7BA9 (session: 12679199, timestamp: 2024-09-20 18:30:01)
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 4B15 0000 0001 2012 A800 FF58 4800 000A 2EA0 2EFC F078 000F 000D 0136 6400 C178 1F00 00E0 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 0384 1388 (charger: finished, meter: 16734.28kWh, temperature: 31.0°C, session: 12679199, voltage: 224V, current: 0.0A, limit: 90.0A)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 00C1 781F 2E80 7BB3 (session: 12679199, timestamp: 2024-09-20 18:30:11)
dst: 80 (CP)
src: 01 (charger)
cmd: 24 request (metering end), length: 50
dat: 0Exx xxxx xxxx xxxx xxxx xxxx 00FF 5848 00C1 781F 392E 807B B3 (card: xxxxxxxxxxxxxxxxxxxxxx, meter: 16734.28kWh, session: 12679199, timestamp: 2024-09-20 18:30:11)
dst: 01 (charger)
src: 80 (CP)
cmd: 24 response (metering end), length: 2
dat: 01 ()
dst: 80 (CP)
src: 01 (charger)
cmd: 6A request (charging mode), length: 4
dat: A03C (state: charger idle)
dst: 01 (charger)
src: 80 (CP)
cmd: 6A response (charging mode), length: 4
dat: AA00 (ack)
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 0215 0000 0000 0012 A800 FF58 4800 000A 2EA0 2EFC F078 0010 000C 0136 6400 0000 0000 00E0 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 0384 1388 (charger: idle, meter: 16734.28kWh, temperature: 31.0°C, session: 0, voltage: 224V, current: 0.0A, limit: 90.0A)
dst: 80 (CP)
src: 01 (charger)
cmd: 26 request (charger state update), length: 132
dat: 0215 0000 0000 0012 A800 FF58 4800 000A 2EA0 2EFC F078 0010 000D 0136 6400 0000 0000 00E0 0000 0000 0000 0000 0000 0000 03E8 0000 0000 0000 0000 0000 0000 0384 1388 (charger: idle, meter: 16734.28kWh, temperature: 31.0°C, session: 0, voltage: 224V, current: 0.0A, limit: 90.0A)
dst: 01 (charger)
src: 80 (CP)
cmd: 26 response (charger state update), length: 16
dat: 0000 0000 2E80 7BB7 (session: 0, timestamp: 2024-09-20 18:30:15)
In addition to my own testing, I have used these publicly available sources: