diff --git a/esphome/helpers.py b/esphome/helpers.py index fb7b71775d..8dbbbbce11 100644 --- a/esphome/helpers.py +++ b/esphome/helpers.py @@ -250,34 +250,42 @@ def resolve_ip_address( # If we have uncached hosts (only non-IP hostnames), resolve them if uncached_hosts: - from esphome.resolver import AsyncResolver + from esphome.core import EsphomeError - resolver = AsyncResolver(uncached_hosts, port) - addr_infos = resolver.resolve() - # Convert aioesphomeapi AddrInfo to our format - for addr_info in addr_infos: - sockaddr = addr_info.sockaddr - if addr_info.family == socket.AF_INET6: - # IPv6 - sockaddr_tuple = ( - sockaddr.address, - sockaddr.port, - sockaddr.flowinfo, - sockaddr.scope_id, + try: + from esphome.resolver import AsyncResolver + + resolver = AsyncResolver(uncached_hosts, port) + addr_infos = resolver.resolve() + # Convert aioesphomeapi AddrInfo to our format + for addr_info in addr_infos: + sockaddr = addr_info.sockaddr + if addr_info.family == socket.AF_INET6: + # IPv6 + sockaddr_tuple = ( + sockaddr.address, + sockaddr.port, + sockaddr.flowinfo, + sockaddr.scope_id, + ) + else: + # IPv4 + sockaddr_tuple = (sockaddr.address, sockaddr.port) + + res.append( + ( + addr_info.family, + addr_info.type, + addr_info.proto, + "", # canonname + sockaddr_tuple, + ) ) + except EsphomeError as err: + if len(res) > 0: + _LOGGER.warning(err) else: - # IPv4 - sockaddr_tuple = (sockaddr.address, sockaddr.port) - - res.append( - ( - addr_info.family, - addr_info.type, - addr_info.proto, - "", # canonname - sockaddr_tuple, - ) - ) + raise err # Sort by preference res.sort(key=addr_preference_)