From c7f21ad8ff13558ad8120ea4fda83bba0124a42b Mon Sep 17 00:00:00 2001 From: Antony Male Date: Wed, 29 May 2024 10:21:09 +0100 Subject: [PATCH] Update inv_power scale and battery_discharge_2 register order See #516 --- .../foxess_modbus/entities/entity_descriptions.py | 13 ++++++++++--- ..._entity_descriptions_for_model[Inv.H3_PRO].json | 14 +++++++------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/custom_components/foxess_modbus/entities/entity_descriptions.py b/custom_components/foxess_modbus/entities/entity_descriptions.py index 5587d32b..66b85dc4 100644 --- a/custom_components/foxess_modbus/entities/entity_descriptions.py +++ b/custom_components/foxess_modbus/entities/entity_descriptions.py @@ -749,7 +749,7 @@ def _inv_current_set( scale=0.001, ) - def _inv_power(phase: str | None, addresses: list[ModbusAddressesSpec]) -> EntityFactory: + def _inv_power(phase: str | None, addresses: list[ModbusAddressesSpec], scale: float) -> EntityFactory: key_suffix = f"_{phase}" if phase is not None else "" name_suffix = f" {phase}" if phase is not None else "" return ModbusSensorDescription( @@ -759,7 +759,7 @@ def _inv_power(phase: str | None, addresses: list[ModbusAddressesSpec]) -> Entit device_class=SensorDeviceClass.POWER, state_class=SensorStateClass.MEASUREMENT, native_unit_of_measurement="kW", - scale=0.001, + scale=scale, round_to=0.01, validate=[Range(-100, 100)], ) @@ -769,6 +769,8 @@ def _inv_power(phase: str | None, addresses: list[ModbusAddressesSpec]) -> Entit addresses=[ ModbusAddressesSpec(holding=[39135, 39134], models=Inv.H3_PRO), ], + # This one appears to be in mW, despite what the spec says + scale=0.000001, ) yield _inv_power( "R", @@ -776,6 +778,7 @@ def _inv_power(phase: str | None, addresses: list[ModbusAddressesSpec]) -> Entit ModbusAddressesSpec(holding=[31012], models=Inv.H3_SET), ModbusAddressesSpec(holding=[39249, 39248], models=Inv.H3_PRO), ], + scale=0.001, ) yield _inv_power( "S", @@ -783,6 +786,7 @@ def _inv_power(phase: str | None, addresses: list[ModbusAddressesSpec]) -> Entit ModbusAddressesSpec(holding=[31013], models=Inv.H3_SET), ModbusAddressesSpec(holding=[39251, 39250], models=Inv.H3_PRO), ], + scale=0.001, ) yield _inv_power( "T", @@ -790,6 +794,7 @@ def _inv_power(phase: str | None, addresses: list[ModbusAddressesSpec]) -> Entit ModbusAddressesSpec(holding=[31014], models=Inv.H3_SET), ModbusAddressesSpec(holding=[39253, 39252], models=Inv.H3_PRO), ], + scale=0.001, ) def _inv_power_reactive(phase: str | None, addresses: list[ModbusAddressesSpec]) -> EntityFactory: @@ -1190,7 +1195,9 @@ def _invbatpower(index: int | None, addresses: list[ModbusAddressesSpec]) -> Ite yield from _invbatpower( index=2, addresses=[ - ModbusAddressesSpec(holding=[39236, 39235], models=Inv.H3_PRO), + # It does genuinely look like these two are the wrong way around, see + # https://github.com/nathanmarlor/foxess_modbus/discussions/516#discussioncomment-9569558 + ModbusAddressesSpec(holding=[39235, 39236], models=Inv.H3_PRO), ], ) diff --git a/tests/__snapshots__/test_entity_descriptions/test_entity_descriptions_for_model[Inv.H3_PRO].json b/tests/__snapshots__/test_entity_descriptions/test_entity_descriptions_for_model[Inv.H3_PRO].json index baaf3816..81f74359 100644 --- a/tests/__snapshots__/test_entity_descriptions/test_entity_descriptions_for_model[Inv.H3_PRO].json +++ b/tests/__snapshots__/test_entity_descriptions/test_entity_descriptions_for_model[Inv.H3_PRO].json @@ -52,8 +52,8 @@ { "addresses": { "holding": [ - 39236, - 39235 + 39235, + 39236 ] }, "key": "battery_charge_2", @@ -117,8 +117,8 @@ { "addresses": { "holding": [ - 39236, - 39235 + 39235, + 39236 ] }, "key": "battery_discharge_2", @@ -829,7 +829,7 @@ }, "key": "inv_power", "name": "Inverter Power", - "scale": 0.001, + "scale": 1e-06, "signed": true, "type": "sensor" }, @@ -979,8 +979,8 @@ { "addresses": { "holding": [ - 39236, - 39235 + 39235, + 39236 ] }, "key": "invbatpower_2",