From 454e573ef40546be0e453b2cc76831beb140b163 Mon Sep 17 00:00:00 2001 From: lanort Date: Mon, 23 Mar 2026 08:00:10 +0100 Subject: [PATCH] Refactor unit of measurement handling in importer.py --- custom_components/wnsm/importer.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/custom_components/wnsm/importer.py b/custom_components/wnsm/importer.py index 9e446571..5ce987c1 100644 --- a/custom_components/wnsm/importer.py +++ b/custom_components/wnsm/importer.py @@ -160,15 +160,38 @@ async def _import_statistics(self, start: datetime = None, end: datetime = None, bewegungsdaten = await self.async_smartmeter.get_bewegungsdaten(self.zaehlpunkt, start, end, self.granularity) _LOGGER.debug(f"Mapped historical data: {bewegungsdaten}") +<<<<<<< HEAD if bewegungsdaten['unitOfMeasurement'] is None: _LOGGER.warning("Unit of measurement is None! Aborting import...") return None elif bewegungsdaten['unitOfMeasurement'] == 'WH': +======= + + # Get unit of measurement from API response, with fallback to configured unit + unit_of_measurement = bewegungsdaten.get('unitOfMeasurement') + if unit_of_measurement is None: + # Fallback to the unit configured in the sensor + # Normalize unit: "kWh" -> "KWH", "Wh" -> "WH" + normalized_unit = self.unit_of_measurement.upper() + if 'KW' in normalized_unit: + unit_of_measurement = 'KWH' + elif 'W' in normalized_unit: + unit_of_measurement = 'WH' + else: + # If we can't determine the unit, default to KWH (most common) + unit_of_measurement = 'KWH' + _LOGGER.warning( + f"API response missing 'unitOfMeasurement' for zaehlpunkt {self.zaehlpunkt}. " + f"Using fallback unit: {unit_of_measurement}" + ) + + if unit_of_measurement == 'WH': +>>>>>>> 9faf4c2 (Refactor unit of measurement handling in importer.py) factor = 1e-3 - elif bewegungsdaten['unitOfMeasurement'] == 'KWH': + elif unit_of_measurement == 'KWH': factor = 1.0 else: - raise NotImplementedError(f'Unit {bewegungsdaten["unitOfMeasurement"]}" is not yet implemented. Please report!') + raise NotImplementedError(f'Unit {unit_of_measurement}" is not yet implemented. Please report!') dates = defaultdict(Decimal) if 'values' not in bewegungsdaten: