/
/
/
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.parsed_addresses(IPVersion.V4Only):
16 if address.startswith("127"):
17 # filter out loopback address
18 continue
19 if address.startswith("169.254"):
20 # filter out APIPA address
21 continue
22 return address
23 return None
24