Compare commits

...

1 Commits

Author SHA1 Message Date
Stefan Agner
5ea0ddd65b Fix unhandled WebSocket handshake errors and unnecessary token refresh
Raise HomeAssistantWSConnectionError instead of HomeAssistantAPIError
for WebSocket handshake failures. The broader HomeAssistantAPIError was
not caught by the fire-and-forget send path which only catches
HomeAssistantWSError, resulting in "Task exception was never retrieved"
errors when Core's WebSocket endpoint isn't ready.

Additionally, narrow the retry catch in connect_websocket from
HomeAssistantAPIError to HomeAssistantAuthError. The broad catch caused
connection errors (not auth failures) to trigger unnecessary token
refreshes and retries, spamming "Updated Home Assistant API token" logs.

Also raise the log level for failed fire-and-forget WebSocket commands
from debug to warning for better visibility.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 17:53:34 +02:00
2 changed files with 4 additions and 4 deletions

View File

@@ -219,7 +219,7 @@ class HomeAssistantAPI(CoreSysAttributes):
self._access_token,
max_msg_size=max_msg_size,
)
except HomeAssistantAPIError:
except HomeAssistantAuthError:
self._access_token = None
if attempt == 2:
raise

View File

@@ -185,7 +185,7 @@ class WSClient:
TimeoutError,
) as err:
await client.close()
raise HomeAssistantAPIError(
raise HomeAssistantWSConnectionError(
f"Unexpected error during WebSocket handshake: {err}"
) from err
@@ -234,7 +234,7 @@ class WSClient:
TimeoutError,
) as err:
await client.close()
raise HomeAssistantAPIError(
raise HomeAssistantWSConnectionError(
f"Unexpected error during WebSocket handshake: {err}"
) from err
@@ -309,7 +309,7 @@ class HomeAssistantWebSocket(CoreSysAttributes):
try:
await self._ensure_connected()
except HomeAssistantWSError as err:
_LOGGER.debug("Can't send WebSocket command: %s", err)
_LOGGER.warning("Can't send WebSocket command: %s", err)
return
# _ensure_connected guarantees self.client is set