Modbus - dzurikmiroslav/esp32-evse GitHub Wiki
Controller support Modbus slave over TCP/IP and RTU/serial.
Modbus settings are in web interface, when you can enable/disable Modbus TCP server and set Unit ID. Modbus TCP are listening on port 502.

Modbus RTU can be set in serial settings, any serial interface (UART, RS-485) can be operating in Modbus slave mode. Only one interface can operate in Modbus mode!

Table of Modbus registers
| Register Address | Number Of Registers | Access | Description | Representation |
|---|---|---|---|---|
| 100 | 1 | R | EVSE state (A, B1, B2, C1, C2, D1, D2, E, F) | char[2] |
| 101 | 2 | R | EVSE error bits | uint32 |
| 103 | 1 | R/W | Charging enabled (enabled=1, disabled=0) | uint16 |
| 104 | 1 | R/W | Charger available (available=1, available=0) | uint16 |
| 105 | 1 | R | Pending authorization before start charging, when authorization is required (1 when pending otherwise 0) | uint16 |
| 106 | 1 | R/W | Charging current in A*10 | uint16 |
| 107 | 2 | R/W | Consumption limit in Wh | uint32 |
| 109 | 2 | R/W | Charging time limit in s | uint32 |
| 111 | 1 | R/W | Underpower limit in W | uint16 |
| 112 | 1 | W | Authorize to start charging when is pending (value 1 must be written) | uint16 |
| 200 | 1 | R | Charging power in W | uint16 |
| 201 | 2 | R | Session time in s | uint32 |
| 203 | 2 | R | Charging time in s | uint32 |
| 205 | 2 | R | Consumption in Wh | uint32 |
| 207 | 2 | R | L1 voltage in mV | uint32 |
| 209 | 2 | R | L2 voltage in mV | uint32 |
| 211 | 2 | R | L3 voltage in mV | uint32 |
| 213 | 2 | R | L1 current in mA | uint32 |
| 215 | 2 | R | L2 current in mA | uint32 |
| 217 | 2 | R | L3 current in mA | uint32 |
| 300 | 1 | R/W | Socket outlet (enabled=1, disabled=0) | uint16 |
| 301 | 1 | R/W | RCM (enabled=1, disabled=0) | uint16 |
| 302 | 1 | R/W | Temperature threshold in dg.C | uint16 |
| 303 | 1 | R/W | Require authorization to start charging (enabled=1, disabled=0) | uint16 |
| 304 | 1 | R/W | Max charging current in A, stored in NVS | uint16 |
| 305 | 1 | R/W | Default charging current in A*10, stored in NVS | uint16 |
| 306 | 2 | R/W | Default consumption limit in Wh, stored in NVS | uint32 |
| 308 | 2 | R/W | Default charging time limit in s, stored in NVS | uint32 |
| 310 | 1 | R/W | Default underpower limit in W, stored in NVS | uint16 |
| 311 | 1 | R/W | Socket lock operating time in ms | uint16 |
| 312 | 1 | R/W | Socket lock break time in ms | uint16 |
| 313 | 1 | R/W | Socket lock detection (unlock_high=0, locked_high=1) | uint16 |
| 314 | 1 | R/W | Socket lock retry count | uint16 |
| 315 | 1 | R/W | Energy meter mode (DUMMY=0, CUR=1, CUR_VLT=2) | uint16 |
| 316 | 1 | R/W | Energy meter voltage in V, when is not measured | uint16 |
| 317 | 1 | R/W | Energy meter three phases (enabled=1, disabled=0) | uint16 |
| 400 | 2 | R | Uptime in s | uint32 |
| 402 | 1 | R | Low temperature in dg.C*100 | int16 |
| 403 | 1 | R | High temperature in dg.C*100 | int16 |
| 404 | 1 | R | Temperature sensor count | uint16 |
| 405 | 16 | R | App version | char[16] |
| 421 | 1 | W | Restart (value 1 must be written) | uint16 |
Note Register Address starting at zero, Register Number = Register Address + 1