diff --git a/homeassistant/components/fibaro/__init__.py b/homeassistant/components/fibaro/__init__.py
index b4e5b47f297d6375b08fd00e26f515c9709f420b..0af6cf025861e5788f3eb7591db9c171aa1cbeab 100644
--- a/homeassistant/components/fibaro/__init__.py
+++ b/homeassistant/components/fibaro/__init__.py
@@ -8,6 +8,7 @@ from typing import Any
 
 from pyfibaro.fibaro_client import FibaroClient
 from pyfibaro.fibaro_device import DeviceModel
+from pyfibaro.fibaro_scene import SceneModel
 from requests.exceptions import HTTPError
 
 from homeassistant.config_entries import ConfigEntry
@@ -87,9 +88,11 @@ class FibaroController:
         self._import_plugins = config[CONF_IMPORT_PLUGINS]
         self._room_map = None  # Mapping roomId to room object
         self._device_map = None  # Mapping deviceId to device object
-        self.fibaro_devices: dict[Platform, list] = defaultdict(
+        self.fibaro_devices: dict[Platform, list[DeviceModel]] = defaultdict(
             list
         )  # List of devices by entity platform
+        # All scenes
+        self._scenes: list[SceneModel] = []
         self._callbacks: dict[Any, Any] = {}  # Update value callbacks by deviceId
         self.hub_serial: str  # Unique serial number of the hub
         self.hub_name: str  # The friendly name of the hub
@@ -115,7 +118,7 @@ class FibaroController:
 
         self._room_map = {room.fibaro_id: room for room in self._client.read_rooms()}
         self._read_devices()
-        self._read_scenes()
+        self._scenes = self._client.read_scenes()
         return True
 
     def connect_with_error_handling(self) -> None:
@@ -282,12 +285,9 @@ class FibaroController:
         room = self._room_map.get(room_id)
         return room.name if room else None
 
-    def _read_scenes(self):
-        scenes = self._client.read_scenes()
-        for device in scenes:
-            device.fibaro_controller = self
-            self.fibaro_devices[Platform.SCENE].append(device)
-            _LOGGER.debug("Scene -> %s", device)
+    def read_scenes(self) -> list[SceneModel]:
+        """Return list of scenes."""
+        return self._scenes
 
     def _read_devices(self):
         """Read and process the device list."""
diff --git a/homeassistant/components/fibaro/scene.py b/homeassistant/components/fibaro/scene.py
index 36d2666f97dd743a5f518f144166c0269443b76c..7ae8bff151fc17cf9ac0eb0eb0f82c08639fb722 100644
--- a/homeassistant/components/fibaro/scene.py
+++ b/homeassistant/components/fibaro/scene.py
@@ -7,7 +7,6 @@ from pyfibaro.fibaro_scene import SceneModel
 
 from homeassistant.components.scene import Scene
 from homeassistant.config_entries import ConfigEntry
-from homeassistant.const import Platform
 from homeassistant.core import HomeAssistant
 from homeassistant.helpers.device_registry import DeviceInfo
 from homeassistant.helpers.entity_platform import AddEntitiesCallback
@@ -25,7 +24,7 @@ async def async_setup_entry(
     """Perform the setup for Fibaro scenes."""
     controller: FibaroController = hass.data[DOMAIN][entry.entry_id]
     async_add_entities(
-        [FibaroScene(scene) for scene in controller.fibaro_devices[Platform.SCENE]],
+        [FibaroScene(scene, controller) for scene in controller.read_scenes()],
         True,
     )
 
@@ -33,11 +32,10 @@ async def async_setup_entry(
 class FibaroScene(Scene):
     """Representation of a Fibaro scene entity."""
 
-    def __init__(self, fibaro_scene: SceneModel) -> None:
+    def __init__(self, fibaro_scene: SceneModel, controller: FibaroController) -> None:
         """Initialize the Fibaro scene."""
         self._fibaro_scene = fibaro_scene
 
-        controller: FibaroController = fibaro_scene.fibaro_controller
         room_name = controller.get_room_name(fibaro_scene.room_id)
         if not room_name:
             room_name = "Unknown"
diff --git a/tests/components/fibaro/conftest.py b/tests/components/fibaro/conftest.py
index 1a3f9b083b868688d07842a156e093638571cfa4..2b6580c3191b349c5bf1a8ad8676a962564b92c2 100644
--- a/tests/components/fibaro/conftest.py
+++ b/tests/components/fibaro/conftest.py
@@ -47,10 +47,7 @@ async def setup_platform(
     controller_mock = Mock()
     controller_mock.hub_serial = "HC2-111111"
     controller_mock.get_room_name.return_value = room_name
-    controller_mock.fibaro_devices = {Platform.SCENE: scenes}
-
-    for scene in scenes:
-        scene.fibaro_controller = controller_mock
+    controller_mock.read_scenes.return_value = scenes
 
     hass.data[DOMAIN] = {config_entry.entry_id: controller_mock}
     await hass.config_entries.async_forward_entry_setup(config_entry, platform)