Universal Solar Inverter over Modbus RS485 / TCP custom_component (AlphaESS, Growatt, Sofar, SolaX, Solinteg, Solis, SRNE, Swatten, TIGO TSI & Qcells Q.Volt Hyb)

I’m using a X1 Air, should be compatible from ARM FW 1.37, but it doesn’t work so far. HASS doesn’t seem to connect to the inverter.

How can I check which inverter FW is installed?
The inverter has no screen/HMI.

I’m on PocketWifi: 2.033.20

In ‘remote settings’ I don’t have a Modbus configurable option:

The PocketWiFi 2 doesn’t officially support Modbus.
Some people get lucky, some get Intermittent connection and others the PocketWiFi 2 just refuses to work.

It’s designed to work with the SolaX EV Charger. Other chargers don’t have a means to talk to the Inverter.

Hey guys I have X3-MIC-15K-G2, how do you correctly connect meter and modbus? Is it even possible?

1 Like

Hi folks

I’m really struggling to get the data out.

I have a male and female exceedcon connector and when I just join those together the solis datalogger starts working( I can access the IP) but I don’t get any data from it and it says ‘offline’.

I have a dlsw stick and I read somewhere I need 2 rs485 things so Iv sent back the one channel one and getting the 4 channel one from waveshare direct…

But the bit above concerns me a lot…I cant get any data read off it using the waveshare alone, I can’t get any data if all I have done is made female and male exceedcons to join with wire…what could I have done wrong…iv checked a million times to make sure the wires are correctly placed.

1 Like

I don’t seem to get any data from my inverter. But it looks like HA is connecting using the Waveshare Modbus to ETH (B). Unfortunately the sensors show no data in the dashboards? Does anyone have any idea how I can check what is going wrong?

After the log below it shows a lot of entity config settings (can post them but it is really a lot of text I can not figure out).

2024-05-01 15:03:31.975 INFO (MainThread) [custom_components.solax_modbus] Inverter is not connected, trying to connect
2024-05-01 15:03:31.975 DEBUG (MainThread) [custom_components.solax_modbus] Trying to connect to Inverter at 192.168.1.200:4196
2024-05-01 15:03:31.979 INFO (MainThread) [custom_components.solax_modbus] Inverter connected at 192.168.1.200:4196
2024-05-01 15:03:31.979 INFO (MainThread) [custom_components.solax_modbus.plugin_growatt] Growatt: trying to determine inverter type
2024-05-01 15:03:32.027 INFO (MainThread) [custom_components.solax_modbus.plugin_growatt] Read Growatt 0x9 firmware number before potential swap: AH1.0       
2024-05-01 15:03:32.029 INFO (MainThread) [custom_components.solax_modbus.button] hub.wakeuButton: None
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x9 firmware_version to block with start 0x9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0xc firmware_control_version to block with start 0x9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0xf language to block with start 0x9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x16 select_baud_rate to block with start 0x9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x17 serialnumber to block with start 0x9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x1c inverter_module to block with start 0x9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x2d rtc to block with start 0x9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] Starting new block at 0x7a 
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x7a limit_grid_export to block with start 0x7a
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x7b grid_export_limit to block with start 0x7a
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] Starting new block at 0x260 
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x260 load_first_battery_minimum_soc to block with start 0x260
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] Starting new block at 0x3f9 
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3f9 battery_first_time_4_begin to block with start 0x3f9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3fa battery_first_time_4_end to block with start 0x3f9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3fb battery_first_time_4 to block with start 0x3f9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3fc battery_first_time_5_begin to block with start 0x3f9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3fd battery_first_time_5_end to block with start 0x3f9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3fe battery_first_time_5 to block with start 0x3f9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3ff battery_first_time_6_begin to block with start 0x3f9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x400 battery_first_time_6_end to block with start 0x3f9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x401 battery_first_time_6 to block with start 0x3f9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x402 grid_first_time_4_begin to block with start 0x3f9
2024-05-01 15:03:32.064 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x403 grid_first_time_4_end to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x404 grid_first_time_4 to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x405 grid_first_time_5_begin to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x406 grid_first_time_5_end to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x407 grid_first_time_5 to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x408 grid_first_time_6_begin to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x409 grid_first_time_6_end to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x40a grid_first_time_6 to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x418 battery_type to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x42e grid_first_discharge_rate to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x42f grid_first_battery_minimum_soc to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x438 grid_first_time_1_begin to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x439 grid_first_time_1_end to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x43a grid_first_time_1 to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x43b grid_first_time_2_begin to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x43c grid_first_time_2_end to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x43d grid_first_time_2 to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x43e grid_first_time_3_begin to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x43f grid_first_time_3_end to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x440 grid_first_time_3 to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x442 battery_first_charge_rate to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x443 battery_first_maximum_soc to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x444 battery_first_charge_from_grid to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x44c battery_first_time_1_begin to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x44d battery_first_time_1_end to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x44e battery_first_time_1 to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x44f battery_first_time_2_begin to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x450 battery_first_time_2_end to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x451 battery_first_time_2 to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x452 battery_first_time_3_begin to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x453 battery_first_time_3_end to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x454 battery_first_time_3 to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x456 load_first_time_1_begin to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x457 load_first_time_1_end to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x458 load_first_time_1 to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x459 load_first_time_2_begin to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x45a load_first_time_2_end to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x45b load_first_time_2 to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x45c load_first_time_3_begin to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x45d load_first_time_3_end to block with start 0x3f9
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] Starting new block at 0x45e 
2024-05-01 15:03:32.065 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x45e load_first_time_3 to block with start 0x45e
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x1 pv_power_total to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3 pv_voltage_1 to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x4 pv_current_1 to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x5 pv_power_1 to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x7 pv_voltage_2 to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x8 pv_current_2 to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x9 pv_power_2 to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x23 output_power to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x25 grid_frequency to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x26 inverter_voltage to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x27 grid_current to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x28 grid_power to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x35 today_power_generation to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x37 total_power_generation to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x39 total_work_time to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3b today_pv1_solar_energy to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3d total_pv1_solar_energy to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3f today_pv2_solar_energy to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x41 total_pv2_solar_energy to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x5b total_solar_energy to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x5d inverter_temperature to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x5e ipm_inverter_temperature to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x5f boost_temperature to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x61 battery_voltage to block with start 0x1
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] Starting new block at 0x76 
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x76 priority to block with start 0x76
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x77 battery_type to block with start 0x76
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] Starting new block at 0x3e8 
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3e8 run_mode to block with start 0x3e8
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3f1 battery_discharge_power to block with start 0x3e8
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3f3 battery_charge_power to block with start 0x3e8
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x3f6 battery_soc to block with start 0x3e8
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x405 ac_power_to_grid_total to block with start 0x3e8
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x407 house_load to block with start 0x3e8
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x40d total_house_load to block with start 0x3e8
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x410 battery_temperature to block with start 0x3e8
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x414 today_grid_import to block with start 0x3e8
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x416 total_grid_import to block with start 0x3e8
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x418 today_grid_export to block with start 0x3e8
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x41a total_grid_export to block with start 0x3e8
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x41c today_battery_output_energy to block with start 0x3e8
2024-05-01 15:03:32.066 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x41e total_battery_output_energy to block with start 0x3e8
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x420 today_battery_input_energy to block with start 0x3e8
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x422 total_battery_input_energy to block with start 0x3e8
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x424 today_load to block with start 0x3e8
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x426 total_load to block with start 0x3e8
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] Starting new block at 0x45a 
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x45a battery_highest_temperature to block with start 0x45a
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x45b battery_lowest_temperature to block with start 0x45a
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x471 today_system_electric_energy to block with start 0x45a
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x473 total_system_electric_energy to block with start 0x45a
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x475 today_self_electric_energy to block with start 0x45a
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x477 total_self_electric_energy to block with start 0x45a
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x479 system_power to block with start 0x45a
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] adding register 0x47b self_power to block with start 0x45a
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] Growatt returning holding block: 0x9 0x33 [9, 12, 15, 22, 23, 28, 45]
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] Growatt returning holding block: 0x7a 0x7c [122, 123]
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] Growatt returning holding block: 0x260 0x261 [608]
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] Growatt returning holding block: 0x3f9 0x45e [1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1048, 1070, 1071, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1090, 1091, 1092, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117]
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] Growatt returning holding block: 0x45e 0x45f [1118]
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] Growatt returning input block: 0x1 0x62 [1, 3, 4, 5, 7, 8, 9, 35, 37, 38, 39, 40, 53, 55, 57, 59, 61, 63, 65, 91, 93, 94, 95, 97]
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] Growatt returning input block: 0x76 0x78 [118, 119]
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] Growatt returning input block: 0x3e8 0x428 [1000, 1009, 1011, 1014, 1029, 1031, 1037, 1040, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062]
2024-05-01 15:03:32.067 INFO (MainThread) [custom_components.solax_modbus.sensor] Growatt returning input block: 0x45a 0x47d [1114, 1115, 1137, 1139, 1141, 1143, 1145, 1147]

I took a RaspberryPi, connected two RS485 adapters to the GPIO and made a Node-RED flow to

  1. Be a gateway between ModbusTCP and RTU for the COM port on the inverter (for HomeAssistant)
  2. Emulate a RS485 connected meter where the inverter can get it’s grid meter data.

And it was fun!
Hopefully the electrician will be here in a cople of days to connect the inverter and the I will see if the Pi does what I’m hoping.

1 Like

Very nice! How did you find out what registers / coils are needed by the inverter? And what their meaning is?

The electrician is working as we speak, so I don’t know yet if my theory is working.
The inverter supports some different meters and they all have different registers mapping, but they are well documented. Guess the inverter will try to identify the meter model somehow.
Will be back…

Inverters talk to energy meters on their dedicated ports through one of two methods

  1. Through the Web interface of the associated app you tell the inverter the model of the Energy meter - or do the same through the LCD panel on the inverter

  2. They support a limited number of meters and send out a “hello” request - which is typcially asking for a set of registers that will return a serial number and model/manufacturers ID, they then use an internal lookup table to make further requests to that specific device.

The only real way to know is to put a RS485 modbus sniffer on the line - i have a device known as an IO Ninja - that does this perfectly and allowed me to decode the comms between a goodwe inverter and its single phase meter

Craig

1 Like

Did some tests:
Inverter started asking for holding reg 11, which according to DTSU666-Modbus/dtsu666_series.pdf at main · elfabriceu/DTSU666-Modbus (github.com)
is “Meter Type”.
Made a loop and increased the number for each request and when I reached 72 the requests changed. Inverted now asked for

  • 6 registers starting at 18
  • 2 registers starting at 92
  • 2 registers starting at 62

Don’t know what these registers are, they are not documented in the linked PDF. Maybe “72” means some other type of meter.

Anyway, 6 registers to me sounds like 3 floats or 3 Uint32, so I guessed it was the 3 phase currents. Replied with 3 floats and inverter interpreted this as a couple of GW was sent back to the grid :slight_smile:

So, looks like i’m on the right track but the data format is not correct.

To be continued…

Fixed it!
Registers 18 to 23 was, as I guessed, the three phases. But not the current, it was the power per phase as an int32. Positive for import and negative for export.

My setup is now

  • EspHome connected to the main grid meters P1 port
  • HomeAssistant publish the import and export power for each phase on MQTT
  • RaspberryPi on WiFi running NodeRED subscribes to these values and writes them to registers 18-23 in an internal ModbusTCP server
  • on the GPIO, the Pi has a ttl to RS485 adapter connected to the SolaX.
  • Incoming requests is converted to TCP, sent to the internal modbus server, the reply is converted to RTU and sent back to the inverter.

Simple as pancake :grin:

And a Big Thanks to ChatGPT for the help with the JS functions.

1 Like

Great work - you might want to publish up here the register setout and the calls for anyone else that is looking to make this work. It would also be nice if you could document the handshake protocol and the backwards and forwards for the first series of packets

Craig

Hi, I have version 2024.05.6 and I am unable to retrieve the Remaining Battery Capacity entity from my Solax inverter.

but when I load data via the REST command, I can read this value in the curl list under data code 106
Výstřižek

Can you please edit the entity so that it loads correctly?

I’m assuming you have a gen4 or gen5 if your asking for this sensor.

Have you tried enabling the sensor? FAQ - Homeassistant SolaX modbus integration or does it still return nothing once it’s enabled. (First time it’s enabled it takes about 30s for it to populate)

Did you manage to solve it? I have 6K-G2 and not sure how it should work with both modbus and meter…

1 Like

I have X3 Hybrid G4 and yes I enabled the sensor but 0 value

Some Inverters return nothing for some of the BMS sensors. There is nothing I can do about it unfortunately.

Can you share your node red flow setup for this?

Hello Everybody! Since June third my SolaX X3 Hybrid 10.0T does not respond to writing the Modbus register 31 (1F) - SolarChargerUseMode. I use this to start charging the battery from the grid when it is at 11 % to prevent it to go into “idle” mode. Always worked like a charm, but suddenly no more. Other read and write functions to registers are still OK. Does anyone know what might be the reason or has a similar experience or a solution?
Update: have been playing around in the Solax app with some settings and switched the converter off for some time, and now everything is working fine!