From cb03c357425ca84b5d13aec04c27a1e652a33929 Mon Sep 17 00:00:00 2001 From: Steven Emelander Date: Wed, 11 Mar 2026 11:51:35 -0400 Subject: [PATCH] Fix missing error handling in OmniSensor.fetch_state() OmniSensor overrides Interface.fetch_state() to use its own get_level() method with custom formula-based conversion. However, the override does not include the error handling that Interface.fetch_state() provides, which catches CommandError and ConversionError per property. This causes OmniSensor.fetch_state() to raise unhandled exceptions when sensors report errors like "Not Initialized" or "Not Supported", which can prevent the entire integration from loading. Add the same try/except pattern used by Interface.fetch_state(), with a warning log for visibility. Co-Authored-By: Claude Opus 4.6 --- src/aiovantage/_objects/omni_sensor.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/aiovantage/_objects/omni_sensor.py b/src/aiovantage/_objects/omni_sensor.py index f7a8c6b7..cd063d19 100644 --- a/src/aiovantage/_objects/omni_sensor.py +++ b/src/aiovantage/_objects/omni_sensor.py @@ -7,7 +7,9 @@ from typing_extensions import override +from aiovantage import logger from aiovantage.command_client import Converter +from aiovantage.errors import CommandError, ConversionError from aiovantage.object_interfaces import SensorInterface from .sensor import Sensor @@ -110,7 +112,15 @@ async def set_level(self, level: Decimal, *, sw: bool = False) -> None: @override async def fetch_state(self) -> list[str]: - return self.update_properties({"level": await self.get_level(hw=True)}) + # This override bypasses Interface.fetch_state(), which catches + # errors per property. Apply the same error handling here. + try: + level = await self.get_level(hw=True) + except (CommandError, ConversionError) as ex: + logger.warning("Failed to fetch OmniSensor level: %s", ex) + return [] + + return self.update_properties({"level": level}) @override def handle_object_status(self, method: str, result: str, *args: str) -> list[str]: