/
/
/
1"""Helpers for the Sonos (S2) Provider."""
2
3from __future__ import annotations
4
5from typing import TYPE_CHECKING
6
7from zeroconf import IPVersion
8
9if TYPE_CHECKING:
10 from zeroconf.asyncio import AsyncServiceInfo
11
12
13def get_primary_ip_address(discovery_info: AsyncServiceInfo) -> str | None:
14 """Get primary IP address from zeroconf discovery info."""
15 for address in discovery_info.ip_addresses_by_version(IPVersion.V4Only):
16 if address.is_loopback or address.is_link_local or address.is_unspecified:
17 continue
18 return str(address)
19 # fall back to IPv6 addresses if no usable IPv4 address found
20 for address in discovery_info.ip_addresses_by_version(IPVersion.V6Only):
21 if address.is_loopback or address.is_link_local or address.is_unspecified:
22 continue
23 return str(address)
24 return None
25