You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
QuiltClient.close() now clears the cached token, preventing stale token access after close
invalidate_snapshot() log level lowered from WARNING to DEBUG, reducing log noise
invoke_refresh_callback deduplicated into a single shared implementation; eliminates repeated inspect.signature() calls on every token-refresh event
FanSpeed.to_wire() / LouverAngle.to_wire() no longer re-allocate mapping dicts on every call
Fixed
diagnostics.py accessed hass.data[DOMAIN][entry.entry_id] (old pattern) instead of entry.runtime_data; every call to the HA diagnostics page raised KeyError
Config flow reconfigure + OTP: when the user changed email and OTP was required, the
success path called _create_entry and created a duplicate entry instead of updating the
existing one; added _reconfigure_entry tracking so the OTP success path routes to async_update_reload_and_abort in reconfigure context
Config flow async_step_otp: FlowError (e.g. AbortFlow) was caught by the generic except Exception handler and converted to an "unknown" error, silently preventing reauth
from completing when OTP was required; FlowError is now re-raised
Energy refresh tasks are now created via config_entry.async_create_background_task so
they are cancelled on entry unload rather than outliving it
Stream-triggered energy fetch did not call async_set_updated_data after updating energy_by_space_id, so energy sensor entities would not re-render until the next
unrelated stream push; a new _update_energy_and_notify() wrapper calls async_set_updated_data only when a fetch actually occurred (not on rate-limited early return)
Schedule switch called coordinator.async_request_refresh() directly after writes instead
of _async_refresh_if_not_streaming(), causing unnecessary polls while the gRPC stream
is active
Removed redundant targeted dict mutations in stream handlers that were immediately
overwritten by async_set_updated_data
Energy sensors stopped updating while the gRPC stream was active because async_set_updated_data cancels pending coordinator polls; the coordinator now
explicitly checks whether an energy refresh is due on each stream push and fetches
if so, ensuring reliable 30-minute energy updates regardless of stream activity
(thanks @c00w, #3)