Skip to content

Commit 06f5ebf

Browse files
committed
Refactor power calculation logic in SigenergyCalculations class to streamline input validation and remove unused variables
1 parent a6c0fd5 commit 06f5ebf

File tree

1 file changed

+19
-61
lines changed

1 file changed

+19
-61
lines changed

custom_components/sigen/calculated_sensor.py

Lines changed: 19 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -331,82 +331,40 @@ def calculate_plant_consumed_power(
331331

332332
total_ac_charger_power = 0.0
333333
ac_chargers: dict[str, Any] = coordinator_data.get("ac_chargers", {})
334-
# _LOGGER.debug("AC Chargers data: %s", ac_chargers)
335334
for _, ac_charger_data in ac_chargers.items():
336335
ac_power = safe_float(ac_charger_data.get("ac_charger_charging_power"))
337336
if ac_power is not None:
338337
total_ac_charger_power += ac_power
339338

340-
total_dc_charger_power = 0.0
341-
dc_chargers: dict[str, Any] = coordinator_data.get("dc_chargers", {})
342-
# _LOGGER.debug("DC Chargers data: %s", dc_chargers)
343-
for _, dc_charger_data in dc_chargers.items():
344-
dc_power = safe_float(dc_charger_data.get("dc_charger_output_power"))
345-
if dc_power is not None:
346-
total_dc_charger_power += dc_power
347-
348-
# Use the correct calculation for total PV power
349-
pv_power = SigenergyCalculations.calculate_total_pv_power(
350-
None, coordinator_data=coordinator_data
351-
)
352-
339+
plant_power = plant_data.get("plant_active_power")
353340
grid_power = plant_data.get("plant_grid_sensor_active_power")
354-
355-
# Get battery power
356-
battery_power = plant_data.get("plant_ess_power")
341+
third_party_pv_power = plant_data.get("plant_third_party_photovoltaic_power")
357342

358343
# Validate inputs
359-
if pv_power is None or grid_power is None or battery_power is None:
344+
if plant_power is None or grid_power is None or third_party_pv_power is None:
360345
return None
361346

362347
# Validate input types
363-
if not isinstance(pv_power, (int, float)):
364-
_LOGGER.warning(
365-
"[CS][Plant Consumed] PV power is not a number: %s (type: %s)",
366-
pv_power,
367-
type(pv_power).__name__,
368-
)
369-
return None
370-
if not isinstance(grid_power, (int, float)):
371-
_LOGGER.warning(
372-
"[CS][Plant Consumed] Grid power is not a number: %s (type: %s)",
373-
grid_power,
374-
type(grid_power).__name__,
375-
)
376-
return None
377-
if not isinstance(battery_power, (int, float)):
378-
_LOGGER.warning(
379-
"[CS][Plant Consumed] Battery power is not a number: %s (type: %s)",
380-
battery_power,
381-
type(battery_power).__name__,
382-
)
383-
return None
348+
def are_numbers(*values):
349+
for x in values:
350+
if not isinstance(x, (int, float)):
351+
try:
352+
float(x)
353+
except (ValueError, TypeError):
354+
_LOGGER.warning(
355+
"[CS][Plant Consumed] Value is not a number: %s (type: %s)",
356+
x,
357+
type(x).__name__,
358+
)
359+
return False
360+
return True
384361

385-
# Calculate grid import and export power
386-
# Grid power is positive when importing, negative when exporting
387-
grid_import = max(0, grid_power)
388-
grid_export = max(0, -grid_power)
362+
if not are_numbers(grid_power, plant_power, third_party_pv_power):
363+
return None
389364

390365
# Calculate plant consumed power
391-
# Note: battery_power is positive when charging, negative when discharging
392366
try:
393-
# The household consumption should include the power used by the EV chargers.
394-
# The chargers are loads within the household.
395-
consumed_power = pv_power + grid_import - grid_export - battery_power
396-
397-
# Sanity check
398-
if consumed_power < 0:
399-
_LOGGER.debug(
400-
"[CS][Plant Consumed] Calculated power is negative.\n" \
401-
"consumed_power = pv_power + grid_import - grid_export - battery_power:\n" \
402-
"%s kW = %s + %s - %s - %s",
403-
consumed_power,
404-
pv_power,
405-
grid_import,
406-
grid_export,
407-
battery_power
408-
)
409-
# Keep the negative value as it might be valid in some scenarios
367+
consumed_power = max(0, float(plant_power) + float(grid_power) + float(third_party_pv_power) - total_ac_charger_power)
410368

411369
except Exception as ex: # pylint: disable=broad-exception-caught
412370
_LOGGER.error(

0 commit comments

Comments
 (0)