1. Communication Channel
- Channel type: TCP/IP
- Physical interface: RJ45 Ethernet cable connection / Wi-Fi connection
2. TCP/IP Communication
2.1 Network Configuration
- Network mode: DHCP dynamic IP acquisition
- Fallback mode: Static IP configured in the app
In DHCP mode, after power-on, the device automatically requests an IP address from the DHCP server. After an address is successfully obtained, the device broadcasts its information via mDNS. The broadcast service name is:
_nexblue_modbus._tcp.local
This can be automatically discovered by EMS systems that support mDNS, such as Home Assistant and Tibber.
2.2 Communication Port
2.3 Unit ID
- Default value: 200
- Configurable range: 1–247
In Modbus TCP, the Unit ID is a logical identifier retained for RTU compatibility. It uses the same configuration parameter as the slave address used in RTU mode.
2.4 Register Definitions
2.4.1 Register Types
| Register Type | Function | Function Code | Description |
| Input Registers | Read input registers | 0x04 | Read-only registers that return measurements or status information such as voltage, current, power, temperature, cumulative energy, etc. |
| Holding Registers | Read holding registers | 0x03 | Read/write registers. The master can read current configuration, current limits, mode status, etc. |
| Holding Registers | Write single holding register | 0x06 | The master writes a single configuration parameter or command, such as max current setting or start/stop charging. |
| Holding Registers | Write multiple holding registers | 0x10 | The master writes multiple consecutive registers at once, used for batch updates to configuration or structured parameter groups. |
These four are the fundamental function codes recognized by IEC 61131-3, EN 61107, and the ISO Modbus specification, and are supported by almost all masters, PLCs, and EMS systems by default.
2.4.2 Register Address Planning (Address Map)
| Principle | Description |
| Length | The address field in a Modbus frame is a 16-bit unsigned integer. |
| Layered partitioning | Partition by function: Identification → Station-level → Per connector. Keep the logic clear and easy to extend. |
| Unified starting point | All registers use logical addresses. Logical addressing typically starts at 0. The document shows both decimal and hexadecimal formats. |
| Alignment rule | 32-bit data must start at an even address to avoid crossing register boundaries. |
| Reserved expansion space | Each area keeps gaps so future versions can add fields without breaking compatibility. |
| Character encoding | Each register is 2 bytes. Strings are fixed-length and are not padded with 0x00 for unused bytes. |
| Byte/Word order | Single-register byte order is Big-Endian. Multi-register data uses Little-Endian word order DCBA. |
| Access methods | Input uses 0x04. Holding registers are read with 0x03 and written with 0x06 single or 0x10 multiple. |
2.4.3 Identification, Version, and Time (Input, 0x04)
| Address | Name | Type | Unit | Access | Description |
| 0000–0007 / 0x0000–0x0007 | Brand | STRING(16) | — | RO | 2 bytes per register, UTF-8/ASCII. |
| 0008–0015 / 0x0008–0x000F | Model | STRING(16) | — | RO | Device model. |
| 0016–0027 / 0x0010–0x001B | Serial Number | STRING(24) | — | RO | Device serial number. |
| 0028–0035 / 0x001C–0x0023 | Firmware Version | STRING(16) | — | RO | For example: 04.00.19. |
| 0036 / 0x0024 | Modbus Table Version | UINT16 | — | RO | Mapping version number, for example 0x0100. |
| 0037 / 0x0025 | ConnectorCount | UINT16 | — | RO | Number of connectors: 1 or 2. |
| 0038–0039 / 0x0026–0x0027 | Date | UINT32 | YYYYMMDD | RO | 32-bit even alignment. Example: 20251202. |
| 0040–0041 / 0x0028–0x0029 | Time | UINT32 | HHMMSS | RO | Example: 155630 means 15:56:30. |
| 0042 / 0x002A | Timezone | UINT16 | minutes | RO | Example: UTC+2 → +120. |
| 0044 | Hardware version | STRING(16) | — | RO | Hardware version. |
| 0043–0099 | Reserved | — | — | — | Reserved for future identification, certificates, manufacturing info, etc. |
2.4.4 Real-time Status and Metering (Input, 0x04)
| Address | Name | Type | Unit | Access | Description |
| 0100 / 0x0064 | Chargepoint State | UINT16 | — | RO | - 0: Available
- 1: Preparing
- 2: Charging
- 3: SuspendedEVSE
- 4: SuspendedEV
- 5: Finishing
- 6: Reserved
- 7: Unavailable
- 8: Faulted
|
| 0102–0103 / 0x0066–0x0067 | Current L1 | FLOAT32 | A | RO | 32-bit even alignment. |
| 0104–0105 / 0x0068–0x0069 | Current L2 | FLOAT32 | A | RO | — |
| 0106–0107 / 0x006A–0x006B | Current L3 | FLOAT32 | A | RO | — |
| 0108–0109 / 0x006C–0x006D | Voltage L1-N | FLOAT32 | V | RO | — |
| 0110–0111 / 0x006E–0x006F | Voltage L2-N | FLOAT32 | V | RO | — |
| 0112–0113 / 0x0070–0x0071 | Voltage L3-N | FLOAT32 | V | RO | — |
| 0114–0115 / 0x0072–0x0073 | Phase Angle L1 | FLOAT32 | ° | RO | Phase angle referenced to L1-N. |
| 0116–0117 / 0x0074–0x0075 | Phase Angle L2 | FLOAT32 | ° | RO | Phase angle referenced to L1-N. |
| 0118–0119 / 0x0076–0x0077 | Phase Angle L3 | FLOAT32 | ° | RO | Phase angle referenced to L1-N. |
| 0120–0121 / 0x0078–0x0079 | Active Power L1 | FLOAT32 | W | RO | — |
| 0122–0123 / 0x007A–0x007B | Active Power L2 | FLOAT32 | W | RO | — |
| 0124–0125 / 0x007C–0x007D | Active Power L3 | FLOAT32 | W | RO | — |
| 0126–0127 / 0x007E–0x007F | Active Power Total | FLOAT32 | W | RO | — |
| 0128–0129 / 0x0080–0x0081 | Session Energy | FLOAT32 | kWh | RO | Current session. |
| 0130–0133 / 0x0082–0x0085 | Lifetime Energy | UINT64 | Wh | RO | Cumulative energy. 64-bit, 4 registers. |
| 0134–0135 / 0x0086–0x0087 | Fallback Current | FLOAT32 | A | RO | Fallback current set via NexBlue App or cloud. |
| 0136–0137 / 0x0088–0x0089 | Max Charging Current | FLOAT32 | A | RO | Maximum charging current set via NexBlue App or cloud. |
| 0138 / 0x008A | Phase Charging | UINT16 | — | RO | - 0: Adaptive
- 1: Force Single Phase
- 2: Force Three Phase
|
| 0137–0399 / 0x0088–0x018F | Reserved | — | — | — | Reserved for voltage, power factor, frequency, per-phase power, etc. |
2.4.5 Control and Safety (Holding, read 0x03 / write 0x06 or 0x10)
Notes: If the charger AC power cycles, it will automatically revert to default values and must be written again.
| Address | Name | Type | Unit | Access | Description |
| 1000–1001 / 0x03E8–0x03E9 | Current Limit | FLOAT32 | A | RW | Station-level current limit. Default 16A. Range 0–32A. |
| 1002–1003 / 0x03EA–0x03EB | Fallback Limit | FLOAT32 | A | RW | Disconnect fallback current can only be set to 0–16. Values below 6 are treated as 0. |
| 1004–1005 / 0x03EC–0x03ED | Fallback Timeout | UINT32 | s | RW | Heartbeat timeout threshold. Default 5 minutes. Minimum 30 seconds. Maximum 30 minutes. |
| 1006 / 0x03EE | IF_START | UINT16 | — | RW | - Start/Stop control
- 0: STOP
- 1: START
|
| 1007 / 0x03EF | Runtime Phase Mode | UINT16 | — | RW | Values: - 0: Adaptive
- 1: Force Single Phase
- 2: Force Three Phase
Switching constraints: - Recommended minimum interval between phase switches: 10 minutes
- Maximum 2 phase switches within any 1-hour period
- Maximum 6 phase switches during a single charging session
|
| 1008–1999 | Reserved | — | — | — | Reserved for extensions. |
2.4.6 Alarms and Errors (Error / Warning)
| Address | Name | Type | Unit | Access | Description |
| 0400 / 0x0190 | Error Bitset | UINT16 | — | RO | - Bit0: CP voltage abnormal
- Bit1: phase line leakage
- Bit2: current abnormal / overcurrent
- Bit3: voltage abnormal / overvoltage or undervoltage
- Bit4: temperature abnormal / high or low
- Bit5: relay stuck
- Bit6: RCD self-test failed
- Bit7: CP diode short
- Bit8: PEN open
- Bit9: PE leakage
- Bit10: PE open
- Bit11: PP abnormal
- Bit12–15: reserved
|
| 0401 / 0x0191 | Warning Bitset | UINT16 | — | RO | - Bit0: meter chip abnormal
- Bit1: inter-board communication abnormal
- Bit2: RFID RF abnormal
- Bit3: 868 RF abnormal
- Bit4: 4G module abnormal
- Bit5: cover open abnormal
- Bit6: reserved
- Bit7: TN system phase-loss abnormal
- Bit8: IT neutral overcurrent
- Bit9: grid abnormal
- Bit10: MID mode
- Bit11–15: reserved
|
| 0402 / 0x0192 | Waiting Bitset | UINT16 | — | RO | - Bit0: fallback due to CT offline
- Bit1: fallback due to main unit offline
- Bit2: paused due to low-severity error / charging profile current is 0 via OCPP
- Bit3: host reduces current mid-charge
- Bit4: first request sent but host has not responded
- Bit5: load shedding protection active
- Bit6: fallback triggered by Modbus
- Bit6–15: reserved
|
Appendix
Function Codes
A function code in Modbus indicates what operation the master wants to perform on the slave. Each frame includes a 1-byte function code.
| Hex | Meaning | Target |
| 0x01 | Read Coils | Bit outputs |
| 0x02 | Read Discrete Inputs | Bit inputs |
| 0x03 | Read Holding Registers | 16-bit |
| 0x04 | Read Input Registers | 16-bit |
| 0x05 | Write Single Coil | Bit |
| 0x06 | Write Single Holding Register | 16-bit |
| 0x0F | Write Multiple Coils | Bit |
| 0x10 | Write Multiple Holding Registers | 16-bit |
Summary of Common Modbus Data Types
| Data Type | Registers Used | Bit Width | C Type | Meaning and Use | Typical Examples |
| UINT16 | 1 | 16-bit | uint16_t | Unsigned integer | Status codes, enums, counters, connector count. |
| INT16 | 1 | 16-bit | int16_t | Signed integer | Temperature, offsets, timezone. |
| UINT32 | 2 | 32-bit | uint32_t | Unsigned long integer | Timestamps, energy metering, second counters. |
| INT32 | 2 | 32-bit | int32_t | Signed long integer | Power, directional values. |
| FLOAT32 | 2 | 32-bit | float | Single-precision float, IEEE 754. | Current, voltage, power, energy, etc. |
| UINT64 | 4 | 64-bit | uint64_t | Very large integer | Total energy, cumulative metering. |
| STRING[n] | n/2 | n × 8-bit | char[] | Text information | Brand, model, serial number, version number. |