Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow battery energy to reset to zero #122

Merged
merged 9 commits into from
Oct 24, 2022
62 changes: 50 additions & 12 deletions custom_components/solaredge_modbus_multi/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -1826,7 +1826,7 @@ class SolarEdgeBatteryEnergyExport(SolarEdgeSensorBase):
def __init__(self, platform, config_entry, coordinator):
super().__init__(platform, config_entry, coordinator)
"""Initialize the sensor."""
self.last = None
self._last = None

@property
def unique_id(self) -> str:
Expand All @@ -1844,12 +1844,31 @@ def native_value(self):

else:
try:
return watts_to_kilowatts(
update_accum(
self, self._platform.decoded_model["B_Export_Energy_WH"]
if self._last is None:
self._last = 0

if self._platform.decoded_model["B_Export_Energy_WH"] >= self._last:
self._last = self._platform.decoded_model["B_Export_Energy_WH"]

return watts_to_kilowatts(
self._platform.decoded_model["B_Export_Energy_WH"]
)
)
except Exception:

else:
_LOGGER.warning(
(
"Battery Export Energy went backwards: "
f"{self._platform.decoded_model['B_Export_Energy_WH']} "
f"< {self._last}"
)
),

if self._platform.decoded_model["B_Export_Energy_WH"] == 0x0:
self._last = None

return None

except OverflowError:
return None

except TypeError:
Expand All @@ -1865,7 +1884,7 @@ class SolarEdgeBatteryEnergyImport(SolarEdgeSensorBase):
def __init__(self, platform, config_entry, coordinator):
super().__init__(platform, config_entry, coordinator)
"""Initialize the sensor."""
self.last = None
self._last = None

@property
def unique_id(self) -> str:
Expand All @@ -1883,12 +1902,31 @@ def native_value(self):

else:
try:
return watts_to_kilowatts(
update_accum(
self, self._platform.decoded_model["B_Import_Energy_WH"]
if self._last is None:
self._last = 0

if self._platform.decoded_model["B_Import_Energy_WH"] >= self._last:
self._last = self._platform.decoded_model["B_Import_Energy_WH"]

return watts_to_kilowatts(
self._platform.decoded_model["B_Import_Energy_WH"]
)
)
except Exception:

else:
_LOGGER.warning(
(
"Battery Import Energy went backwards: "
f"{self._platform.decoded_model['B_Import_Energy_WH']} "
f"< {self._last}"
)
),

if self._platform.decoded_model["B_Import_Energy_WH"] == 0x0:
self._last = None

return None

except OverflowError:
return None

except TypeError:
Expand Down