From d4254be81b80db230ff43a87a2b3207578f41165 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Mon, 17 Oct 2022 21:31:13 +0200 Subject: [PATCH] Better mesh filtering. Also multiple outputs? --- custom_components/plejd/light.py | 4 ++-- custom_components/plejd/pyplejd/__init__.py | 9 +++++---- custom_components/plejd/pyplejd/mesh.py | 14 ++++++-------- custom_components/plejd/switch.py | 4 ++-- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/custom_components/plejd/light.py b/custom_components/plejd/light.py index 8231bd6..64b5678 100644 --- a/custom_components/plejd/light.py +++ b/custom_components/plejd/light.py @@ -45,7 +45,7 @@ class PlejdLight(LightEntity, CoordinatorEntity): @property def device_info(self): return { - "identifiers": {(DOMAIN, self.device.BLE_address)}, + "identifiers": {(DOMAIN, f"{self.device.BLE_address}:{self.device.address}")}, "name": self.device.name, "manufacturer": "Plejd", "model": {self.device.model}, @@ -64,7 +64,7 @@ class PlejdLight(LightEntity, CoordinatorEntity): @property def unique_id(self): - return self.device.BLE_address + return f"{self.device.BLE_address}:{self.device.address}" @property def is_on(self): diff --git a/custom_components/plejd/pyplejd/__init__.py b/custom_components/plejd/pyplejd/__init__.py index 91a9b34..4d743ba 100644 --- a/custom_components/plejd/pyplejd/__init__.py +++ b/custom_components/plejd/pyplejd/__init__.py @@ -22,10 +22,11 @@ class PlejdManager: def add_mesh_device(self, device): _LOGGER.debug("Adding plejd %s", device) - for d in self.devices.values(): - if d.BLE_address.upper() == device.address.replace(":","").replace("-","").upper(): - return self.mesh.add_mesh_node(device) - _LOGGER.debug("Device was not expected in current mesh") + # for d in self.devices.values(): + # addr = device.address.replace(":","").replace("-","").upper() + # if d.BLE_address.upper() == addr or addr in device.name: + return self.mesh.add_mesh_node(device) + # _LOGGER.debug("Device was not expected in current mesh") async def close_stale(self, device): _LOGGER.info("Closing stale connections for %s", device) diff --git a/custom_components/plejd/pyplejd/mesh.py b/custom_components/plejd/pyplejd/mesh.py index 3b56fd5..a206525 100644 --- a/custom_components/plejd/pyplejd/mesh.py +++ b/custom_components/plejd/pyplejd/mesh.py @@ -68,6 +68,12 @@ class PlejdMesh(): client = await establish_connection(BleakClient, plejd, "plejd", _disconnect) address = plejd.address self._connected = True + self.client = client + _LOGGER.debug("Connected to Plejd mesh") + await asyncio.sleep(2) + if not await self._authenticate(): + await self.disconnect() + continue break except (BleakError, asyncio.TimeoutError) as e: _LOGGER.warning("Error connecting to Plejd device: %s", str(e)) @@ -78,16 +84,8 @@ class PlejdMesh(): _LOGGER.warning("Failed to connect to plejd mesh - %s", self.mesh_nodes) return False - self.client = client self.connected_node = binascii.a2b_hex(address.replace(":", "").replace("-", ""))[::-1] - _LOGGER.debug("Connected to Plejd mesh") - await asyncio.sleep(2) - - if not await self._authenticate(): - await self.disconnect() - return False - async def _lastdata(_, lastdata): self.pollonWrite = False data = encrypt_decrypt(self.crypto_key, self.connected_node, lastdata) diff --git a/custom_components/plejd/switch.py b/custom_components/plejd/switch.py index b7c920a..632b5f2 100644 --- a/custom_components/plejd/switch.py +++ b/custom_components/plejd/switch.py @@ -45,7 +45,7 @@ class PlejdSwitch(SwitchEntity, CoordinatorEntity): @property def device_info(self): return { - "identifiers": {(DOMAIN, self.device.BLE_address)}, + "identifiers": {(DOMAIN, f"{self.device.BLE_address}:{self.device.address}")}, "name": self.device.name, "manufacturer": "Plejd", "model": self.device.model, @@ -64,7 +64,7 @@ class PlejdSwitch(SwitchEntity, CoordinatorEntity): @property def unique_id(self): - return self.device.BLE_address + return f"{self.device.BLE_address}:{self.device.address}" @property def is_on(self):