mirror of
https://github.com/home-assistant/core.git
synced 2025-07-08 22:07:10 +00:00
Update esphome reconnect logic to use newer RecordUpdateListener logic (#57057)
This commit is contained in:
parent
723596076d
commit
d08b65db7d
@ -24,7 +24,7 @@ from aioesphomeapi import (
|
|||||||
UserServiceArgType,
|
UserServiceArgType,
|
||||||
)
|
)
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
from zeroconf import DNSPointer, DNSRecord, RecordUpdateListener, Zeroconf
|
from zeroconf import DNSPointer, RecordUpdate, RecordUpdateListener, Zeroconf
|
||||||
|
|
||||||
from homeassistant import const
|
from homeassistant import const
|
||||||
from homeassistant.components import zeroconf
|
from homeassistant.components import zeroconf
|
||||||
@ -518,34 +518,40 @@ class ReconnectLogic(RecordUpdateListener):
|
|||||||
"""Stop as an async callback function."""
|
"""Stop as an async callback function."""
|
||||||
self._hass.async_create_task(self.stop())
|
self._hass.async_create_task(self.stop())
|
||||||
|
|
||||||
@callback
|
def async_update_records(
|
||||||
def _set_reconnect(self) -> None:
|
self, zc: Zeroconf, now: float, records: list[RecordUpdate]
|
||||||
self._reconnect_event.set()
|
) -> None:
|
||||||
|
"""Listen to zeroconf updated mDNS records.
|
||||||
|
|
||||||
def update_record(self, zc: Zeroconf, now: float, record: DNSRecord) -> None:
|
This is a mDNS record from the device and could mean it just woke up.
|
||||||
"""Listen to zeroconf updated mDNS records."""
|
"""
|
||||||
if not isinstance(record, DNSPointer):
|
# Check if already connected, no lock needed for this access and
|
||||||
# We only consider PTR records and match using the alias name
|
# bail if either the entry was already teared down or we haven't received device info yet
|
||||||
return
|
if (
|
||||||
if self._entry_data is None or self._entry_data.device_info is None:
|
self._connected
|
||||||
# Either the entry was already teared down or we haven't received device info yet
|
or self._reconnect_event.is_set()
|
||||||
|
or self._entry_data is None
|
||||||
|
or self._entry_data.device_info is None
|
||||||
|
):
|
||||||
return
|
return
|
||||||
filter_alias = f"{self._entry_data.device_info.name}._esphomelib._tcp.local."
|
filter_alias = f"{self._entry_data.device_info.name}._esphomelib._tcp.local."
|
||||||
if record.alias != filter_alias:
|
|
||||||
return
|
|
||||||
|
|
||||||
# This is a mDNS record from the device and could mean it just woke up
|
for record_update in records:
|
||||||
# Check if already connected, no lock needed for this access
|
# We only consider PTR records and match using the alias name
|
||||||
if self._connected:
|
if (
|
||||||
return
|
not isinstance(record_update.new, DNSPointer)
|
||||||
|
or record_update.new.alias != filter_alias
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
|
||||||
# Tell reconnection logic to retry connection attempt now (even before reconnect timer finishes)
|
# Tell reconnection logic to retry connection attempt now (even before reconnect timer finishes)
|
||||||
_LOGGER.debug(
|
_LOGGER.debug(
|
||||||
"%s: Triggering reconnect because of received mDNS record %s",
|
"%s: Triggering reconnect because of received mDNS record %s",
|
||||||
self._host,
|
self._host,
|
||||||
record,
|
record_update.new,
|
||||||
)
|
)
|
||||||
self._hass.add_job(self._set_reconnect)
|
self._reconnect_event.set()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
async def _async_setup_device_registry(
|
async def _async_setup_device_registry(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user