From 4602a5aba45d4c26a47c07e5c1178a13b8153e67 Mon Sep 17 00:00:00 2001 From: Sarang Rajesh <92532814+sarangcr03@users.noreply.github.com> Date: Sat, 21 Oct 2023 13:30:00 -0500 Subject: [PATCH 1/2] Update lock.py --- custom_components/fordpass/lock.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/custom_components/fordpass/lock.py b/custom_components/fordpass/lock.py index ff39a88..2b9521e 100644 --- a/custom_components/fordpass/lock.py +++ b/custom_components/fordpass/lock.py @@ -14,12 +14,14 @@ async def async_setup_entry(hass, config_entry, async_add_entities): entry = hass.data[DOMAIN][config_entry.entry_id][COORDINATOR] lock = Lock(entry) - if "doorLockStatus" in lock.coordinator.data["metrics"] and lock.coordinator.data["metrics"]["doorLockStatus"] and lock.coordinator.data["metrics"]["doorLockStatus"][0]["value"] != "ERROR": + + all_doors_status = next((item for item in lock.coordinator.data["metrics"]["doorLockStatus"] if item["vehicleDoor"] == "ALL_DOORS"), None) + + if all_doors_status and all_doors_status["value"] != "ERROR": async_add_entities([lock], False) else: _LOGGER.debug("Ford model doesn't support remote locking") - class Lock(FordPassEntity, LockEntity): """Defines the vehicle's lock.""" def __init__(self, coordinator): @@ -61,9 +63,10 @@ async def async_unlock(self, **kwargs): @property def is_locked(self): """Determine if the lock is locked.""" - if self.coordinator.data["metrics"] is None or self.coordinator.data["metrics"]["doorLockStatus"] is None: + all_doors_status = next((item for item in self.coordinator.data["metrics"]["doorLockStatus"] if item["vehicleDoor"] == "ALL_DOORS"), None) + if not all_doors_status: return None - return self.coordinator.data["metrics"]["doorLockStatus"][0]["value"] == "LOCKED" or self.coordinator.data["metrics"]["doorLockStatus"][0]["value"] == "DOUBLE_LOCKED" + return all_doors_status["value"] == "LOCKED" or all_doors_status["value"] == "DOUBLE_LOCKED" @property def icon(self): From 9e5514cbfa27d3189961e39269de218acb332346 Mon Sep 17 00:00:00 2001 From: Sarang Rajesh <92532814+sarangcr03@users.noreply.github.com> Date: Sat, 21 Oct 2023 17:12:32 -0500 Subject: [PATCH 2/2] Update lock.py --- custom_components/fordpass/lock.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/custom_components/fordpass/lock.py b/custom_components/fordpass/lock.py index 2b9521e..9a05e55 100644 --- a/custom_components/fordpass/lock.py +++ b/custom_components/fordpass/lock.py @@ -8,16 +8,16 @@ _LOGGER = logging.getLogger(__name__) - async def async_setup_entry(hass, config_entry, async_add_entities): """Add the lock from the config.""" entry = hass.data[DOMAIN][config_entry.entry_id][COORDINATOR] lock = Lock(entry) - all_doors_status = next((item for item in lock.coordinator.data["metrics"]["doorLockStatus"] if item["vehicleDoor"] == "ALL_DOORS"), None) + door_lock_status = lock.coordinator.data.get("metrics", {}).get("doorLockStatus", []) + all_doors_status = next((item for item in door_lock_status if item.get("vehicleDoor") == "ALL_DOORS"), None) - if all_doors_status and all_doors_status["value"] != "ERROR": + if all_doors_status and all_doors_status.get("value") != "ERROR": async_add_entities([lock], False) else: _LOGGER.debug("Ford model doesn't support remote locking") @@ -28,7 +28,7 @@ def __init__(self, coordinator): """Initialize.""" self._device_id = "fordpass_doorlock" self.coordinator = coordinator - self.data = coordinator.data["metrics"] + self.data = coordinator.data.get("metrics", {}) # Required for HA 2022.7 self.coordinator_context = object() @@ -63,10 +63,11 @@ async def async_unlock(self, **kwargs): @property def is_locked(self): """Determine if the lock is locked.""" - all_doors_status = next((item for item in self.coordinator.data["metrics"]["doorLockStatus"] if item["vehicleDoor"] == "ALL_DOORS"), None) + door_lock_status = self.coordinator.data.get("metrics", {}).get("doorLockStatus", []) + all_doors_status = next((item for item in door_lock_status if item.get("vehicleDoor") == "ALL_DOORS"), None) if not all_doors_status: return None - return all_doors_status["value"] == "LOCKED" or all_doors_status["value"] == "DOUBLE_LOCKED" + return all_doors_status.get("value") == "LOCKED" or all_doors_status.get("value") == "DOUBLE_LOCKED" @property def icon(self):