Skip to content

Commit 0af9de0

Browse files
authored
Merge branch 'wills106:main' into times
2 parents 8199048 + 50b89c3 commit 0af9de0

19 files changed

Lines changed: 1190 additions & 127 deletions

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,12 @@ Solinteg - WIP
8383
SRNE - WIP
8484

8585
Swatten -WIP
86+
87+
Viessmann HINV6.0-B1
8688
</li>
8789
</ul>
8890
</ul>
8991

90-
91-
9292
## Installation
9393

9494
[Read the Docs - Installation](https://homeassistant-solax-modbus.readthedocs.io/en/latest/installation/)

custom_components/solax_modbus/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1932,6 +1932,7 @@ def splitInBlocks(self, descriptions: dict[Any, Any]) -> list[Any]:
19321932
elif d_unit in (
19331933
REGISTER_S32,
19341934
REGISTER_U32,
1935+
REGISTER_F32,
19351936
REGISTER_ULSB16MSB16,
19361937
):
19371938
end = reg + 2

custom_components/solax_modbus/const.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,8 @@ class BaseModbusSensorEntityDescription(SensorEntityDescription):
243243
_is_riemann_sum_sensor: bool = False # Whether this is a Riemann sum sensor
244244
_riemann_mapping: Any = None # Riemann mapping configuration
245245
_riemann_data_hub: Any = None # Riemann data hub reference
246+
_is_daily_delta_sensor: bool = False # Whether this is a daily delta sensor calculated from a cumulative total
247+
_daily_delta_source_key: str | None = None # Source cumulative total key for daily delta sensors
246248

247249

248250
@dataclass(kw_only=True, frozen=True)

custom_components/solax_modbus/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@
1010
"iot_class": "local_polling",
1111
"issue_tracker": "https://github.com/wills106/homsassistant-solax-modbus/issues",
1212
"requirements": ["pymodbus>=3.8.3"],
13-
"version": "2026.06.3"
13+
"version": "2026.06.5"
1414
}

custom_components/solax_modbus/plugin_growatt.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9657,6 +9657,12 @@ async def async_determineInverterType(self, hub: Any, configdict: dict[str, Any]
96579657
invertertype = HYBRID | GEN4 | X1 # MOD 4000 TL3-XH Hybrid, 2 MPPT
96589658
elif seriesnumber.startswith("DPS"):
96599659
invertertype = HYBRID | GEN4 | X3 # MOD 5000 TL3-HU Hybrid, 2 MPPT
9660+
elif seriesnumber.startswith("DKS"):
9661+
invertertype = HYBRID | GEN4 | X3 | MPPT3 # MOD 10000 TL3-HU Hybrid, 3 MPPT
9662+
elif seriesnumber.startswith("DO1"):
9663+
invertertype = HYBRID | GEN4 | X3 | MPPT3 # MOD 12000 TL3-HU Hybrid, 3 MPPT
9664+
elif seriesnumber.startswith("TSS"):
9665+
invertertype = HYBRID | GEN4 | X3 | MPPT3 # Hybrid KTL3-HU 12kW
96609666
elif seriesnumber.startswith("PYL"):
96619667
invertertype = HYBRID | GEN4 | X3 # MOD 5000 TL3-XH Hybrid, 2 MPPT
96629668
elif seriesnumber.startswith("JCM"):

custom_components/solax_modbus/plugin_solax.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1562,7 +1562,7 @@ def value_function_battery_voltage_cell_difference(initval: int, descr: Any, dat
15621562
("H55", 50), # Gen5 X1-IES
15631563
("H56", 50), # Gen5 X1-IES
15641564
("H58", 50), # Gen5 X1-IES
1565-
("10M", 30), # Gen6 X1-VAST
1565+
("10M", 50), # Gen6 X1-VAST
15661566
("F34", 30), # Gen4 X3 RetroFit
15671567
("H31", 30), # Gen4 X3 TIGO
15681568
("H34A", 30), # Gen4 X3 A
@@ -11672,6 +11672,9 @@ async def async_determineInverterType(self, hub: Any, configdict: dict[str, Any]
1167211672
elif seriesnumber.startswith("MU902T"):
1167311673
invertertype = MIC | GEN | X3 # MIC X3
1167411674
self.inverter_model = "X3-MIC"
11675+
elif seriesnumber.startswith("MU103T"):
11676+
invertertype = MIC | GEN | X3 # MIC X3
11677+
self.inverter_model = "X3-MIC"
1167511678
elif seriesnumber.startswith("MC806T"):
1167611679
invertertype = MIC | GEN2 | X3 # MIC X3
1167711680
self.inverter_model = "X3-MIC"
@@ -12038,14 +12041,21 @@ def localDataCallback(self, hub: Any) -> bool:
1203812041
needs_aggregation=True,
1203912042
allowedtypes=GEN3 | GEN4 | GEN5 | GEN6,
1204012043
),
12041-
# Solar Production Energy (GEN2-6 today)
12044+
# Solar Production Energy (AC and Hybrid GEN2-6 today)
1204212045
# Aggregate energy totals across Primary + Secondary in parallel mode.
1204312046
EnergyDashboardSensorMapping(
1204412047
source_key="today_s_solar_energy",
1204512048
target_key="solar_energy_production",
1204612049
name="Solar Production Energy",
1204712050
needs_aggregation=True,
12048-
allowedtypes=GEN2 | GEN3 | GEN4 | GEN5 | GEN6,
12051+
allowedtypes=AC | HYBRID | GEN2 | GEN3 | GEN4 | GEN5 | GEN6,
12052+
),
12053+
# Solar Production Energy ( MIC today)
12054+
EnergyDashboardSensorMapping(
12055+
source_key="today_s_yield",
12056+
target_key="solar_energy_production",
12057+
name="Solar Production Energy",
12058+
allowedtypes=MIC | GEN | GEN2 | GEN4,
1204912059
),
1205012060
# Solar Production Energy (GEN1 Riemann sum)
1205112061
# GEN1 lacks native energy counters; integrate power and aggregate in parallel mode.
@@ -12056,7 +12066,7 @@ def localDataCallback(self, hub: Any) -> bool:
1205612066
use_riemann_sum=True,
1205712067
filter_function=lambda v: max(0, v),
1205812068
needs_aggregation=True,
12059-
allowedtypes=GEN,
12069+
allowedtypes=AC | HYBRID | GEN,
1206012070
),
1206112071
],
1206212072
)

custom_components/solax_modbus/plugin_solax_mega_forth.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,6 +1050,9 @@ async def async_determineInverterType(self, hub: Any, configdict: dict[str, Any]
10501050
elif seriesnumber.startswith("X3G01"):
10511051
invertertype = MAX | GEN2 | MPPT9 # MAX FORTH G2
10521052
self.inverter_model = "X3- FORTH 100kW - G2"
1053+
elif seriesnumber.startswith("A3F10"):
1054+
invertertype = MAX | GEN2 | MPPT9 # MAX FORTH G2
1055+
self.inverter_model = "X3- FORTH 100kW - G2"
10531056
elif seriesnumber.startswith("X3G011"):
10541057
invertertype = MAX | GEN2 | MPPT9 # MAX FORTH G2
10551058
self.inverter_model = "X3- FORTH 110kW - G2"

custom_components/solax_modbus/plugin_solis.py

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2421,7 +2421,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
24212421
rounding=1,
24222422
allowedtypes=HYBRID,
24232423
# entity_registry_enabled_default=False,
2424-
entity_category=EntityCategory.CONFIG,
2424+
entity_category=EntityCategory.DIAGNOSTIC,
24252425
),
24262426
SolisModbusSensorEntityDescription(
24272427
name="Battery Charge Current",
@@ -2434,7 +2434,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
24342434
rounding=1,
24352435
allowedtypes=HYBRID,
24362436
# entity_registry_enabled_default=False,
2437-
entity_category=EntityCategory.CONFIG,
2437+
entity_category=EntityCategory.DIAGNOSTIC,
24382438
),
24392439
SolisModbusSensorEntityDescription(
24402440
name="Battery Discharge Current",
@@ -2447,7 +2447,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
24472447
rounding=1,
24482448
# entity_registry_enabled_default=False,
24492449
allowedtypes=HYBRID,
2450-
entity_category=EntityCategory.CONFIG,
2450+
entity_category=EntityCategory.DIAGNOSTIC,
24512451
),
24522452
SolisModbusSensorEntityDescription(
24532453
name="Timed Charge Current",
@@ -2460,7 +2460,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
24602460
rounding=1,
24612461
# entity_registry_enabled_default=False,
24622462
allowedtypes=HYBRID,
2463-
entity_category=EntityCategory.CONFIG,
2463+
entity_category=EntityCategory.DIAGNOSTIC,
24642464
),
24652465
SolisModbusSensorEntityDescription(
24662466
name="Timed Discharge Current",
@@ -2473,7 +2473,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
24732473
rounding=1,
24742474
# entity_registry_enabled_default=False,
24752475
allowedtypes=HYBRID,
2476-
entity_category=EntityCategory.CONFIG,
2476+
entity_category=EntityCategory.DIAGNOSTIC,
24772477
),
24782478
SolisModbusSensorEntityDescription(
24792479
name="Timed Charge Start Hours",
@@ -2482,7 +2482,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
24822482
native_unit_of_measurement=UnitOfTime.HOURS,
24832483
# entity_registry_enabled_default=False,
24842484
allowedtypes=HYBRID,
2485-
entity_category=EntityCategory.CONFIG,
2485+
entity_category=EntityCategory.DIAGNOSTIC,
24862486
icon="mdi:battery-clock",
24872487
),
24882488
SolisModbusSensorEntityDescription(
@@ -2492,7 +2492,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
24922492
native_unit_of_measurement=UnitOfTime.MINUTES,
24932493
# entity_registry_enabled_default=False,
24942494
allowedtypes=HYBRID,
2495-
entity_category=EntityCategory.CONFIG,
2495+
entity_category=EntityCategory.DIAGNOSTIC,
24962496
icon="mdi:battery-clock",
24972497
),
24982498
SolisModbusSensorEntityDescription(
@@ -2502,7 +2502,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
25022502
native_unit_of_measurement=UnitOfTime.HOURS,
25032503
# entity_registry_enabled_default=False,
25042504
allowedtypes=HYBRID,
2505-
entity_category=EntityCategory.CONFIG,
2505+
entity_category=EntityCategory.DIAGNOSTIC,
25062506
icon="mdi:battery-clock",
25072507
),
25082508
SolisModbusSensorEntityDescription(
@@ -2512,7 +2512,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
25122512
native_unit_of_measurement=UnitOfTime.MINUTES,
25132513
# entity_registry_enabled_default=False,
25142514
allowedtypes=HYBRID,
2515-
entity_category=EntityCategory.CONFIG,
2515+
entity_category=EntityCategory.DIAGNOSTIC,
25162516
icon="mdi:battery-clock",
25172517
),
25182518
SolisModbusSensorEntityDescription(
@@ -2522,7 +2522,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
25222522
native_unit_of_measurement=UnitOfTime.HOURS,
25232523
# entity_registry_enabled_default=False,
25242524
allowedtypes=HYBRID,
2525-
entity_category=EntityCategory.CONFIG,
2525+
entity_category=EntityCategory.DIAGNOSTIC,
25262526
icon="mdi:battery-clock",
25272527
),
25282528
SolisModbusSensorEntityDescription(
@@ -2532,7 +2532,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
25322532
native_unit_of_measurement=UnitOfTime.MINUTES,
25332533
# entity_registry_enabled_default=False,
25342534
allowedtypes=HYBRID,
2535-
entity_category=EntityCategory.CONFIG,
2535+
entity_category=EntityCategory.DIAGNOSTIC,
25362536
icon="mdi:battery-clock",
25372537
),
25382538
SolisModbusSensorEntityDescription(
@@ -2542,7 +2542,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
25422542
# native_unit_of_measurement=UnitOfTime.HOURS,
25432543
entity_registry_enabled_default=False,
25442544
allowedtypes=HYBRID,
2545-
entity_category=EntityCategory.CONFIG,
2545+
entity_category=EntityCategory.DIAGNOSTIC,
25462546
icon="mdi:battery-clock",
25472547
),
25482548
SolisModbusSensorEntityDescription(
@@ -2552,7 +2552,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
25522552
native_unit_of_measurement=UnitOfTime.MINUTES,
25532553
# entity_registry_enabled_default=False,
25542554
allowedtypes=HYBRID,
2555-
entity_category=EntityCategory.CONFIG,
2555+
entity_category=EntityCategory.DIAGNOSTIC,
25562556
icon="mdi:battery-clock",
25572557
),
25582558
# ============================ TimeSlot2 ==============================
@@ -2563,7 +2563,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
25632563
native_unit_of_measurement=UnitOfTime.HOURS,
25642564
# entity_registry_enabled_default=False,
25652565
allowedtypes=HYBRID,
2566-
entity_category=EntityCategory.CONFIG,
2566+
entity_category=EntityCategory.DIAGNOSTIC,
25672567
icon="mdi:battery-clock",
25682568
),
25692569
SolisModbusSensorEntityDescription(
@@ -2573,7 +2573,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
25732573
native_unit_of_measurement=UnitOfTime.MINUTES,
25742574
# entity_registry_enabled_default=False,
25752575
allowedtypes=HYBRID,
2576-
entity_category=EntityCategory.CONFIG,
2576+
entity_category=EntityCategory.DIAGNOSTIC,
25772577
icon="mdi:battery-clock",
25782578
),
25792579
SolisModbusSensorEntityDescription(
@@ -2583,7 +2583,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
25832583
native_unit_of_measurement=UnitOfTime.HOURS,
25842584
# entity_registry_enabled_default=False,
25852585
allowedtypes=HYBRID,
2586-
entity_category=EntityCategory.CONFIG,
2586+
entity_category=EntityCategory.DIAGNOSTIC,
25872587
icon="mdi:battery-clock",
25882588
),
25892589
SolisModbusSensorEntityDescription(
@@ -2593,7 +2593,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
25932593
native_unit_of_measurement=UnitOfTime.MINUTES,
25942594
# entity_registry_enabled_default=False,
25952595
allowedtypes=HYBRID,
2596-
entity_category=EntityCategory.CONFIG,
2596+
entity_category=EntityCategory.DIAGNOSTIC,
25972597
icon="mdi:battery-clock",
25982598
),
25992599
SolisModbusSensorEntityDescription(
@@ -2603,7 +2603,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
26032603
native_unit_of_measurement=UnitOfTime.HOURS,
26042604
# entity_registry_enabled_default=False,
26052605
allowedtypes=HYBRID,
2606-
entity_category=EntityCategory.CONFIG,
2606+
entity_category=EntityCategory.DIAGNOSTIC,
26072607
icon="mdi:battery-clock",
26082608
),
26092609
SolisModbusSensorEntityDescription(
@@ -2613,7 +2613,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
26132613
native_unit_of_measurement=UnitOfTime.MINUTES,
26142614
# entity_registry_enabled_default=False,
26152615
allowedtypes=HYBRID,
2616-
entity_category=EntityCategory.CONFIG,
2616+
entity_category=EntityCategory.DIAGNOSTIC,
26172617
icon="mdi:battery-clock",
26182618
),
26192619
SolisModbusSensorEntityDescription(
@@ -2623,7 +2623,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
26232623
native_unit_of_measurement=UnitOfTime.HOURS,
26242624
# entity_registry_enabled_default=False,
26252625
allowedtypes=HYBRID,
2626-
entity_category=EntityCategory.CONFIG,
2626+
entity_category=EntityCategory.DIAGNOSTIC,
26272627
icon="mdi:battery-clock",
26282628
),
26292629
SolisModbusSensorEntityDescription(
@@ -2633,7 +2633,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
26332633
native_unit_of_measurement=UnitOfTime.MINUTES,
26342634
# entity_registry_enabled_default=False,
26352635
allowedtypes=HYBRID,
2636-
entity_category=EntityCategory.CONFIG,
2636+
entity_category=EntityCategory.DIAGNOSTIC,
26372637
icon="mdi:battery-clock",
26382638
),
26392639
# ============================ TimeSlot3 ==============================
@@ -2644,7 +2644,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
26442644
native_unit_of_measurement=UnitOfTime.HOURS,
26452645
# entity_registry_enabled_default=False,
26462646
allowedtypes=HYBRID,
2647-
entity_category=EntityCategory.CONFIG,
2647+
entity_category=EntityCategory.DIAGNOSTIC,
26482648
icon="mdi:battery-clock",
26492649
),
26502650
SolisModbusSensorEntityDescription(
@@ -2654,7 +2654,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
26542654
native_unit_of_measurement=UnitOfTime.MINUTES,
26552655
# entity_registry_enabled_default=False,
26562656
allowedtypes=HYBRID,
2657-
entity_category=EntityCategory.CONFIG,
2657+
entity_category=EntityCategory.DIAGNOSTIC,
26582658
icon="mdi:battery-clock",
26592659
),
26602660
SolisModbusSensorEntityDescription(
@@ -2664,7 +2664,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
26642664
native_unit_of_measurement=UnitOfTime.HOURS,
26652665
# entity_registry_enabled_default=False,
26662666
allowedtypes=HYBRID,
2667-
entity_category=EntityCategory.CONFIG,
2667+
entity_category=EntityCategory.DIAGNOSTIC,
26682668
icon="mdi:battery-clock",
26692669
),
26702670
SolisModbusSensorEntityDescription(
@@ -2674,7 +2674,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
26742674
native_unit_of_measurement=UnitOfTime.MINUTES,
26752675
# entity_registry_enabled_default=False,
26762676
allowedtypes=HYBRID,
2677-
entity_category=EntityCategory.CONFIG,
2677+
entity_category=EntityCategory.DIAGNOSTIC,
26782678
icon="mdi:battery-clock",
26792679
),
26802680
SolisModbusSensorEntityDescription(
@@ -2684,7 +2684,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
26842684
native_unit_of_measurement=UnitOfTime.HOURS,
26852685
# entity_registry_enabled_default=False,
26862686
allowedtypes=HYBRID,
2687-
entity_category=EntityCategory.CONFIG,
2687+
entity_category=EntityCategory.DIAGNOSTIC,
26882688
icon="mdi:battery-clock",
26892689
),
26902690
SolisModbusSensorEntityDescription(
@@ -2694,7 +2694,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
26942694
native_unit_of_measurement=UnitOfTime.MINUTES,
26952695
# entity_registry_enabled_default=False,
26962696
allowedtypes=HYBRID,
2697-
entity_category=EntityCategory.CONFIG,
2697+
entity_category=EntityCategory.DIAGNOSTIC,
26982698
icon="mdi:battery-clock",
26992699
),
27002700
SolisModbusSensorEntityDescription(
@@ -2704,7 +2704,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
27042704
native_unit_of_measurement=UnitOfTime.HOURS,
27052705
# entity_registry_enabled_default=False,
27062706
allowedtypes=HYBRID,
2707-
entity_category=EntityCategory.CONFIG,
2707+
entity_category=EntityCategory.DIAGNOSTIC,
27082708
icon="mdi:battery-clock",
27092709
),
27102710
SolisModbusSensorEntityDescription(
@@ -2714,7 +2714,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
27142714
native_unit_of_measurement=UnitOfTime.MINUTES,
27152715
# entity_registry_enabled_default=False,
27162716
allowedtypes=HYBRID,
2717-
entity_category=EntityCategory.CONFIG,
2717+
entity_category=EntityCategory.DIAGNOSTIC,
27182718
icon="mdi:battery-clock",
27192719
),
27202720
SolisModbusSensorEntityDescription(
@@ -2724,7 +2724,7 @@ def value_function_pv4_power(initval: int, descr: Any, datadict: dict[str, Any])
27242724
icon="mdi:switch",
27252725
entity_registry_enabled_default=True,
27262726
allowedtypes=HYBRID,
2727-
# entity_category=EntityCategory.CONFIG,
2727+
# entity_category=EntityCategory.DIAGNOSTIC,
27282728
),
27292729
]
27302730

0 commit comments

Comments
 (0)