Skip to content

Commit 5352926

Browse files
committed
Hybrid Gen4 dry contact: align entities with the app's dependency tree
The dry-contact load-management family now mirrors the structure the SolaX app presents, verified live on an X3-Hybrid-G4 15kW by changing each setting in the app and tracking the readback registers (write 0xB6-0xC2 -> readback 0x122-0x12E): Dry Contact Mode (0xC3): Generator Control / Load Management Load Management (0xC2): Disabled / Manual Mode / Smart Save Load Management Manual (0xB6): on/off switch Smart Save Threshold On Feed-in Power (0xB7, W) Smart Save Threshold Off Consumption (0xB9, W) Smart Save Threshold Off Battery SOC (0xBA, %) Smart Save Minimum Per On Signal (0xBB, min) Smart Save Maximum Per Day (0xBC, min) Smart Save Schedule (0xBD): enable/disable Smart Save Work Start/End Time 1 and 2 (0xBE-0xC1) Renames only touch display names; keys and entity ids are unchanged. The Work Mode select option "Manual" becomes "Manual Mode" (readback scale updated in sync). feedin_on_power, consume_off_power and the manual switch were missing the DCB gate and appeared even when the dry-contact box option was disabled; they are now gated like the rest of the family. Switch On SOC (0xB8) appears in no app screen and never changed during the live tracking session, so it is hidden by default until SolaX documents its role.
1 parent 27875b3 commit 5352926

1 file changed

Lines changed: 21 additions & 17 deletions

File tree

custom_components/solax_modbus/plugin_solax.py

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2150,7 +2150,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
21502150
icon="mdi:current-dc",
21512151
),
21522152
SolaxModbusNumberEntityDescription(
2153-
name="Consume Off Power",
2153+
name="Smart Save Threshold Off Consumption",
21542154
key="consume_off_power",
21552155
register=0xB9,
21562156
fmt="i",
@@ -2159,7 +2159,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
21592159
native_step=100,
21602160
native_unit_of_measurement=UnitOfPower.WATT,
21612161
device_class=NumberDeviceClass.POWER,
2162-
allowedtypes=AC | HYBRID | GEN4,
2162+
allowedtypes=AC | HYBRID | GEN4 | DCB,
21632163
),
21642164
SolaxModbusNumberEntityDescription(
21652165
name="Export Control User Limit",
@@ -2322,7 +2322,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
23222322
icon="mdi:tune-variant",
23232323
),
23242324
SolaxModbusNumberEntityDescription(
2325-
name="Feedin On Power",
2325+
name="Smart Save Threshold On Feed-in Power",
23262326
key="feedin_on_power",
23272327
register=0xB7,
23282328
fmt="i",
@@ -2331,7 +2331,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
23312331
native_step=100,
23322332
native_unit_of_measurement=UnitOfPower.WATT,
23332333
device_class=NumberDeviceClass.POWER,
2334-
allowedtypes=AC | HYBRID | GEN4,
2334+
allowedtypes=AC | HYBRID | GEN4 | DCB,
23352335
),
23362336
SolaxModbusNumberEntityDescription(
23372337
name="ForceTime Period 1 Max Capacity",
@@ -2384,7 +2384,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
23842384
icon="mdi:home-export-outline",
23852385
),
23862386
SolaxModbusNumberEntityDescription(
2387-
name="Maximum Per Day On",
2387+
name="Smart Save Maximum Per Day",
23882388
key="maximum_per_day_on",
23892389
register=0xBC,
23902390
fmt="i",
@@ -2395,7 +2395,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
23952395
allowedtypes=AC | HYBRID | GEN4 | DCB,
23962396
),
23972397
SolaxModbusNumberEntityDescription(
2398-
name="Minimum Per On Signal",
2398+
name="Smart Save Minimum Per On Signal",
23992399
key="minimum_per_on_signal",
24002400
register=0xBB,
24012401
fmt="i",
@@ -2443,7 +2443,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
24432443
icon="mdi:battery-charging-high",
24442444
),
24452445
SolaxModbusNumberEntityDescription(
2446-
name="Switch Off SOC",
2446+
name="Smart Save Threshold Off Battery SOC",
24472447
key="switch_off_soc",
24482448
register=0xBA,
24492449
fmt="i",
@@ -2453,6 +2453,9 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
24532453
native_unit_of_measurement=PERCENTAGE,
24542454
allowedtypes=AC | HYBRID | GEN4 | DCB,
24552455
),
2456+
# Switch On SOC does not appear in any SolaX app screen for the dry-contact
2457+
# load-management tree and never changed during live register tracking on an
2458+
# X3-Hybrid-G4; hidden by default until SolaX documents its role.
24562459
SolaxModbusNumberEntityDescription(
24572460
name="Switch On SOC",
24582461
key="switch_on_soc",
@@ -2463,6 +2466,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
24632466
native_step=1,
24642467
native_unit_of_measurement=PERCENTAGE,
24652468
allowedtypes=AC | HYBRID | GEN4 | DCB,
2469+
entity_registry_enabled_default=False,
24662470
),
24672471
SolaxModbusNumberEntityDescription(
24682472
name="Battery Charge Upper SOC",
@@ -3199,12 +3203,12 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
31993203
icon="mdi:dip-switch",
32003204
),
32013205
SolaXModbusSwitchEntityDescription(
3202-
name="Manual Mode Control",
3206+
name="Load Management Manual",
32033207
key="manual_mode_control",
32043208
register=0xB6,
32053209
sensor_key="manual_mode_control",
32063210
value_function=value_function_enable_disable,
3207-
allowedtypes=AC | HYBRID | GEN4,
3211+
allowedtypes=AC | HYBRID | GEN4 | DCB,
32083212
icon="mdi:dip-switch",
32093213
),
32103214
SolaXModbusSwitchEntityDescription(
@@ -3218,7 +3222,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
32183222
icon="mdi:dip-switch",
32193223
),
32203224
SolaXModbusSwitchEntityDescription(
3221-
name="Schedule",
3225+
name="Smart Save Schedule",
32223226
key="schedule",
32233227
register=0xBD,
32243228
sensor_key="schedule",
@@ -3579,12 +3583,12 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
35793583
icon="mdi:dip-switch",
35803584
),
35813585
SolaxModbusSelectEntityDescription(
3582-
name="Work Mode",
3586+
name="Load Management",
35833587
key="work_mode",
35843588
register=0xC2,
35853589
option_dict={
35863590
0: "Disabled",
3587-
1: "Manual",
3591+
1: "Manual Mode",
35883592
2: "Smart Save",
35893593
},
35903594
allowedtypes=AC | HYBRID | GEN4 | DCB,
@@ -5050,7 +5054,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
50505054
SolaXModbusSensorEntityDescription(
50515055
key="work_mode",
50525056
register=0x12E,
5053-
scale={0: "Disabled", 1: "Manual", 2: "Smart Save"},
5057+
scale={0: "Disabled", 1: "Manual Mode", 2: "Smart Save"},
50545058
allowedtypes=AC | HYBRID | GEN4 | DCB,
50555059
internal=True,
50565060
),
@@ -11287,7 +11291,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
1128711291
icon="mdi:generator-stationary",
1128811292
),
1128911293
SolaXModbusTimeEntityDescription(
11290-
name="Work End Time 1",
11294+
name="Smart Save Work End Time 1",
1129111295
key="work_end_time_1",
1129211296
register=0xBF,
1129311297
option_dict=TIME_OPTIONS_GEN4,
@@ -11296,7 +11300,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
1129611300
icon="mdi:home-clock",
1129711301
),
1129811302
SolaXModbusTimeEntityDescription(
11299-
name="Work End Time 2",
11303+
name="Smart Save Work End Time 2",
1130011304
key="work_end_time_2",
1130111305
register=0xC1,
1130211306
option_dict=TIME_OPTIONS_GEN4,
@@ -11305,7 +11309,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
1130511309
icon="mdi:home-clock",
1130611310
),
1130711311
SolaXModbusTimeEntityDescription(
11308-
name="Work Start Time 1",
11312+
name="Smart Save Work Start Time 1",
1130911313
key="work_start_time_1",
1131011314
register=0xBE,
1131111315
option_dict=TIME_OPTIONS_GEN4,
@@ -11314,7 +11318,7 @@ def value_function_bms_2_max_charge(initval: int, descr: Any, datadict: dict[str
1131411318
icon="mdi:home-clock",
1131511319
),
1131611320
SolaXModbusTimeEntityDescription(
11317-
name="Work Start Time 2",
11321+
name="Smart Save Work Start Time 2",
1131811322
key="work_start_time_2",
1131911323
register=0xC0,
1132011324
option_dict=TIME_OPTIONS_GEN4,

0 commit comments

Comments
 (0)