diff --git a/homeassistant/components/homekit_controller/__init__.py b/homeassistant/components/homekit_controller/__init__.py
index bab989ba9bccffed5929250e56d3ff45b399f01e..f91355906dceaf5dc35aff79a2892131fa6820ba 100644
--- a/homeassistant/components/homekit_controller/__init__.py
+++ b/homeassistant/components/homekit_controller/__init__.py
@@ -19,7 +19,7 @@ from homeassistant.exceptions import ConfigEntryNotReady
 from homeassistant.helpers.entity import DeviceInfo, Entity
 
 from .config_flow import normalize_hkid
-from .connection import HKDevice
+from .connection import HKDevice, valid_serial_number
 from .const import (
     CONTROLLER,
     DOMAIN,
@@ -141,7 +141,7 @@ class HomeKitEntity(Entity):
         """Return the ID of this device."""
         info = self.accessory_info
         serial = info.value(CharacteristicsTypes.SERIAL_NUMBER)
-        if serial:
+        if valid_serial_number(serial):
             return f"homekit-{serial}-{self._iid}"
         # Some accessories do not have a serial number
         return f"homekit-{self._accessory.unique_id}-{self._aid}-{self._iid}"
@@ -161,7 +161,7 @@ class HomeKitEntity(Entity):
         """Return the device info."""
         info = self.accessory_info
         accessory_serial = info.value(CharacteristicsTypes.SERIAL_NUMBER)
-        if accessory_serial:
+        if valid_serial_number(accessory_serial):
             # Some accessories do not have a serial number
             identifier = (DOMAIN, IDENTIFIER_SERIAL_NUMBER, accessory_serial)
         else:
diff --git a/homeassistant/components/homekit_controller/connection.py b/homeassistant/components/homekit_controller/connection.py
index cf8381a9a287be8e04d116ec0de57c981cb456d5..8523fec7b8f99ca37b7bfefa6f883996730dc733 100644
--- a/homeassistant/components/homekit_controller/connection.py
+++ b/homeassistant/components/homekit_controller/connection.py
@@ -36,6 +36,16 @@ MAX_POLL_FAILURES_TO_DECLARE_UNAVAILABLE = 3
 _LOGGER = logging.getLogger(__name__)
 
 
+def valid_serial_number(serial):
+    """Return if the serial number appears to be valid."""
+    if not serial:
+        return False
+    try:
+        return float("".join(serial.rsplit(".", 1))) > 1
+    except ValueError:
+        return True
+
+
 def get_accessory_information(accessory):
     """Obtain the accessory information service of a HomeKit device."""
     result = {}
@@ -211,7 +221,7 @@ class HKDevice:
 
             serial_number = info.value(CharacteristicsTypes.SERIAL_NUMBER)
 
-            if serial_number:
+            if valid_serial_number(serial_number):
                 identifiers = {(DOMAIN, IDENTIFIER_SERIAL_NUMBER, serial_number)}
             else:
                 # Some accessories do not have a serial number
diff --git a/tests/components/homekit_controller/specific_devices/test_ryse_smart_bridge.py b/tests/components/homekit_controller/specific_devices/test_ryse_smart_bridge.py
index 8430919297c36646cf763b7afbab351b647b1f35..ad5180658ad278b876a480f0422edf4e853e5f1f 100644
--- a/tests/components/homekit_controller/specific_devices/test_ryse_smart_bridge.py
+++ b/tests/components/homekit_controller/specific_devices/test_ryse_smart_bridge.py
@@ -19,7 +19,7 @@ async def test_ryse_smart_bridge_setup(hass):
     # Check that the cover.master_bath_south is correctly found and set up
     cover_id = "cover.master_bath_south"
     cover = entity_registry.async_get(cover_id)
-    assert cover.unique_id == "homekit-1.0.0-48"
+    assert cover.unique_id == "homekit-00:00:00:00:00:00-2-48"
 
     cover_helper = Helper(
         hass,