Inverter Cascade (Slave Inverters) Not Detected on RS485-2 When Battery/Meter are on RS485-1 #1045
tonyphilips69-ai
started this conversation in
General
Replies: 1 comment
|
If a modbus ID doesn't respond in manual mode there is nothing that can be done to force a response. Go into the communications settings on each inverter and verify all of the port and device ID settings are correct. If all of the settings are correct, you may need to contact SolarEdge support. |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Describe the bug
Hello,
I am running the solaredge_modbus_multi integration (v3.3.0) on Home Assistant OS (Mini-PC) to poll a three-inverter cascade setup locally via Modbus TCP (Port 1502).
While the integration successfully detects the Master inverter, the energy meter, and the BYD battery, it completely fails to discover or communicate with the two slave inverters in the cascade.
System Topology & Configuration:
Master Inverter (I1): SE5K-RWS (Firmware 0004.0024.0025, Modbus ID 1)
Energy Meter (M1): Connected to Master via RS485-1 (Modbus ID 2)
BYD Battery (B1): Connected to Master via RS485-1 (Modbus ID 112)
Slave Inverters (I2 & I3): Cascaded and connected to Master via RS485-2 (Modbus IDs 3 and 4)
The Issue / What Happens:
What works: When adding the integration, it successfully connects to the Master IP on port 1502. It perfectly maps and reads ID 1 (Master, Battery) and ID 2 (Meter).
What fails: The integration is unable to find or communicate with ID 3 and ID 4 (the slave inverters).
Scans Attempted: Both Fast Scan (1-32) and Complete Scan (1-247) time out when hitting the slave IDs. Manually entering the device ID list as 1,3,4 (while explicitly disabling Automatic detection of extra entities and Power Control to prevent scanning lockups) still results in communication time-outs for IDs 3 and 4.
Technical Breakdown / Diagnostic Insights:
It appears the Master inverter is failing to act as a Modbus TCP-to-RS485 gateway for its RS485-2 port specifically.
Because the Master is constantly under heavy load handling high-frequency real-time charging/discharging communication with the BYD battery on RS485-1, its internal processor seems to block or drop external Modbus TCP routing requests targeted at the secondary RS485-2 bus. Home Assistant sends requests for ID 3 and 4 to the Master's IP, but the Master never bridges them over to RS485-2, resulting in a strict Modbus gateway time-out.
The slave inverters are fully visible and working normally within SolarEdge SetApp and the Cloud monitoring portal (as the Master caches their serial numbers for cloud push), but local polling via Modbus TCP to the secondary bus is completely blocked by the Master's current firmware/state.
Are there any known parameters, register adjustments, or specific timing/polling configurations within the integration that can force or stabilize the Modbus TCP gateway bridging to RS485-2 when a battery is highly active on RS485-1?
Thank you for your amazing work on this integration!
Expected behavior
The integration should be able to discover and poll all three inverters in the cascade chain.
Specifically, when connecting to the Master inverter (ID 1) via Modbus TCP, the Master should successfully act as a Modbus gateway and route the integration's requests over its RS485-2 port.
This should allow solaredge_modbus_multi to successfully detect and create entities for:
Modbus ID 1: Master Inverter + BYD Battery
Modbus ID 2: Energy Meter (on Master RS485-1)
Modbus ID 3: Slave Inverter 1 (on Master RS485-2)
Modbus ID 4: Slave Inverter 2 (on Master RS485-2)
All devices should be polled concurrently without triggering Modbus gateway time-outs or communication drops on the secondary RS485 bus.
Screenshots
No response
Diagnostic File
{
"home_assistant": {
"arch": "x86_64",
"dev": false,
"docker": true,
"hassio": true,
"installation_type": "Home Assistant OS",
"os_name": "Linux",
"os_version": "6.18.37-haos",
"python_version": "3.14.6",
"timezone": "Europe/Paris",
"version": "2026.7.2",
"virtualenv": false,
"container_arch": "amd64",
"supervisor": "2026.07.3",
"host_os": "Home Assistant OS 18.1",
"docker_version": "29.5.3",
"chassis": "embedded",
"run_as_root": true
},
"custom_components": {
"hacs": {
"documentation": "https://hacs.xyz/docs/use/",
"version": "2.0.5",
"requirements": [
"aiogithubapi>=22.10.1"
]
},
"solaredge_modbus_multi": {
"documentation": "https://github.com/WillCodeForCats/solaredge-modbus-multi/wiki",
"version": "3.3.0",
"requirements": [
"pymodbus>=3.8.3",
"awesomeversion>=25.5.0"
]
}
},
"integration_manifest": {
"domain": "solaredge_modbus_multi",
"name": "SolarEdge Modbus Multi",
"codeowners": [
"WillCodeForCats"
],
"config_flow": true,
"dependencies": [],
"documentation": "https://github.com/WillCodeForCats/solaredge-modbus-multi/wiki",
"integration_type": "hub",
"iot_class": "local_polling",
"issue_tracker": "https://github.com/WillCodeForCats/solaredge-modbus-multi/issues",
"loggers": [
"custom_components.solaredge_modbus_multi"
],
"requirements": [
"pymodbus>=3.8.3",
"awesomeversion>=25.5.0"
],
"version": "3.3.0",
"is_built_in": false,
"overwrites_built_in": false
},
"setup_times": {
"null": {
"setup": 8.311599958688021e-05
},
"01KXTTBSNVY9R9K6WZPQC53A14": {
"wait_import_platforms": -0.015705978992627934,
"config_entry_setup": 2.579335895978147
}
},
"data": {
"pymodbus_version": "3.13.1",
"config_entry": {
"created_at": "2026-07-18T14:33:54.619847+00:00",
"data": {
"device_list": [
1
],
"host": "REDACTED",
"name": "SolarEdge",
"port": 1502
},
"discovery_keys": {},
"disabled_by": null,
"domain": "solaredge_modbus_multi",
"entry_id": "01KXTTBSNVY9R9K6WZPQC53A14",
"minor_version": 1,
"modified_at": "2026-07-19T06:27:09.075476+00:00",
"options": {
"adv_site_limit_control": true,
"adv_storage_control": true,
"advanced_power_control": true,
"allow_battery_energy_reset": false,
"battery_energy_reset_cycles": 0,
"battery_rating_adjust": 0,
"detect_batteries": true,
"detect_extras": true,
"detect_meters": true,
"keep_modbus_open": false,
"scan_interval": 300,
"sleep_after_write": 0
},
"pref_disable_new_entities": false,
"pref_disable_polling": false,
"source": "user",
"subentries": [],
"title": "SolarEdge",
"unique_id": "REDACTED",
"version": 2
},
"yaml": {},
"inverter_unit_id_1": {
"device_info": {
"identifiers": "REDACTED",
"name": "Solaredge I1",
"manufacturer": "SolarEdge",
"model": "SE5K-RWS48BEN4",
"serial_number": "REDACTED",
"sw_version": "0004.0024.0025",
"hw_version": ""
},
"global_power_control": true,
"advanced_power_control": true,
"site_limit_control": true,
"common": {
"C_SunSpec_ID": 1400204883,
"C_SunSpec_DID": 1,
"C_SunSpec_Length": 65,
"C_Device_address": 1,
"C_Manufacturer": "SolarEdge",
"C_Model": "SE5K-RWS48BEN4",
"C_Option": "",
"C_Version": "0004.0024.0025",
"C_SerialNumber": "REDACTED"
},
"model": {
"C_SunSpec_DID": "0x67",
"C_SunSpec_Length": "0x32",
"AC_Current": "0x5e4",
"AC_Current_A": "0x1f7",
"AC_Current_B": "0x1f5",
"AC_Current_C": "0x1f7",
"AC_Voltage_AB": "0xfc3",
"AC_Voltage_BC": "0xfb3",
"AC_Voltage_CA": "0xfbd",
"AC_Voltage_AN": "0x918",
"AC_Voltage_BN": "0x925",
"AC_Voltage_CN": "0x904",
"AC_Frequency": "0x138b",
"AC_Energy_WH_SF": "0x0",
"I_DC_Current": "0x10e8",
"I_DC_Voltage": "0x2009",
"I_Status": "0x4",
"I_Status_Vendor": "0x0",
"AC_Current_SF": "-0x2",
"AC_Voltage_SF": "-0x1",
"AC_Power": "0xda8",
"AC_Power_SF": "0x0",
"AC_Frequency_SF": "-0x2",
"AC_VA": "0xdb0",
"AC_VA_SF": "0x0",
"AC_var": "-0x592d",
"AC_var_SF": "-0x2",
"AC_PF": "-0x26fa",
"AC_PF_SF": "-0x2",
"I_DC_Current_SF": "-0x3",
"I_DC_Voltage_SF": "-0x1",
"I_DC_Power": "0xdde",
"I_DC_Power_SF": "0x0",
"I_Temp_Cab": "-0x8000",
"I_Temp_Sink": "0x10e6",
"I_Temp_Trns": "-0x8000",
"I_Temp_Other": "-0x8000",
"I_Temp_SF": "-0x2",
"AC_Energy_WH": "0x105ed4e",
"I_Status_Vendor4": "0x0",
"I_RRCR": "0x0",
"I_Power_Limit": "0x64",
"I_CosPhi": "0x3f800000",
"PwrFrqDeratingConfig": "0x4",
"ReactivePwrConfig": "0x0",
"ActivePwrGrad": "0x1",
"AdvPwrCtrlEn": "0x1",
"FrtEn": "0x0",
"FixedCosPhiPhase": "0x3f800000",
"FixedReactPwr": "0x0",
"ReactCosPhiVsPX_0": "0x0",
"ReactCosPhiVsPX_1": "0x0",
"ReactCosPhiVsPX_2": "0x42480000",
"ReactCosPhiVsPX_3": "0x42c80000",
"ReactCosPhiVsPX_4": "0x42c80000",
"ReactCosPhiVsPX_5": "0x42c80000",
"ReactCosPhiVsPY_0": "0x3f800000",
"ReactCosPhiVsPY_1": "0x3f800000",
"ReactCosPhiVsPY_2": "0x3f800000",
"ReactCosPhiVsPY_3": "0xbf733333",
"ReactCosPhiVsPY_4": "0xbf733333",
"ReactCosPhiVsPY_5": "0xbf733333",
"ReactQVsVgX_0": "0x42480000",
"ReactQVsVgX_1": "0x42c3a6e9",
"ReactQVsVgX_2": "0x42c3a6e9",
"ReactQVsVgX_3": "0x42cc5893",
"ReactQVsVgX_4": "0x42cc5893",
"ReactQVsVgX_5": "0x42f00001",
"ReactQVsVgY_0": "0xc083d70a",
"ReactQVsVgY_1": "0xc083d70a",
"ReactQVsVgY_2": "0xc083d70a",
"ReactQVsVgY_3": "0x4083d70a",
"ReactQVsVgY_4": "0x4083d70a",
"ReactQVsVgY_5": "0x4083d70a",
"FRT_KFactor": "0x40000000",
"PowerReduce": "0x42c80000",
"MaxWakeupFreq": "0x42486666",
"MinWakeupFreq": "0x4247999a",
"MaxWakeupVg": "0x437d0000",
"MinWakeupVg": "0x434f0000",
"Vnom": "0x43660000",
"Inom": "0x40e7e252",
"PwrVsFreqX_0": "0x4248cccd",
"PwrVsFreqX_1": "0x4250cccd",
"CommitPwrCtlSettings": "0x0",
"RestorePwrCtlDefaults": "0x0",
"ReactPwrIterTime": "0xc8",
"PwrVsFreqY_0": "0x42c80000",
"PwrVsFreqY_1": "0x41a00000",
"ResetFreq": "0x4248cccd",
"MaxFreq": "0x424e0000",
"ReactQVsPX_0": "0x0",
"ReactQVsPX_1": "0x0",
"ReactQVsPX_2": "0x0",
"ReactQVsPX_3": "0x0",
"ReactQVsPX_4": "0x0",
"ReactQVsPX_5": "0x42c80000",
"ReactQVsPY_0": "0x0",
"ReactQVsPY_1": "0x0",
"ReactQVsPY_2": "0x0",
"ReactQVsPY_3": "0x0",
"ReactQVsPY_4": "0x0",
"ReactQVsPY_5": "0x0",
"ReactCosPhiVsPVgLockInMax": "0x0",
"ReactCosPhiVsPVgLockInMin": "0x40000000",
"ReactCosPhiVsPVgLockOutMax": "0x0",
"ReactCosPhiVsPVgLockOutMin": "0x40000000",
"ReactQVsVgPLockInMax": "0x0",
"ReactQVsVgPLockInMin": "0x40000000",
"ReactQVsVgPLockOutMax": "0x0",
"ReactQVsVgPLockOutMin": "0x40000000",
"MaxCurrent": "0x40ffb098",
"PwrVsVgX_0": "0x41200000",
"PwrVsVgX_1": "0x42d60001",
"PwrVsVgX_2": "0x42d60001",
"PwrVsVgX_3": "0x42dc0000",
"PwrVsVgX_4": "0x42dc0000",
"PwrVsVgX_5": "0x42ee0001",
"PwrVsVgY_0": "0x42c80000",
"PwrVsVgY_1": "0x42c80000",
"PwrVsVgY_2": "0x42c80000",
"PwrVsVgY_3": "0x42c80000",
"PwrVsVgY_4": "0x42c80000",
"PwrVsVgY_5": "0x42c80000",
"DisconnectAtZeroPwrLim": "0x1",
"PwrFrqDeratingResetTime": "0x0",
"PwrFrqDeratingGradTime": "0x927c0",
"ReactQVsVgType": "0x0",
"PwrSoftStartTime": "0x927c0",
"E_Lim_Ctl_Mode": "0x0",
"E_Lim_Ctl": "0x0",
"E_Site_Limit": "0xff7fffff",
"Ext_Prod_Max": "0x0",
"I_Grid_Status": "0x0"
},
"is_mmppt": false,
"mmppt": null,
"has_battery": true,
"storage_control": {
"control_mode": "0x1",
"ac_charge_policy": "0x1",
"default_mode": "0x0",
"command_mode": "0xffff",
"ac_charge_limit": "0x0",
"backup_reserve": "0x0",
"charge_limit": "0x459c4000",
"discharge_limit": "0x459c4000",
"command_timeout": "0xe10"
},
"use_status_vendor4": true
},
"meter_id_1": {
"device_info": {
"identifiers": "REDACTED",
"name": "Solaredge I1 M1",
"manufacturer": "SolarEdge",
"model": "SE-MTR-3Y-400V-A",
"serial_number": "REDACTED",
"sw_version": "79",
"hw_version": "Export+Import",
"via_device": "REDACTED"
},
"inverter_unit_id": 1,
"common": {
"C_SunSpec_DID": 1,
"C_SunSpec_Length": 65,
"C_Device_address": 2,
"C_Manufacturer": "SolarEdge",
"C_Model": "SE-MTR-3Y-400V-A",
"C_Option": "Export+Import",
"C_Version": "79",
"C_SerialNumber": "REDACTED"
},
"model": {
"C_SunSpec_DID": "0xcb",
"C_SunSpec_Length": "0x69",
"AC_Current": "0x1382",
"AC_Current_A": "0x54c",
"AC_Current_B": "0x9b5",
"AC_Current_C": "0x480",
"AC_Current_SF": "-0x3",
"AC_Voltage_LN": "0x5abe",
"AC_Voltage_AN": "0x5abe",
"AC_Voltage_BN": "0x5b37",
"AC_Voltage_CN": "0x59fb",
"AC_Voltage_LL": "0x0",
"AC_Voltage_AB": "0x0",
"AC_Voltage_BC": "0x0",
"AC_Voltage_CA": "0x0",
"AC_Voltage_SF": "-0x2",
"AC_Frequency": "0x138a",
"AC_Frequency_SF": "-0x2",
"AC_Power": "-0x3ddb",
"AC_Power_A": "-0x1dc5",
"AC_Power_B": "-0x13c1",
"AC_Power_C": "-0xc54",
"AC_Power_SF": "-0x2",
"AC_VA": "0x24fa",
"AC_VA_A": "0x9a9",
"AC_VA_B": "0x14ec",
"AC_VA_C": "0x68d",
"AC_VA_SF": "-0x1",
"AC_var": "-0x2474",
"AC_var_A": "-0x930",
"AC_var_B": "-0x14d4",
"AC_var_C": "-0x66f",
"AC_var_SF": "-0x1",
"AC_PF": "-0xef",
"AC_PF_A": "0x172",
"AC_PF_B": "-0x28",
"AC_PF_C": "-0x419",
"AC_PF_SF": "-0x2",
"AC_Energy_WH_SF": "-0x1",
"M_VAh_SF": "-0x8000",
"M_varh_SF": "-0x8000",
"AC_Energy_WH_Exported": "0x166a8e96",
"AC_Energy_WH_Exported_A": "0xa87a988",
"AC_Energy_WH_Exported_B": "0x8f2b3ba",
"AC_Energy_WH_Exported_C": "0xb072fa0",
"AC_Energy_WH_Imported": "0x17dfd68c",
"AC_Energy_WH_Imported_A": "0x8705b0e",
"AC_Energy_WH_Imported_B": "0xf2b5afc",
"AC_Energy_WH_Imported_C": "0x85b1eba",
"M_VAh_Exported": "0x0",
"M_VAh_Exported_A": "0x0",
"M_VAh_Exported_B": "0x0",
"M_VAh_Exported_C": "0x0",
"M_VAh_Imported": "0x0",
"M_VAh_Imported_A": "0x0",
"M_VAh_Imported_B": "0x0",
"M_VAh_Imported_C": "0x8000",
"M_varh_Import_Q1": "0x0",
"M_varh_Import_Q1_A": "0x0",
"M_varh_Import_Q1_B": "0x0",
"M_varh_Import_Q1_C": "0x0",
"M_varh_Import_Q2": "0x0",
"M_varh_Import_Q2_A": "0x0",
"M_varh_Import_Q2_B": "0x0",
"M_varh_Import_Q2_C": "0x0",
"M_varh_Export_Q3": "0x0",
"M_varh_Export_Q3_A": "0x0",
"M_varh_Export_Q3_B": "0x0",
"M_varh_Export_Q3_C": "0x0",
"M_varh_Export_Q4": "0x0",
"M_varh_Export_Q4_A": "0x0",
"M_varh_Export_Q4_B": "0x0",
"M_varh_Export_Q4_C": "0x0",
"M_Events": "0x0"
}
},
"battery_id_1": {
"device_info": {
"identifiers": "REDACTED",
"name": "Solaredge I1 B1",
"manufacturer": "48V_BYD",
"model": "BYD Premium LVS 20.0",
"serial_number": "REDACTED",
"sw_version": "48V DCDC 2.3.3",
"via_device": "REDACTED"
},
"inverter_unit_id": 1,
"common": {
"B_Manufacturer": "48V_BYD",
"B_Model": "BYD Premium LVS 20.0",
"B_Version": "48V DCDC 2.3.3",
"B_SerialNumber": "REDACTED",
"B_Device_Address": 112,
"B_RatedEnergy": 20000.0
},
"model": {
"B_MaxChargePower": "0x459c4000",
"B_MaxDischargePower": "0x459c4000",
"B_MaxChargePeakPower": "0x4697f400",
"B_MaxDischargePeakPower": "0x4697f400",
"B_Temp_Average": "0x41d00000",
"B_Temp_Max": "0x0",
"B_DC_Voltage": "0x444da40a",
"B_DC_Current": "0xc094ed2a",
"B_DC_Power": "0x45707000",
"B_Energy_Max": "0x469c4000",
"B_Energy_Available": "0x468e3000",
"B_SOH": "0x42b60000",
"B_SOE": "0x429a0000",
"B_Export_Energy_WH": "0x0",
"B_Import_Energy_WH": "0x710",
"B_Status": "0x3",
"B_Status_Vendor": "0x3",
"B_Event_Log1": "0x0",
"B_Event_Log2": "0x0",
"B_Event_Log3": "0x0",
"B_Event_Log4": "0x0",
"B_Event_Log5": "0x0",
"B_Event_Log6": "0x0",
"B_Event_Log7": "0x0",
"B_Event_Log8": "0x0",
"B_Event_Log_Vendor1": "0x0",
"B_Event_Log_Vendor2": "0x0",
"B_Event_Log_Vendor3": "0x0",
"B_Event_Log_Vendor4": "0x0",
"B_Event_Log_Vendor5": "0x0",
"B_Event_Log_Vendor6": "0x0",
"B_Event_Log_Vendor7": "0x0",
"B_Event_Log_Vendor8": "0x0"
}
}
},
"issues": []
}
I have attached the diagnostic file to this issue.
The diagnostic snapshot was captured right after a failed initialization attempt when configuring the device list with 1, which is the only way the integration successfully starts up and extracts data. Attempting to include the slave IDs (1,3,4 or 1,2,3) causes the integration to hang indefinitely on "Initializing" due to the gateway time-outs on the secondary bus, preventing a diagnostic file from being generated during the failure state itself.
Debug logs
Home Assistant Version
Home Assistant OS Core 2026.7.2 Supervisor 2026.07.3 Operating System 18.1 Frontend 20260624.5
solaredge-modbus-multi Version
Versie 3.3.0
Installation Type
HAOS
Read the Instructions
Additional Context
No response
All reactions