I am trying to integrate Huawei ESM-48100U2 batteries with Home Assistant using ESPHome/Modbus RTU and would appreciate any technical insight regarding protocol details and register maps.
What I have discovered/tested so far:
Battery:
- Huawei ESM-48100U2
- Possible slave ID: 214
- Communication settings:
- 9600 baud
- 8E1 (8 data bits, EVEN parity, 1 stop bit)
Hardware used:
- ESP32
- MAX485
- MAX490
- ESPHome
Tests performed:
- MAX485 RS485 2-wire
- Partial communication achieved
- Received:
- CRC errors
- truncated responses
- UART echo
At some moments I received valid Modbus exceptions:
- 0x83 exception 2
- 0x84 exception 1
This indicates:
- slave 214 is responding
- protocol is likely Modbus RTU
- but register/function selection may be wrong
- MAX490 RS422 4-wire
- Tried separating:
- T+/T-
- R+/R-
Received strange/partial UART responses:
- 94 0A 2F FF ...
No stable valid Modbus frames.
- Important discovery from forum
Found this thread:
https://powerforum.co.za/topic/16372-huawei-esm-48100b1-changing-slave-id/
Important information found:
- Default slave ID = 214
- Communication = 9600 8E1
- Huawei implementation is described as “slightly outside standard Modbus”
- Requires repeated polling attempts
- Another user succeeded using FTDI RS485 adapter
Most important finding:
RJ45 pinout:
- pins 1 and 4 = A
- pins 2 and 3 = B
This strongly suggests:
- duplicated 2-wire RS485
- NOT classic RS422 full duplex
- Registers found in forum
Supposed register map:
- 0x0000 = busbar voltage
- 0x0001 = battery voltage
- 0x0002 = current
- 0x0003 = SOC
- 0x000E = mode
- Registers I already tested
Tested:
- 74
- 802
- 1000
- 1329
Results:
- some returned Modbus exceptions
- some returned partial responses
- still no confirmed valid readings
- Current ESPHome setup
Using:
- modbus_controller
- slave 214
- 9600 EVEN
- tested function 03 and 04
Examples:
- function 03 -> exception 2
- function 04 -> exception 1
Next step:
I will test using a USB RS485 adapter directly on PC with:
- QModMaster
- Modbus Poll
Planned wiring:
- Huawei pins 1 + 4 -> A
- Huawei pins 2 + 3 -> B
Questions:
- Has anyone successfully integrated ESM-48100U2?
- Is the register map above correct?
- Is there any byte swap/endian requirement?
- Is this really standard Modbus RTU?
- Which function code should be used?