Skip to content

Commit 197d978

Browse files
astrandbfrenck
authored andcommitted
Improve logging of failing miele action commands (home-assistant#156275)
1 parent f3f3236 commit 197d978

File tree

11 files changed

+36
-25
lines changed

11 files changed

+36
-25
lines changed

homeassistant/components/miele/button.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import logging
77
from typing import Final
88

9-
import aiohttp
9+
from aiohttp import ClientResponseError
1010

1111
from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
1212
from homeassistant.core import HomeAssistant
@@ -153,11 +153,12 @@ async def async_press(self) -> None:
153153
self._device_id,
154154
{PROCESS_ACTION: self.entity_description.press_data},
155155
)
156-
except aiohttp.ClientResponseError as ex:
156+
except ClientResponseError as err:
157+
_LOGGER.debug("Error setting button state for %s: %s", self.entity_id, err)
157158
raise HomeAssistantError(
158159
translation_domain=DOMAIN,
159160
translation_key="set_state_error",
160161
translation_placeholders={
161162
"entity": self.entity_id,
162163
},
163-
) from ex
164+
) from err

homeassistant/components/miele/climate.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import logging
88
from typing import Any, Final, cast
99

10-
import aiohttp
10+
from aiohttp import ClientResponseError
1111
from pymiele import MieleDevice, MieleTemperature
1212

1313
from homeassistant.components.climate import (
@@ -250,7 +250,8 @@ async def async_set_temperature(self, **kwargs: Any) -> None:
250250
cast(float, kwargs.get(ATTR_TEMPERATURE)),
251251
self.entity_description.zone,
252252
)
253-
except aiohttp.ClientError as err:
253+
except ClientResponseError as err:
254+
_LOGGER.debug("Error setting climate state for %s: %s", self.entity_id, err)
254255
raise HomeAssistantError(
255256
translation_domain=DOMAIN,
256257
translation_key="set_state_error",

homeassistant/components/miele/coordinator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ async def _async_update_data(self) -> MieleCoordinatorData:
7373
_LOGGER.debug(
7474
"Error fetching actions for device %s: Status: %s, Message: %s",
7575
device_id,
76-
err.status,
76+
str(err.status),
7777
err.message,
7878
)
7979
actions_json = {}

homeassistant/components/miele/fan.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,15 @@ async def async_set_percentage(self, percentage: int) -> None:
142142
await self.api.send_action(
143143
self._device_id, {VENTILATION_STEP: ventilation_step}
144144
)
145-
except ClientResponseError as ex:
145+
except ClientResponseError as err:
146+
_LOGGER.debug("Error setting fan state for %s: %s", self.entity_id, err)
146147
raise HomeAssistantError(
147148
translation_domain=DOMAIN,
148149
translation_key="set_state_error",
149150
translation_placeholders={
150151
"entity": self.entity_id,
151152
},
152-
) from ex
153+
) from err
153154
self.device.state_ventilation_step = ventilation_step
154155
self.async_write_ha_state()
155156

@@ -171,6 +172,7 @@ async def async_turn_on(
171172
translation_key="set_state_error",
172173
translation_placeholders={
173174
"entity": self.entity_id,
175+
"err_status": str(ex.status),
174176
},
175177
) from ex
176178

@@ -188,6 +190,7 @@ async def async_turn_off(self, **kwargs: Any) -> None:
188190
translation_key="set_state_error",
189191
translation_placeholders={
190192
"entity": self.entity_id,
193+
"err_status": str(ex.status),
191194
},
192195
) from ex
193196

homeassistant/components/miele/light.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import logging
88
from typing import Any, Final
99

10-
import aiohttp
10+
from aiohttp import ClientResponseError
1111

1212
from homeassistant.components.light import (
1313
ColorMode,
@@ -131,7 +131,8 @@ async def async_turn_light(self, mode: int) -> None:
131131
await self.api.send_action(
132132
self._device_id, {self.entity_description.light_type: mode}
133133
)
134-
except aiohttp.ClientError as err:
134+
except ClientResponseError as err:
135+
_LOGGER.debug("Error setting light state for %s: %s", self.entity_id, err)
135136
raise HomeAssistantError(
136137
translation_domain=DOMAIN,
137138
translation_key="set_state_error",

homeassistant/components/miele/services.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import logging
55
from typing import cast
66

7-
import aiohttp
7+
from aiohttp import ClientResponseError
88
import voluptuous as vol
99

1010
from homeassistant.const import ATTR_DEVICE_ID, ATTR_TEMPERATURE
@@ -107,7 +107,7 @@ async def set_program(call: ServiceCall) -> None:
107107
data = {"programId": call.data[ATTR_PROGRAM_ID]}
108108
try:
109109
await api.set_program(serial_number, data)
110-
except aiohttp.ClientResponseError as ex:
110+
except ClientResponseError as ex:
111111
raise HomeAssistantError(
112112
translation_domain=DOMAIN,
113113
translation_key="set_program_error",
@@ -137,7 +137,7 @@ async def set_program_oven(call: ServiceCall) -> None:
137137
data["temperature"] = call.data[ATTR_TEMPERATURE]
138138
try:
139139
await api.set_program(serial_number, data)
140-
except aiohttp.ClientResponseError as ex:
140+
except ClientResponseError as ex:
141141
raise HomeAssistantError(
142142
translation_domain=DOMAIN,
143143
translation_key="set_program_oven_error",
@@ -157,7 +157,7 @@ async def get_programs(call: ServiceCall) -> ServiceResponse:
157157

158158
try:
159159
programs = await api.get_programs(serial_number)
160-
except aiohttp.ClientResponseError as ex:
160+
except ClientResponseError as ex:
161161
raise HomeAssistantError(
162162
translation_domain=DOMAIN,
163163
translation_key="get_programs_error",

homeassistant/components/miele/switch.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import logging
88
from typing import Any, Final, cast
99

10-
import aiohttp
10+
from aiohttp import ClientResponseError
1111
from pymiele import MieleDevice
1212

1313
from homeassistant.components.switch import SwitchEntity, SwitchEntityDescription
@@ -165,7 +165,8 @@ async def async_turn_switch(self, mode: dict[str, str | int | bool]) -> None:
165165
"""Set switch to mode."""
166166
try:
167167
await self.api.send_action(self._device_id, mode)
168-
except aiohttp.ClientError as err:
168+
except ClientResponseError as err:
169+
_LOGGER.debug("Error setting switch state for %s: %s", self.entity_id, err)
169170
raise HomeAssistantError(
170171
translation_domain=DOMAIN,
171172
translation_key="set_state_error",
@@ -197,7 +198,8 @@ async def async_turn_switch(self, mode: dict[str, str | int | bool]) -> None:
197198
"""Set switch to mode."""
198199
try:
199200
await self.api.send_action(self._device_id, mode)
200-
except aiohttp.ClientError as err:
201+
except ClientResponseError as err:
202+
_LOGGER.debug("Error setting switch state for %s: %s", self.entity_id, err)
201203
raise HomeAssistantError(
202204
translation_domain=DOMAIN,
203205
translation_key="set_state_error",

homeassistant/components/miele/vacuum.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,14 +189,15 @@ async def send(self, device_id: str, action: dict[str, Any]) -> None:
189189
"""Send action to the device."""
190190
try:
191191
await self.api.send_action(device_id, action)
192-
except ClientResponseError as ex:
192+
except ClientResponseError as err:
193+
_LOGGER.debug("Error setting vacuum state for %s: %s", self.entity_id, err)
193194
raise HomeAssistantError(
194195
translation_domain=DOMAIN,
195196
translation_key="set_state_error",
196197
translation_placeholders={
197198
"entity": self.entity_id,
198199
},
199-
) from ex
200+
) from err
200201

201202
async def async_clean_spot(self, **kwargs: Any) -> None:
202203
"""Clean spot."""

tests/components/miele/test_climate.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from unittest.mock import MagicMock
44

5-
from aiohttp import ClientError
5+
from aiohttp import ClientResponseError
66
import pytest
77
from syrupy.assertion import SnapshotAssertion
88

@@ -107,7 +107,9 @@ async def test_api_failure(
107107
setup_platform: MockConfigEntry,
108108
) -> None:
109109
"""Test handling of exception from API."""
110-
mock_miele_client.set_target_temperature.side_effect = ClientError
110+
mock_miele_client.set_target_temperature.side_effect = ClientResponseError(
111+
"test", "Test"
112+
)
111113

112114
with pytest.raises(
113115
HomeAssistantError, match=f"Failed to set state for {ENTITY_ID}"

tests/components/miele/test_light.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from unittest.mock import MagicMock
44

5-
from aiohttp import ClientError
5+
from aiohttp import ClientResponseError
66
import pytest
77
from syrupy.assertion import SnapshotAssertion
88

@@ -84,7 +84,7 @@ async def test_api_failure(
8484
service: str,
8585
) -> None:
8686
"""Test handling of exception from API."""
87-
mock_miele_client.send_action.side_effect = ClientError
87+
mock_miele_client.send_action.side_effect = ClientResponseError("test", "Test")
8888

8989
with pytest.raises(
9090
HomeAssistantError, match=f"Failed to set state for {ENTITY_ID}"

0 commit comments

Comments
 (0)