hOn/custom_components
Alexander Tihoniuk ca8ed250c2 fix(thread-safety): marshal pyhon MQTT push updates onto the event loop
PR #43 (cherry-picked in the previous commit) only swaps
async_write_ha_state() for schedule_update_ha_state() inside entity
command methods, which run on the event loop anyway. It does NOT address
the actual root cause of mmalolepszy/hon-revived#44.

pyhon-revived delivers MQTT push notifications from the awscrt network
thread: MQTTClient._on_publish_received -> Hon.notify ->
self._notify_function(None), with no loop marshalling. The integration
registered coordinator.async_set_updated_data directly as that
subscriber, so the loop-affine @callback (which fans out to listeners and
arms loop timers via _schedule_refresh) was being invoked from a foreign
thread. HA Core 2026.5.x enforces thread safety and raises on this,
breaking live state updates on 2026.5.4 even with PR #43 applied.

Wrap the subscriber in a @callback that re-dispatches via
hass.loop.call_soon_threadsafe, so the coordinator update always runs on
the event loop. The None payload is preserved (entities read state from
self._device, not coordinator.data, so it is only a listener trigger).

Refs: https://developers.home-assistant.io/docs/asyncio_thread_safety/
Fixes mmalolepszy/hon-revived#44

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 10:54:56 +03:00
..
hon fix(thread-safety): marshal pyhon MQTT push updates onto the event loop 2026-06-12 10:54:56 +03:00