From 82c64febc57951013614aaa5cf6fafaec1308867 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Mon, 21 Jul 2025 10:07:55 +0000 Subject: [PATCH] Replace RuntimeError with ServiceValidationError in Tuya --- homeassistant/components/tuya/climate.py | 14 ++++++++------ homeassistant/components/tuya/cover.py | 13 ++++++++----- homeassistant/components/tuya/humidifier.py | 8 +++++--- homeassistant/components/tuya/number.py | 6 +++++- homeassistant/components/tuya/strings.json | 5 +++++ 5 files changed, 31 insertions(+), 15 deletions(-) diff --git a/homeassistant/components/tuya/climate.py b/homeassistant/components/tuya/climate.py index d8907b0db9d..0dc3ed695f6 100644 --- a/homeassistant/components/tuya/climate.py +++ b/homeassistant/components/tuya/climate.py @@ -20,11 +20,12 @@ from homeassistant.components.climate import ( ) from homeassistant.const import UnitOfTemperature from homeassistant.core import HomeAssistant, callback +from homeassistant.exceptions import ServiceValidationError from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from . import TuyaConfigEntry -from .const import TUYA_DISCOVERY_NEW, DPCode, DPType +from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode, DPType from .entity import TuyaEntity from .models import IntegerTypeData @@ -315,8 +316,9 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity): def set_humidity(self, humidity: int) -> None: """Set new target humidity.""" if self._set_humidity is None: - raise RuntimeError( - "Cannot set humidity, device doesn't provide methods to set it" + raise ServiceValidationError( + translation_domain=DOMAIN, + translation_key="action_dpcode_not_found", ) self._send_command( @@ -356,9 +358,9 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity): def set_temperature(self, **kwargs: Any) -> None: """Set new target temperature.""" if self._set_temperature is None: - raise RuntimeError( - "Cannot set target temperature, device doesn't provide methods to" - " set it" + raise ServiceValidationError( + translation_domain=DOMAIN, + translation_key="dpcode_not_found", ) self._send_command( diff --git a/homeassistant/components/tuya/cover.py b/homeassistant/components/tuya/cover.py index a385a35d903..e75cd350ab7 100644 --- a/homeassistant/components/tuya/cover.py +++ b/homeassistant/components/tuya/cover.py @@ -16,11 +16,12 @@ from homeassistant.components.cover import ( CoverEntityFeature, ) from homeassistant.core import HomeAssistant, callback +from homeassistant.exceptions import ServiceValidationError from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from . import TuyaConfigEntry -from .const import TUYA_DISCOVERY_NEW, DPCode, DPType +from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode, DPType from .entity import TuyaEntity from .models import IntegerTypeData @@ -334,8 +335,9 @@ class TuyaCoverEntity(TuyaEntity, CoverEntity): def set_cover_position(self, **kwargs: Any) -> None: """Move the cover to a specific position.""" if self._set_position is None: - raise RuntimeError( - "Cannot set position, device doesn't provide methods to set it" + raise ServiceValidationError( + translation_domain=DOMAIN, + translation_key="dpcode_not_found", ) self._send_command( @@ -365,8 +367,9 @@ class TuyaCoverEntity(TuyaEntity, CoverEntity): def set_cover_tilt_position(self, **kwargs: Any) -> None: """Move the cover tilt to a specific position.""" if self._tilt is None: - raise RuntimeError( - "Cannot set tilt, device doesn't provide methods to set it" + raise ServiceValidationError( + translation_domain=DOMAIN, + translation_key="dpcode_not_found", ) self._send_command( diff --git a/homeassistant/components/tuya/humidifier.py b/homeassistant/components/tuya/humidifier.py index 6539d98e9d8..8b0e4048bb6 100644 --- a/homeassistant/components/tuya/humidifier.py +++ b/homeassistant/components/tuya/humidifier.py @@ -14,11 +14,12 @@ from homeassistant.components.humidifier import ( HumidifierEntityFeature, ) from homeassistant.core import HomeAssistant, callback +from homeassistant.exceptions import ServiceValidationError from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from . import TuyaConfigEntry -from .const import TUYA_DISCOVERY_NEW, DPCode, DPType +from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode, DPType from .entity import TuyaEntity from .models import IntegerTypeData @@ -178,8 +179,9 @@ class TuyaHumidifierEntity(TuyaEntity, HumidifierEntity): def set_humidity(self, humidity: int) -> None: """Set new target humidity.""" if self._set_humidity is None: - raise RuntimeError( - "Cannot set humidity, device doesn't provide methods to set it" + raise ServiceValidationError( + translation_domain=DOMAIN, + translation_key="dpcode_not_found", ) self._send_command( diff --git a/homeassistant/components/tuya/number.py b/homeassistant/components/tuya/number.py index 415299307e3..3a7f92819ac 100644 --- a/homeassistant/components/tuya/number.py +++ b/homeassistant/components/tuya/number.py @@ -12,6 +12,7 @@ from homeassistant.components.number import ( ) from homeassistant.const import PERCENTAGE, EntityCategory, UnitOfTime from homeassistant.core import HomeAssistant, callback +from homeassistant.exceptions import ServiceValidationError from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback @@ -463,7 +464,10 @@ class TuyaNumberEntity(TuyaEntity, NumberEntity): def set_native_value(self, value: float) -> None: """Set new value.""" if self._number is None: - raise RuntimeError("Cannot set value, device doesn't provide type data") + raise ServiceValidationError( + translation_domain=DOMAIN, + translation_key="dpcode_not_found", + ) self._send_command( [ diff --git a/homeassistant/components/tuya/strings.json b/homeassistant/components/tuya/strings.json index 799d57547b2..0e3a26d53d9 100644 --- a/homeassistant/components/tuya/strings.json +++ b/homeassistant/components/tuya/strings.json @@ -942,5 +942,10 @@ "name": "Siren" } } + }, + "exceptions": { + "action_dpcode_not_found": { + "message": "Unable to process action as the device does not provide corresponding DPCode." + } } }