NexBlue Modbus Documentation
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, 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
- Modbus TCP port: 502
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 values use Big-Endian byte order. Multi-register values use full Little-Endian format (DCBA): Little-Endian byte order within each 16-bit register and Little-Endian word order (least significant word first). |
| 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 Mapping Version | UINT16 | — | RO |
The high byte represents the major version, and the low byte represents the minor version. Examples: 0x0100 = version 1.0; 0x0102 = version 1.2. |
| 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 |
|
| 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 |
|
| 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)
| 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 |
Values:
Authorization constraints:
|
| 1007 / 0x03EF | Runtime Phase Mode | UINT16 | — | RW |
Values:
Switching constraints:
|
| 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 |
|
| 0401 / 0x0191 | Warning Bitset | UINT16 | — | RO |
|
| 0402 / 0x0192 | Waiting Bitset | UINT16 | — | RO |
|
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. |