diff --git a/homeassistant/components/zha/core/device.py b/homeassistant/components/zha/core/device.py
index 04054ebdd0501aae0e57a96c62e6c63d59f2992c..68fb7393cd51b5d09287ea01e69c18eab292923a 100644
--- a/homeassistant/components/zha/core/device.py
+++ b/homeassistant/components/zha/core/device.py
@@ -9,7 +9,7 @@ from typing import Any, Dict
 
 from zigpy import types
 import zigpy.exceptions
-from zigpy.profiles import zha, zll
+from zigpy.profiles import PROFILES
 import zigpy.quirks
 from zigpy.zcl.clusters.general import Groups
 import zigpy.zdo.types as zdo_types
@@ -456,27 +456,20 @@ class ZHADevice(LogMixin):
         ]
 
         # Return endpoint device type Names
-        try:
-            device_info[ATTR_ENDPOINT_NAMES] = [
-                {
-                    "name": endpoint.device_type.name,
-                }
-                for (ep_id, endpoint) in self._zigpy_device.endpoints.items()
-                if ep_id != 0
-                and endpoint.profile_id in (zha.PROFILE_ID, zll.PROFILE_ID)
-            ]
-        except AttributeError as ex:
-            # Some device types are not using an enumeration
-            self.warning(
-                "Failed to identify endpoint name in '%s' with exception '%s'",
-                self._zigpy_device.endpoints.items(),
-                ex,
-            )
-            device_info[ATTR_ENDPOINT_NAMES] = [
-                {
-                    "name": "unknown",
-                }
-            ]
+        names = []
+        for endpoint in (ep for epid, ep in self.device.endpoints.items() if epid):
+            profile = PROFILES.get(endpoint.profile_id)
+            if profile and endpoint.device_type is not None:
+                # DeviceType provides undefined enums
+                names.append({ATTR_NAME: profile.DeviceType(endpoint.device_type).name})
+            else:
+                names.append(
+                    {
+                        ATTR_NAME: f"unknown {endpoint.device_type} device_type "
+                        "of 0x{endpoint.profile_id:04x} profile id"
+                    }
+                )
+        device_info[ATTR_ENDPOINT_NAMES] = names
 
         reg_device = self.gateway.ha_device_registry.async_get(self.device_id)
         if reg_device is not None:
@@ -516,7 +509,7 @@ class ZHADevice(LogMixin):
                 CLUSTER_TYPE_OUT: endpoint.out_clusters,
             }
             for (ep_id, endpoint) in self._zigpy_device.endpoints.items()
-            if ep_id != 0 and endpoint.profile_id in (zha.PROFILE_ID, zll.PROFILE_ID)
+            if ep_id != 0 and endpoint.profile_id in PROFILES
         }
 
     @callback