From e45a55887ae8cbea14cfee7f136f867cefa107c5 Mon Sep 17 00:00:00 2001 From: WillCodeForCats <48533968+WillCodeForCats@users.noreply.github.com> Date: Fri, 1 Jul 2022 20:40:30 -0700 Subject: [PATCH] Check for duplicate meter serial numbers --- .../solaredge_modbus_multi/hub.py | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/custom_components/solaredge_modbus_multi/hub.py b/custom_components/solaredge_modbus_multi/hub.py index 89d2df41..6d2e1138 100644 --- a/custom_components/solaredge_modbus_multi/hub.py +++ b/custom_components/solaredge_modbus_multi/hub.py @@ -87,19 +87,37 @@ async def async_init_solaredge(self) -> None: if self._detect_meters: try: - self.meters.append(SolarEdgeMeter(inverter_unit_id, 1, self)) + new_meter_1 = SolarEdgeMeter(inverter_unit_id, 1, self) + for meter in self.meters: + if new_meter_1.serial == meter.serial: + _LOGGER.error(f"Duplicate serial {new_meter_1.serial}. Ignoring meter 1 on inverter ID {inverter_unit_id}") + raise RuntimeError(f"Duplicate meter 1 serial {new_meter_1.serial}") + + self.meters.append(new_meter_1) _LOGGER.debug(f"Found meter 1 on inverter ID {inverter_unit_id}") except: pass try: - self.meters.append(SolarEdgeMeter(inverter_unit_id, 2, self)) + new_meter_2 = SolarEdgeMeter(inverter_unit_id, 2, self) + for meter in self.meters: + if new_meter_2.serial == meter.serial: + _LOGGER.error(f"Duplicate serial {new_meter_2.serial}. Ignoring meter 2 on inverter ID {inverter_unit_id}") + raise RuntimeError(f"Duplicate meter 2 serial {new_meter_2.serial}") + + self.meters.append(new_meter_2) _LOGGER.debug(f"Found meter 2 on inverter ID {inverter_unit_id}") except: pass try: - self.meters.append(SolarEdgeMeter(inverter_unit_id, 3, self)) + new_meter_3 = SolarEdgeMeter(inverter_unit_id, 3, self) + for meter in self.meters: + if new_meter_3.serial == meter.serial: + _LOGGER.error(f"Duplicate serial {new_meter_3.serial}. Ignoring meter 3 on inverter ID {inverter_unit_id}") + raise RuntimeError(f"Duplicate meter 3 serial {new_meter_3.serial}") + + self.meters.append(new_meter_3) _LOGGER.debug(f"Found meter 3 on inverter ID {inverter_unit_id}") except: pass