Use new ServiceInfo location in components (part 2) (#135685)

This commit is contained in:
epenet 2025-01-15 15:49:01 +01:00 committed by GitHub
parent bc8a2b58d3
commit 19a89ebcf3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
38 changed files with 141 additions and 114 deletions

View File

@ -16,7 +16,6 @@ from pyipp import (
) )
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import ( from homeassistant.const import (
CONF_HOST, CONF_HOST,
@ -28,6 +27,7 @@ from homeassistant.const import (
) )
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import CONF_BASE_PATH, CONF_SERIAL, DOMAIN from .const import CONF_BASE_PATH, CONF_SERIAL, DOMAIN
@ -103,7 +103,7 @@ class IPPFlowHandler(ConfigFlow, domain=DOMAIN):
return self.async_create_entry(title=user_input[CONF_HOST], data=user_input) return self.async_create_entry(title=user_input[CONF_HOST], data=user_input)
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle zeroconf discovery.""" """Handle zeroconf discovery."""
host = discovery_info.host host = discovery_info.host

View File

@ -14,7 +14,6 @@ from pyisy.configuration import Configuration
from pyisy.connection import Connection from pyisy.connection import Connection
import voluptuous as vol import voluptuous as vol
from homeassistant.components import dhcp, ssdp
from homeassistant.config_entries import ( from homeassistant.config_entries import (
SOURCE_IGNORE, SOURCE_IGNORE,
ConfigEntry, ConfigEntry,
@ -27,6 +26,12 @@ from homeassistant.core import HomeAssistant, callback
from homeassistant.data_entry_flow import AbortFlow from homeassistant.data_entry_flow import AbortFlow
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import aiohttp_client from homeassistant.helpers import aiohttp_client
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from homeassistant.helpers.service_info.ssdp import (
ATTR_UPNP_FRIENDLY_NAME,
ATTR_UPNP_UDN,
SsdpServiceInfo,
)
from .const import ( from .const import (
CONF_IGNORE_STRING, CONF_IGNORE_STRING,
@ -209,7 +214,7 @@ class Isy994ConfigFlow(ConfigFlow, domain=DOMAIN):
raise AbortFlow("already_configured") raise AbortFlow("already_configured")
async def async_step_dhcp( async def async_step_dhcp(
self, discovery_info: dhcp.DhcpServiceInfo self, discovery_info: DhcpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle a discovered ISY/IoX device via dhcp.""" """Handle a discovered ISY/IoX device via dhcp."""
friendly_name = discovery_info.hostname friendly_name = discovery_info.hostname
@ -232,14 +237,14 @@ class Isy994ConfigFlow(ConfigFlow, domain=DOMAIN):
return await self.async_step_user() return await self.async_step_user()
async def async_step_ssdp( async def async_step_ssdp(
self, discovery_info: ssdp.SsdpServiceInfo self, discovery_info: SsdpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle a discovered ISY/IoX Device.""" """Handle a discovered ISY/IoX Device."""
friendly_name = discovery_info.upnp[ssdp.ATTR_UPNP_FRIENDLY_NAME] friendly_name = discovery_info.upnp[ATTR_UPNP_FRIENDLY_NAME]
url = discovery_info.ssdp_location url = discovery_info.ssdp_location
assert isinstance(url, str) assert isinstance(url, str)
parsed_url = urlparse(url) parsed_url = urlparse(url)
mac = discovery_info.upnp[ssdp.ATTR_UPNP_UDN] mac = discovery_info.upnp[ATTR_UPNP_UDN]
mac = mac.removeprefix(UDN_UUID_PREFIX) mac = mac.removeprefix(UDN_UUID_PREFIX)
url = url.removesuffix(ISY_URL_POSTFIX) url = url.removesuffix(ISY_URL_POSTFIX)

View File

@ -7,9 +7,9 @@ from urllib.parse import urlparse
import voluptuous as vol import voluptuous as vol
from homeassistant.components import ssdp
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST from homeassistant.const import CONF_HOST
from homeassistant.helpers.service_info.ssdp import ATTR_UPNP_SERIAL, SsdpServiceInfo
from . import KaleidescapeDeviceInfo, UnsupportedError, validate_host from . import KaleidescapeDeviceInfo, UnsupportedError, validate_host
from .const import DEFAULT_HOST, DOMAIN, NAME as KALEIDESCAPE_NAME from .const import DEFAULT_HOST, DOMAIN, NAME as KALEIDESCAPE_NAME
@ -61,11 +61,11 @@ class KaleidescapeConfigFlow(ConfigFlow, domain=DOMAIN):
) )
async def async_step_ssdp( async def async_step_ssdp(
self, discovery_info: ssdp.SsdpServiceInfo self, discovery_info: SsdpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle discovered device.""" """Handle discovered device."""
host = cast(str, urlparse(discovery_info.ssdp_location).hostname) host = cast(str, urlparse(discovery_info.ssdp_location).hostname)
serial_number = discovery_info.upnp[ssdp.ATTR_UPNP_SERIAL] serial_number = discovery_info.upnp[ATTR_UPNP_SERIAL]
await self.async_set_unique_id(serial_number) await self.async_set_unique_id(serial_number)
self._abort_if_unique_id_configured(updates={CONF_HOST: host}) self._abort_if_unique_id_configured(updates={CONF_HOST: host})

View File

@ -8,7 +8,6 @@ from urllib.parse import urlparse
from ndms2_client import Client, ConnectionException, InterfaceInfo, TelnetConnection from ndms2_client import Client, ConnectionException, InterfaceInfo, TelnetConnection
import voluptuous as vol import voluptuous as vol
from homeassistant.components import ssdp
from homeassistant.config_entries import ( from homeassistant.config_entries import (
ConfigEntry, ConfigEntry,
ConfigFlow, ConfigFlow,
@ -24,6 +23,11 @@ from homeassistant.const import (
) )
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.service_info.ssdp import (
ATTR_UPNP_FRIENDLY_NAME,
ATTR_UPNP_UDN,
SsdpServiceInfo,
)
from homeassistant.helpers.typing import VolDictType from homeassistant.helpers.typing import VolDictType
from .const import ( from .const import (
@ -105,23 +109,23 @@ class KeeneticFlowHandler(ConfigFlow, domain=DOMAIN):
) )
async def async_step_ssdp( async def async_step_ssdp(
self, discovery_info: ssdp.SsdpServiceInfo self, discovery_info: SsdpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle a discovered device.""" """Handle a discovered device."""
friendly_name = discovery_info.upnp.get(ssdp.ATTR_UPNP_FRIENDLY_NAME, "") friendly_name = discovery_info.upnp.get(ATTR_UPNP_FRIENDLY_NAME, "")
# Filter out items not having "keenetic" in their name # Filter out items not having "keenetic" in their name
if "keenetic" not in friendly_name.lower(): if "keenetic" not in friendly_name.lower():
return self.async_abort(reason="not_keenetic_ndms2") return self.async_abort(reason="not_keenetic_ndms2")
# Filters out items having no/empty UDN # Filters out items having no/empty UDN
if not discovery_info.upnp.get(ssdp.ATTR_UPNP_UDN): if not discovery_info.upnp.get(ATTR_UPNP_UDN):
return self.async_abort(reason="no_udn") return self.async_abort(reason="no_udn")
# We can cast the hostname to str because the ssdp_location is not bytes and # We can cast the hostname to str because the ssdp_location is not bytes and
# not a relative url # not a relative url
host = cast(str, urlparse(discovery_info.ssdp_location).hostname) host = cast(str, urlparse(discovery_info.ssdp_location).hostname)
await self.async_set_unique_id(discovery_info.upnp[ssdp.ATTR_UPNP_UDN]) await self.async_set_unique_id(discovery_info.upnp[ATTR_UPNP_UDN])
self._abort_if_unique_id_configured(updates={CONF_HOST: host}) self._abort_if_unique_id_configured(updates={CONF_HOST: host})
self._async_abort_entries_match({CONF_HOST: host}) self._async_abort_entries_match({CONF_HOST: host})

View File

@ -12,7 +12,6 @@ from urllib.parse import urlparse
import voluptuous as vol import voluptuous as vol
from homeassistant.components import ssdp
from homeassistant.components.binary_sensor import ( from homeassistant.components.binary_sensor import (
DEVICE_CLASSES_SCHEMA, DEVICE_CLASSES_SCHEMA,
BinarySensorDeviceClass, BinarySensorDeviceClass,
@ -40,6 +39,11 @@ from homeassistant.const import (
) )
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.service_info.ssdp import (
ATTR_UPNP_MANUFACTURER,
ATTR_UPNP_MODEL_NAME,
SsdpServiceInfo,
)
from .const import ( from .const import (
CONF_ACTIVATION, CONF_ACTIVATION,
@ -254,7 +258,7 @@ class KonnectedFlowHandler(ConfigFlow, domain=DOMAIN):
return await self.async_step_user() return await self.async_step_user()
async def async_step_ssdp( async def async_step_ssdp(
self, discovery_info: ssdp.SsdpServiceInfo self, discovery_info: SsdpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle a discovered konnected panel. """Handle a discovered konnected panel.
@ -264,16 +268,16 @@ class KonnectedFlowHandler(ConfigFlow, domain=DOMAIN):
_LOGGER.debug(discovery_info) _LOGGER.debug(discovery_info)
try: try:
if discovery_info.upnp[ssdp.ATTR_UPNP_MANUFACTURER] != KONN_MANUFACTURER: if discovery_info.upnp[ATTR_UPNP_MANUFACTURER] != KONN_MANUFACTURER:
return self.async_abort(reason="not_konn_panel") return self.async_abort(reason="not_konn_panel")
if not any( if not any(
name in discovery_info.upnp[ssdp.ATTR_UPNP_MODEL_NAME] name in discovery_info.upnp[ATTR_UPNP_MODEL_NAME]
for name in KONN_PANEL_MODEL_NAMES for name in KONN_PANEL_MODEL_NAMES
): ):
_LOGGER.warning( _LOGGER.warning(
"Discovered unrecognized Konnected device %s", "Discovered unrecognized Konnected device %s",
discovery_info.upnp.get(ssdp.ATTR_UPNP_MODEL_NAME, "Unknown"), discovery_info.upnp.get(ATTR_UPNP_MODEL_NAME, "Unknown"),
) )
return self.async_abort(reason="not_konn_panel") return self.async_abort(reason="not_konn_panel")

View File

@ -9,12 +9,12 @@ from aiolifx.aiolifx import Light
from aiolifx.connection import LIFXConnection from aiolifx.connection import LIFXConnection
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_DEVICE, CONF_HOST from homeassistant.const import CONF_DEVICE, CONF_HOST
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers import device_registry as dr from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from homeassistant.helpers.typing import DiscoveryInfoType from homeassistant.helpers.typing import DiscoveryInfoType
from .const import ( from .const import (
@ -72,7 +72,7 @@ class LifXConfigFlow(ConfigFlow, domain=DOMAIN):
return await self._async_handle_discovery(host) return await self._async_handle_discovery(host)
async def async_step_homekit( async def async_step_homekit(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle HomeKit discovery.""" """Handle HomeKit discovery."""
return await self._async_handle_discovery(host=discovery_info.host) return await self._async_handle_discovery(host=discovery_info.host)

View File

@ -9,9 +9,9 @@ from linkplay.discovery import linkplay_factory_httpapi_bridge
from linkplay.exceptions import LinkPlayRequestException from linkplay.exceptions import LinkPlayRequestException
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST, CONF_MODEL from homeassistant.const import CONF_HOST, CONF_MODEL
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import DOMAIN from .const import DOMAIN
from .utils import async_get_client_session from .utils import async_get_client_session
@ -27,7 +27,7 @@ class LinkPlayConfigFlow(ConfigFlow, domain=DOMAIN):
self.data: dict[str, Any] = {} self.data: dict[str, Any] = {}
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle Zeroconf discovery.""" """Handle Zeroconf discovery."""

View File

@ -9,10 +9,10 @@ import aiohttp
from aiolookin import Device, LookInHttpProtocol, NoUsableService from aiolookin import Device, LookInHttpProtocol, NoUsableService
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST from homeassistant.const import CONF_HOST
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import DOMAIN from .const import DOMAIN
@ -28,7 +28,7 @@ class LookinFlowHandler(ConfigFlow, domain=DOMAIN):
self._name: str | None = None self._name: str | None = None
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Start a discovery flow from zeroconf.""" """Start a discovery flow from zeroconf."""
uid: str = discovery_info.hostname.removesuffix(".local.") uid: str = discovery_info.hostname.removesuffix(".local.")

View File

@ -12,10 +12,10 @@ from pylutron_caseta.pairing import PAIR_CA, PAIR_CERT, PAIR_KEY, async_pair
from pylutron_caseta.smartbridge import Smartbridge from pylutron_caseta.smartbridge import Smartbridge
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST, CONF_NAME from homeassistant.const import CONF_HOST, CONF_NAME
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import ( from .const import (
ABORT_REASON_CANNOT_CONNECT, ABORT_REASON_CANNOT_CONNECT,
@ -69,7 +69,7 @@ class LutronCasetaFlowHandler(ConfigFlow, domain=DOMAIN):
return self.async_show_form(step_id="user", data_schema=DATA_SCHEMA_USER) return self.async_show_form(step_id="user", data_schema=DATA_SCHEMA_USER)
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle a flow initialized by zeroconf discovery.""" """Handle a flow initialized by zeroconf discovery."""
hostname = discovery_info.hostname hostname = discovery_info.hostname
@ -90,7 +90,7 @@ class LutronCasetaFlowHandler(ConfigFlow, domain=DOMAIN):
return await self.async_step_link() return await self.async_step_link()
async def async_step_homekit( async def async_step_homekit(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle a flow initialized by homekit discovery.""" """Handle a flow initialized by homekit discovery."""
return await self.async_step_zeroconf(discovery_info) return await self.async_step_zeroconf(discovery_info)

View File

@ -7,10 +7,10 @@ from typing import Any
from aiomodernforms import ModernFormsConnectionError, ModernFormsDevice from aiomodernforms import ModernFormsConnectionError, ModernFormsDevice
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import SOURCE_ZEROCONF, ConfigFlow, ConfigFlowResult from homeassistant.config_entries import SOURCE_ZEROCONF, ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST, CONF_MAC from homeassistant.const import CONF_HOST, CONF_MAC
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import DOMAIN from .const import DOMAIN
@ -39,7 +39,7 @@ class ModernFormsFlowHandler(ConfigFlow, domain=DOMAIN):
return await self._handle_config_flow() return await self._handle_config_flow()
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle zeroconf discovery.""" """Handle zeroconf discovery."""
host = discovery_info.hostname.rstrip(".") host = discovery_info.hostname.rstrip(".")

View File

@ -7,7 +7,6 @@ from typing import Any
from motionblinds import MotionDiscovery, MotionGateway from motionblinds import MotionDiscovery, MotionGateway
import voluptuous as vol import voluptuous as vol
from homeassistant.components import dhcp
from homeassistant.config_entries import ( from homeassistant.config_entries import (
ConfigEntry, ConfigEntry,
ConfigFlow, ConfigFlow,
@ -17,6 +16,7 @@ from homeassistant.config_entries import (
from homeassistant.const import CONF_API_KEY, CONF_HOST from homeassistant.const import CONF_API_KEY, CONF_HOST
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.device_registry import format_mac from homeassistant.helpers.device_registry import format_mac
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from .const import ( from .const import (
CONF_INTERFACE, CONF_INTERFACE,
@ -82,7 +82,7 @@ class MotionBlindsFlowHandler(ConfigFlow, domain=DOMAIN):
return OptionsFlowHandler() return OptionsFlowHandler()
async def async_step_dhcp( async def async_step_dhcp(
self, discovery_info: dhcp.DhcpServiceInfo self, discovery_info: DhcpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle discovery via dhcp.""" """Handle discovery via dhcp."""
mac_address = format_mac(discovery_info.macaddress).replace(":", "") mac_address = format_mac(discovery_info.macaddress).replace(":", "")

View File

@ -7,7 +7,6 @@ from typing import Any
import motionmount import motionmount
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ( from homeassistant.config_entries import (
DEFAULT_DISCOVERY_UNIQUE_ID, DEFAULT_DISCOVERY_UNIQUE_ID,
ConfigFlow, ConfigFlow,
@ -15,6 +14,7 @@ from homeassistant.config_entries import (
) )
from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT, CONF_UUID from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT, CONF_UUID
from homeassistant.helpers.device_registry import format_mac from homeassistant.helpers.device_registry import format_mac
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import DOMAIN, EMPTY_MAC from .const import DOMAIN, EMPTY_MAC
@ -80,7 +80,7 @@ class MotionMountFlowHandler(ConfigFlow, domain=DOMAIN):
return self.async_create_entry(title=name, data=user_input) return self.async_create_entry(title=name, data=user_input)
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle zeroconf discovery.""" """Handle zeroconf discovery."""

View File

@ -13,11 +13,11 @@ from music_assistant_client.exceptions import (
from music_assistant_models.api import ServerInfoMessage from music_assistant_models.api import ServerInfoMessage
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_URL from homeassistant.const import CONF_URL
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import aiohttp_client from homeassistant.helpers import aiohttp_client
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import DOMAIN, LOGGER from .const import DOMAIN, LOGGER
@ -93,7 +93,7 @@ class MusicAssistantConfigFlow(ConfigFlow, domain=DOMAIN):
return self.async_show_form(step_id="user", data_schema=get_manual_schema({})) return self.async_show_form(step_id="user", data_schema=get_manual_schema({}))
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle a discovered Mass server. """Handle a discovered Mass server.

View File

@ -17,12 +17,12 @@ from nettigo_air_monitor import (
) )
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.device_registry import format_mac from homeassistant.helpers.device_registry import format_mac
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import DOMAIN from .const import DOMAIN
@ -138,7 +138,7 @@ class NAMFlowHandler(ConfigFlow, domain=DOMAIN):
) )
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle zeroconf discovery.""" """Handle zeroconf discovery."""
self.host = discovery_info.host self.host = discovery_info.host

View File

@ -10,11 +10,15 @@ from typing import Any, Final, cast
from aionanoleaf import InvalidToken, Nanoleaf, Unauthorized, Unavailable from aionanoleaf import InvalidToken, Nanoleaf, Unauthorized, Unavailable
import voluptuous as vol import voluptuous as vol
from homeassistant.components import ssdp, zeroconf
from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlow, ConfigFlowResult from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST, CONF_TOKEN from homeassistant.const import CONF_HOST, CONF_TOKEN
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.json import save_json from homeassistant.helpers.json import save_json
from homeassistant.helpers.service_info.ssdp import SsdpServiceInfo
from homeassistant.helpers.service_info.zeroconf import (
ATTR_PROPERTIES_ID,
ZeroconfServiceInfo,
)
from homeassistant.util.json import JsonObjectType, JsonValueType, load_json_object from homeassistant.util.json import JsonObjectType, JsonValueType, load_json_object
from .const import DOMAIN from .const import DOMAIN
@ -86,31 +90,31 @@ class NanoleafConfigFlow(ConfigFlow, domain=DOMAIN):
return await self.async_step_link() return await self.async_step_link()
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle Nanoleaf Zeroconf discovery.""" """Handle Nanoleaf Zeroconf discovery."""
_LOGGER.debug("Zeroconf discovered: %s", discovery_info) _LOGGER.debug("Zeroconf discovered: %s", discovery_info)
return await self._async_homekit_zeroconf_discovery_handler(discovery_info) return await self._async_homekit_zeroconf_discovery_handler(discovery_info)
async def async_step_homekit( async def async_step_homekit(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle Nanoleaf Homekit discovery.""" """Handle Nanoleaf Homekit discovery."""
_LOGGER.debug("Homekit discovered: %s", discovery_info) _LOGGER.debug("Homekit discovered: %s", discovery_info)
return await self._async_homekit_zeroconf_discovery_handler(discovery_info) return await self._async_homekit_zeroconf_discovery_handler(discovery_info)
async def _async_homekit_zeroconf_discovery_handler( async def _async_homekit_zeroconf_discovery_handler(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle Nanoleaf Homekit and Zeroconf discovery.""" """Handle Nanoleaf Homekit and Zeroconf discovery."""
return await self._async_discovery_handler( return await self._async_discovery_handler(
discovery_info.host, discovery_info.host,
discovery_info.name.replace(f".{discovery_info.type}", ""), discovery_info.name.replace(f".{discovery_info.type}", ""),
discovery_info.properties[zeroconf.ATTR_PROPERTIES_ID], discovery_info.properties[ATTR_PROPERTIES_ID],
) )
async def async_step_ssdp( async def async_step_ssdp(
self, discovery_info: ssdp.SsdpServiceInfo self, discovery_info: SsdpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle Nanoleaf SSDP discovery.""" """Handle Nanoleaf SSDP discovery."""
_LOGGER.debug("SSDP discovered: %s", discovery_info) _LOGGER.debug("SSDP discovered: %s", discovery_info)

View File

@ -9,7 +9,6 @@ from urllib.parse import urlparse
from pynetgear import DEFAULT_HOST, DEFAULT_PORT, DEFAULT_USER from pynetgear import DEFAULT_HOST, DEFAULT_PORT, DEFAULT_USER
import voluptuous as vol import voluptuous as vol
from homeassistant.components import ssdp
from homeassistant.config_entries import ( from homeassistant.config_entries import (
ConfigEntry, ConfigEntry,
ConfigFlow, ConfigFlow,
@ -24,6 +23,12 @@ from homeassistant.const import (
CONF_USERNAME, CONF_USERNAME,
) )
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.service_info.ssdp import (
ATTR_UPNP_MODEL_NAME,
ATTR_UPNP_MODEL_NUMBER,
ATTR_UPNP_SERIAL,
SsdpServiceInfo,
)
from homeassistant.util.network import is_ipv4_address from homeassistant.util.network import is_ipv4_address
from .const import ( from .const import (
@ -129,7 +134,7 @@ class NetgearFlowHandler(ConfigFlow, domain=DOMAIN):
) )
async def async_step_ssdp( async def async_step_ssdp(
self, discovery_info: ssdp.SsdpServiceInfo self, discovery_info: SsdpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Initialize flow from ssdp.""" """Initialize flow from ssdp."""
updated_data: dict[str, str | int | bool] = {} updated_data: dict[str, str | int | bool] = {}
@ -144,10 +149,10 @@ class NetgearFlowHandler(ConfigFlow, domain=DOMAIN):
_LOGGER.debug("Netgear ssdp discovery info: %s", discovery_info) _LOGGER.debug("Netgear ssdp discovery info: %s", discovery_info)
if ssdp.ATTR_UPNP_SERIAL not in discovery_info.upnp: if ATTR_UPNP_SERIAL not in discovery_info.upnp:
return self.async_abort(reason="no_serial") return self.async_abort(reason="no_serial")
await self.async_set_unique_id(discovery_info.upnp[ssdp.ATTR_UPNP_SERIAL]) await self.async_set_unique_id(discovery_info.upnp[ATTR_UPNP_SERIAL])
self._abort_if_unique_id_configured(updates=updated_data) self._abort_if_unique_id_configured(updates=updated_data)
if device_url.scheme == "https": if device_url.scheme == "https":
@ -157,18 +162,14 @@ class NetgearFlowHandler(ConfigFlow, domain=DOMAIN):
updated_data[CONF_PORT] = DEFAULT_PORT updated_data[CONF_PORT] = DEFAULT_PORT
for model in MODELS_PORT_80: for model in MODELS_PORT_80:
if discovery_info.upnp.get(ssdp.ATTR_UPNP_MODEL_NUMBER, "").startswith( if discovery_info.upnp.get(ATTR_UPNP_MODEL_NUMBER, "").startswith(
model model
) or discovery_info.upnp.get(ssdp.ATTR_UPNP_MODEL_NAME, "").startswith( ) or discovery_info.upnp.get(ATTR_UPNP_MODEL_NAME, "").startswith(model):
model
):
updated_data[CONF_PORT] = PORT_80 updated_data[CONF_PORT] = PORT_80
for model in MODELS_PORT_5555: for model in MODELS_PORT_5555:
if discovery_info.upnp.get(ssdp.ATTR_UPNP_MODEL_NUMBER, "").startswith( if discovery_info.upnp.get(ATTR_UPNP_MODEL_NUMBER, "").startswith(
model model
) or discovery_info.upnp.get(ssdp.ATTR_UPNP_MODEL_NAME, "").startswith( ) or discovery_info.upnp.get(ATTR_UPNP_MODEL_NAME, "").startswith(model):
model
):
updated_data[CONF_PORT] = PORT_5555 updated_data[CONF_PORT] = PORT_5555
updated_data[CONF_SSL] = True updated_data[CONF_SSL] = True

View File

@ -9,10 +9,10 @@ from pynuki.bridge import InvalidCredentialsException
from requests.exceptions import RequestException from requests.exceptions import RequestException
import voluptuous as vol import voluptuous as vol
from homeassistant.components import dhcp
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST, CONF_PORT, CONF_TOKEN from homeassistant.const import CONF_HOST, CONF_PORT, CONF_TOKEN
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from .const import CONF_ENCRYPT_TOKEN, DEFAULT_PORT, DEFAULT_TIMEOUT, DOMAIN from .const import CONF_ENCRYPT_TOKEN, DEFAULT_PORT, DEFAULT_TIMEOUT, DOMAIN
from .helpers import CannotConnect, InvalidAuth, parse_id from .helpers import CannotConnect, InvalidAuth, parse_id
@ -75,7 +75,7 @@ class NukiConfigFlow(ConfigFlow, domain=DOMAIN):
return await self.async_step_validate(user_input) return await self.async_step_validate(user_input)
async def async_step_dhcp( async def async_step_dhcp(
self, discovery_info: dhcp.DhcpServiceInfo self, discovery_info: DhcpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Prepare configuration for a DHCP discovered Nuki bridge.""" """Prepare configuration for a DHCP discovered Nuki bridge."""
await self.async_set_unique_id(discovery_info.hostname[12:].upper()) await self.async_set_unique_id(discovery_info.hostname[12:].upper())

View File

@ -9,7 +9,6 @@ from typing import Any
from aionut import NUTError, NUTLoginError from aionut import NUTError, NUTLoginError
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ( from homeassistant.config_entries import (
ConfigEntry, ConfigEntry,
ConfigFlow, ConfigFlow,
@ -27,6 +26,7 @@ from homeassistant.const import (
) )
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.data_entry_flow import AbortFlow from homeassistant.data_entry_flow import AbortFlow
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from . import PyNUTData from . import PyNUTData
from .const import DEFAULT_HOST, DEFAULT_PORT, DEFAULT_SCAN_INTERVAL, DOMAIN from .const import DEFAULT_HOST, DEFAULT_PORT, DEFAULT_SCAN_INTERVAL, DOMAIN
@ -95,7 +95,7 @@ class NutConfigFlow(ConfigFlow, domain=DOMAIN):
self.reauth_entry: ConfigEntry | None = None self.reauth_entry: ConfigEntry | None = None
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Prepare configuration for a discovered nut device.""" """Prepare configuration for a discovered nut device."""
await self._async_handle_discovery_without_unique_id() await self._async_handle_discovery_without_unique_id()

View File

@ -8,11 +8,11 @@ from typing import Any
from pyobihai import PyObihai from pyobihai import PyObihai
import voluptuous as vol import voluptuous as vol
from homeassistant.components import dhcp
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import format_mac from homeassistant.helpers.device_registry import format_mac
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from .connectivity import validate_auth from .connectivity import validate_auth
from .const import DEFAULT_PASSWORD, DEFAULT_USERNAME, DOMAIN from .const import DEFAULT_PASSWORD, DEFAULT_USERNAME, DOMAIN
@ -54,7 +54,7 @@ class ObihaiFlowHandler(ConfigFlow, domain=DOMAIN):
VERSION = 2 VERSION = 2
discovery_schema: vol.Schema | None = None discovery_schema: vol.Schema | None = None
_dhcp_discovery_info: dhcp.DhcpServiceInfo | None = None _dhcp_discovery_info: DhcpServiceInfo | None = None
async def async_step_user( async def async_step_user(
self, user_input: dict[str, Any] | None = None self, user_input: dict[str, Any] | None = None
@ -94,7 +94,7 @@ class ObihaiFlowHandler(ConfigFlow, domain=DOMAIN):
) )
async def async_step_dhcp( async def async_step_dhcp(
self, discovery_info: dhcp.DhcpServiceInfo self, discovery_info: DhcpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Prepare configuration for a DHCP discovered Obihai.""" """Prepare configuration for a DHCP discovered Obihai."""

View File

@ -12,7 +12,6 @@ from pyoctoprintapi import ApiError, OctoprintClient, OctoprintException
import voluptuous as vol import voluptuous as vol
from yarl import URL from yarl import URL
from homeassistant.components import ssdp, zeroconf
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import ( from homeassistant.const import (
CONF_API_KEY, CONF_API_KEY,
@ -26,6 +25,8 @@ from homeassistant.const import (
from homeassistant.data_entry_flow import AbortFlow from homeassistant.data_entry_flow import AbortFlow
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.service_info.ssdp import SsdpServiceInfo
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from homeassistant.util.ssl import get_default_context, get_default_no_verify_context from homeassistant.util.ssl import get_default_context, get_default_no_verify_context
from .const import DOMAIN from .const import DOMAIN
@ -167,7 +168,7 @@ class OctoPrintConfigFlow(ConfigFlow, domain=DOMAIN):
return await self.async_step_user(import_data) return await self.async_step_user(import_data)
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle discovery flow.""" """Handle discovery flow."""
uuid = discovery_info.properties["uuid"] uuid = discovery_info.properties["uuid"]
@ -193,7 +194,7 @@ class OctoPrintConfigFlow(ConfigFlow, domain=DOMAIN):
return await self.async_step_user() return await self.async_step_user()
async def async_step_ssdp( async def async_step_ssdp(
self, discovery_info: ssdp.SsdpServiceInfo self, discovery_info: SsdpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle ssdp discovery flow.""" """Handle ssdp discovery flow."""
uuid = discovery_info.upnp["UDN"][5:] uuid = discovery_info.upnp["UDN"][5:]

View File

@ -8,13 +8,13 @@ from typing import Any
from pyownet import protocol from pyownet import protocol
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult, OptionsFlow from homeassistant.config_entries import ConfigFlow, ConfigFlowResult, OptionsFlow
from homeassistant.const import CONF_HOST, CONF_PORT from homeassistant.const import CONF_HOST, CONF_PORT
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import config_validation as cv, device_registry as dr from homeassistant.helpers import config_validation as cv, device_registry as dr
from homeassistant.helpers.device_registry import DeviceEntry from homeassistant.helpers.device_registry import DeviceEntry
from homeassistant.helpers.service_info.hassio import HassioServiceInfo from homeassistant.helpers.service_info.hassio import HassioServiceInfo
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import ( from .const import (
DEFAULT_HOST, DEFAULT_HOST,
@ -117,7 +117,7 @@ class OneWireFlowHandler(ConfigFlow, domain=DOMAIN):
return await self.async_step_discovery_confirm() return await self.async_step_discovery_confirm()
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle zeroconf discovery.""" """Handle zeroconf discovery."""
await self._async_handle_discovery_without_unique_id() await self._async_handle_discovery_without_unique_id()

View File

@ -6,7 +6,6 @@ from typing import Any
import voluptuous as vol import voluptuous as vol
from yarl import URL from yarl import URL
from homeassistant.components import ssdp
from homeassistant.config_entries import ( from homeassistant.config_entries import (
SOURCE_RECONFIGURE, SOURCE_RECONFIGURE,
ConfigEntry, ConfigEntry,
@ -26,6 +25,7 @@ from homeassistant.helpers.selector import (
SelectSelectorMode, SelectSelectorMode,
TextSelector, TextSelector,
) )
from homeassistant.helpers.service_info.ssdp import SsdpServiceInfo
from .const import ( from .const import (
CONF_RECEIVER_MAX_VOLUME, CONF_RECEIVER_MAX_VOLUME,
@ -168,7 +168,7 @@ class OnkyoConfigFlow(ConfigFlow, domain=DOMAIN):
) )
async def async_step_ssdp( async def async_step_ssdp(
self, discovery_info: ssdp.SsdpServiceInfo self, discovery_info: SsdpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle flow initialized by SSDP discovery.""" """Handle flow initialized by SSDP discovery."""
_LOGGER.debug("Config flow start ssdp: %s", discovery_info) _LOGGER.debug("Config flow start ssdp: %s", discovery_info)

View File

@ -15,7 +15,6 @@ from wsdiscovery.scope import Scope
from wsdiscovery.service import Service from wsdiscovery.service import Service
from zeep.exceptions import Fault from zeep.exceptions import Fault
from homeassistant.components import dhcp
from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS
from homeassistant.components.stream import ( from homeassistant.components.stream import (
CONF_RTSP_TRANSPORT, CONF_RTSP_TRANSPORT,
@ -39,6 +38,7 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.data_entry_flow import AbortFlow from homeassistant.data_entry_flow import AbortFlow
from homeassistant.helpers import device_registry as dr from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from .const import ( from .const import (
CONF_DEVICE_ID, CONF_DEVICE_ID,
@ -170,7 +170,7 @@ class OnvifFlowHandler(ConfigFlow, domain=DOMAIN):
) )
async def async_step_dhcp( async def async_step_dhcp(
self, discovery_info: dhcp.DhcpServiceInfo self, discovery_info: DhcpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle dhcp discovery.""" """Handle dhcp discovery."""
hass = self.hass hass = self.hass

View File

@ -23,7 +23,6 @@ from pyoverkiz.obfuscate import obfuscate_id
from pyoverkiz.utils import generate_local_server, is_overkiz_gateway from pyoverkiz.utils import generate_local_server, is_overkiz_gateway
import voluptuous as vol import voluptuous as vol
from homeassistant.components import dhcp, zeroconf
from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlow, ConfigFlowResult from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlow, ConfigFlowResult
from homeassistant.const import ( from homeassistant.const import (
CONF_HOST, CONF_HOST,
@ -34,6 +33,8 @@ from homeassistant.const import (
) )
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.aiohttp_client import async_create_clientsession from homeassistant.helpers.aiohttp_client import async_create_clientsession
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import CONF_API_TYPE, CONF_HUB, DEFAULT_SERVER, DOMAIN, LOGGER from .const import CONF_API_TYPE, CONF_HUB, DEFAULT_SERVER, DOMAIN, LOGGER
@ -273,7 +274,7 @@ class OverkizConfigFlow(ConfigFlow, domain=DOMAIN):
) )
async def async_step_dhcp( async def async_step_dhcp(
self, discovery_info: dhcp.DhcpServiceInfo self, discovery_info: DhcpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle DHCP discovery.""" """Handle DHCP discovery."""
hostname = discovery_info.hostname hostname = discovery_info.hostname
@ -284,7 +285,7 @@ class OverkizConfigFlow(ConfigFlow, domain=DOMAIN):
return await self._process_discovery(gateway_id) return await self._process_discovery(gateway_id)
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle ZeroConf discovery.""" """Handle ZeroConf discovery."""
properties = discovery_info.properties properties = discovery_info.properties

View File

@ -6,10 +6,10 @@ from pypalazzetti.client import PalazzettiClient
from pypalazzetti.exceptions import CommunicationError from pypalazzetti.exceptions import CommunicationError
import voluptuous as vol import voluptuous as vol
from homeassistant.components import dhcp
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST from homeassistant.const import CONF_HOST
from homeassistant.helpers import device_registry as dr from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from .const import DOMAIN, LOGGER from .const import DOMAIN, LOGGER
@ -53,7 +53,7 @@ class PalazzettiConfigFlow(ConfigFlow, domain=DOMAIN):
) )
async def async_step_dhcp( async def async_step_dhcp(
self, discovery_info: dhcp.DhcpServiceInfo self, discovery_info: DhcpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle DHCP discovery.""" """Handle DHCP discovery."""

View File

@ -9,7 +9,6 @@ from aiohttp import CookieJar
from peblar import Peblar, PeblarAuthenticationError, PeblarConnectionError from peblar import Peblar, PeblarAuthenticationError, PeblarConnectionError
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST, CONF_PASSWORD from homeassistant.const import CONF_HOST, CONF_PASSWORD
from homeassistant.helpers.aiohttp_client import async_create_clientsession from homeassistant.helpers.aiohttp_client import async_create_clientsession
@ -18,6 +17,7 @@ from homeassistant.helpers.selector import (
TextSelectorConfig, TextSelectorConfig,
TextSelectorType, TextSelectorType,
) )
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import DOMAIN, LOGGER from .const import DOMAIN, LOGGER
@ -27,7 +27,7 @@ class PeblarFlowHandler(ConfigFlow, domain=DOMAIN):
VERSION = 1 VERSION = 1
_discovery_info: zeroconf.ZeroconfServiceInfo _discovery_info: ZeroconfServiceInfo
async def async_step_user( async def async_step_user(
self, user_input: dict[str, Any] | None = None self, user_input: dict[str, Any] | None = None
@ -128,7 +128,7 @@ class PeblarFlowHandler(ConfigFlow, domain=DOMAIN):
) )
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle zeroconf discovery of a Peblar device.""" """Handle zeroconf discovery of a Peblar device."""
if not (sn := discovery_info.properties.get("sn")): if not (sn := discovery_info.properties.get("sn")):

View File

@ -7,11 +7,11 @@ from typing import Any
from gridnet import Device, GridNet, GridNetConnectionError from gridnet import Device, GridNet, GridNetConnectionError
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST, CONF_NAME from homeassistant.const import CONF_HOST, CONF_NAME
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.selector import TextSelector from homeassistant.helpers.selector import TextSelector
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import DOMAIN from .const import DOMAIN
@ -58,7 +58,7 @@ class PureEnergieFlowHandler(ConfigFlow, domain=DOMAIN):
) )
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle zeroconf discovery.""" """Handle zeroconf discovery."""
self.discovered_host = discovery_info.host self.discovered_host = discovery_info.host

View File

@ -9,12 +9,12 @@ from aioqsw.exceptions import LoginError, QswError
from aioqsw.localapi import ConnectionOptions, QnapQswApi from aioqsw.localapi import ConnectionOptions, QnapQswApi
import voluptuous as vol import voluptuous as vol
from homeassistant.components import dhcp
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_PASSWORD, CONF_URL, CONF_USERNAME from homeassistant.const import CONF_PASSWORD, CONF_URL, CONF_USERNAME
from homeassistant.data_entry_flow import AbortFlow from homeassistant.data_entry_flow import AbortFlow
from homeassistant.helpers import aiohttp_client from homeassistant.helpers import aiohttp_client
from homeassistant.helpers.device_registry import format_mac from homeassistant.helpers.device_registry import format_mac
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from .const import DOMAIN from .const import DOMAIN
@ -73,7 +73,7 @@ class QNapQSWConfigFlow(ConfigFlow, domain=DOMAIN):
) )
async def async_step_dhcp( async def async_step_dhcp(
self, discovery_info: dhcp.DhcpServiceInfo self, discovery_info: DhcpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle DHCP discovery.""" """Handle DHCP discovery."""
self._discovered_url = f"http://{discovery_info.ip}" self._discovered_url = f"http://{discovery_info.ip}"

View File

@ -10,7 +10,6 @@ from rachiopy import Rachio
from requests.exceptions import ConnectTimeout from requests.exceptions import ConnectTimeout
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ( from homeassistant.config_entries import (
ConfigEntry, ConfigEntry,
ConfigFlow, ConfigFlow,
@ -20,6 +19,10 @@ from homeassistant.config_entries import (
from homeassistant.const import CONF_API_KEY from homeassistant.const import CONF_API_KEY
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.service_info.zeroconf import (
ATTR_PROPERTIES_ID,
ZeroconfServiceInfo,
)
from .const import ( from .const import (
CONF_MANUAL_RUN_MINS, CONF_MANUAL_RUN_MINS,
@ -92,13 +95,11 @@ class RachioConfigFlow(ConfigFlow, domain=DOMAIN):
) )
async def async_step_homekit( async def async_step_homekit(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle HomeKit discovery.""" """Handle HomeKit discovery."""
self._async_abort_entries_match() self._async_abort_entries_match()
await self.async_set_unique_id( await self.async_set_unique_id(discovery_info.properties[ATTR_PROPERTIES_ID])
discovery_info.properties[zeroconf.ATTR_PROPERTIES_ID]
)
self._abort_if_unique_id_configured() self._abort_if_unique_id_configured()
return await self.async_step_user() return await self.async_step_user()

View File

@ -9,11 +9,11 @@ from urllib.error import URLError
from radiotherm.validate import RadiothermTstatError from radiotherm.validate import RadiothermTstatError
import voluptuous as vol import voluptuous as vol
from homeassistant.components import dhcp
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST from homeassistant.const import CONF_HOST
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from .const import DOMAIN from .const import DOMAIN
from .data import RadioThermInitData, async_get_init_data from .data import RadioThermInitData, async_get_init_data
@ -44,7 +44,7 @@ class RadioThermConfigFlow(ConfigFlow, domain=DOMAIN):
self.discovered_init_data: RadioThermInitData | None = None self.discovered_init_data: RadioThermInitData | None = None
async def async_step_dhcp( async def async_step_dhcp(
self, discovery_info: dhcp.DhcpServiceInfo self, discovery_info: DhcpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Discover via DHCP.""" """Discover via DHCP."""
self._async_abort_entries_match({CONF_HOST: discovery_info.ip}) self._async_abort_entries_match({CONF_HOST: discovery_info.ip})

View File

@ -9,7 +9,6 @@ from regenmaschine.controller import Controller
from regenmaschine.errors import RainMachineError from regenmaschine.errors import RainMachineError
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ( from homeassistant.config_entries import (
ConfigEntry, ConfigEntry,
ConfigFlow, ConfigFlow,
@ -19,6 +18,7 @@ from homeassistant.config_entries import (
from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD, CONF_PORT, CONF_SSL from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD, CONF_PORT, CONF_SSL
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import aiohttp_client, config_validation as cv from homeassistant.helpers import aiohttp_client, config_validation as cv
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import ( from .const import (
CONF_ALLOW_INACTIVE_ZONES_TO_RUN, CONF_ALLOW_INACTIVE_ZONES_TO_RUN,
@ -66,19 +66,19 @@ class RainMachineFlowHandler(ConfigFlow, domain=DOMAIN):
return RainMachineOptionsFlowHandler() return RainMachineOptionsFlowHandler()
async def async_step_homekit( async def async_step_homekit(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle a flow initialized by homekit discovery.""" """Handle a flow initialized by homekit discovery."""
return await self.async_step_homekit_zeroconf(discovery_info) return await self.async_step_homekit_zeroconf(discovery_info)
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle discovery via zeroconf.""" """Handle discovery via zeroconf."""
return await self.async_step_homekit_zeroconf(discovery_info) return await self.async_step_homekit_zeroconf(discovery_info)
async def async_step_homekit_zeroconf( async def async_step_homekit_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle discovery via zeroconf.""" """Handle discovery via zeroconf."""
ip_address = discovery_info.host ip_address = discovery_info.host

View File

@ -15,7 +15,6 @@ from reolink_aio.exceptions import (
) )
import voluptuous as vol import voluptuous as vol
from homeassistant.components import dhcp
from homeassistant.config_entries import ( from homeassistant.config_entries import (
SOURCE_REAUTH, SOURCE_REAUTH,
SOURCE_RECONFIGURE, SOURCE_RECONFIGURE,
@ -34,6 +33,7 @@ from homeassistant.core import callback
from homeassistant.data_entry_flow import AbortFlow from homeassistant.data_entry_flow import AbortFlow
from homeassistant.helpers import config_validation as cv, selector from homeassistant.helpers import config_validation as cv, selector
from homeassistant.helpers.device_registry import format_mac from homeassistant.helpers.device_registry import format_mac
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from .const import CONF_USE_HTTPS, DOMAIN from .const import CONF_USE_HTTPS, DOMAIN
from .exceptions import ( from .exceptions import (
@ -142,7 +142,7 @@ class ReolinkFlowHandler(ConfigFlow, domain=DOMAIN):
return await self.async_step_user() return await self.async_step_user()
async def async_step_dhcp( async def async_step_dhcp(
self, discovery_info: dhcp.DhcpServiceInfo self, discovery_info: DhcpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle discovery via dhcp.""" """Handle discovery via dhcp."""
mac_address = format_mac(discovery_info.macaddress) mac_address = format_mac(discovery_info.macaddress)

View File

@ -8,7 +8,6 @@ import uuid
from ring_doorbell import Auth, AuthenticationError, Requires2FAError from ring_doorbell import Auth, AuthenticationError, Requires2FAError
import voluptuous as vol import voluptuous as vol
from homeassistant.components import dhcp
from homeassistant.config_entries import ( from homeassistant.config_entries import (
SOURCE_REAUTH, SOURCE_REAUTH,
SOURCE_RECONFIGURE, SOURCE_RECONFIGURE,
@ -26,6 +25,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.device_registry as dr import homeassistant.helpers.device_registry as dr
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from . import get_auth_user_agent from . import get_auth_user_agent
from .const import CONF_2FA, CONF_CONFIG_ENTRY_MINOR_VERSION, DOMAIN from .const import CONF_2FA, CONF_CONFIG_ENTRY_MINOR_VERSION, DOMAIN
@ -78,7 +78,7 @@ class RingConfigFlow(ConfigFlow, domain=DOMAIN):
hardware_id: str | None = None hardware_id: str | None = None
async def async_step_dhcp( async def async_step_dhcp(
self, discovery_info: dhcp.DhcpServiceInfo self, discovery_info: DhcpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle discovery via dhcp.""" """Handle discovery via dhcp."""
# Ring has a single config entry per cloud username rather than per device # Ring has a single config entry per cloud username rather than per device

View File

@ -9,7 +9,6 @@ from urllib.parse import urlparse
from rokuecp import Roku, RokuError from rokuecp import Roku, RokuError
import voluptuous as vol import voluptuous as vol
from homeassistant.components import ssdp, zeroconf
from homeassistant.config_entries import ( from homeassistant.config_entries import (
SOURCE_RECONFIGURE, SOURCE_RECONFIGURE,
ConfigFlow, ConfigFlow,
@ -19,6 +18,12 @@ from homeassistant.config_entries import (
from homeassistant.const import CONF_HOST, CONF_NAME from homeassistant.const import CONF_HOST, CONF_NAME
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.service_info.ssdp import (
ATTR_UPNP_FRIENDLY_NAME,
ATTR_UPNP_SERIAL,
SsdpServiceInfo,
)
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from . import RokuConfigEntry from . import RokuConfigEntry
from .const import CONF_PLAY_MEDIA_APP_ID, DEFAULT_PLAY_MEDIA_APP_ID, DOMAIN from .const import CONF_PLAY_MEDIA_APP_ID, DEFAULT_PLAY_MEDIA_APP_ID, DOMAIN
@ -117,7 +122,7 @@ class RokuConfigFlow(ConfigFlow, domain=DOMAIN):
return self.async_create_entry(title=info["title"], data=user_input) return self.async_create_entry(title=info["title"], data=user_input)
async def async_step_homekit( async def async_step_homekit(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle a flow initialized by homekit discovery.""" """Handle a flow initialized by homekit discovery."""
@ -147,12 +152,12 @@ class RokuConfigFlow(ConfigFlow, domain=DOMAIN):
return await self.async_step_discovery_confirm() return await self.async_step_discovery_confirm()
async def async_step_ssdp( async def async_step_ssdp(
self, discovery_info: ssdp.SsdpServiceInfo self, discovery_info: SsdpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle a flow initialized by discovery.""" """Handle a flow initialized by discovery."""
host = urlparse(discovery_info.ssdp_location).hostname host = urlparse(discovery_info.ssdp_location).hostname
name = discovery_info.upnp[ssdp.ATTR_UPNP_FRIENDLY_NAME] name = discovery_info.upnp[ATTR_UPNP_FRIENDLY_NAME]
serial_number = discovery_info.upnp[ssdp.ATTR_UPNP_SERIAL] serial_number = discovery_info.upnp[ATTR_UPNP_SERIAL]
await self.async_set_unique_id(serial_number) await self.async_set_unique_id(serial_number)
self._abort_if_unique_id_configured(updates={CONF_HOST: host}) self._abort_if_unique_id_configured(updates={CONF_HOST: host})

View File

@ -5,10 +5,10 @@ from __future__ import annotations
import romy import romy
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST, CONF_PASSWORD from homeassistant.const import CONF_HOST, CONF_PASSWORD
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import DOMAIN, LOGGER from .const import DOMAIN, LOGGER
@ -84,7 +84,7 @@ class RomyConfigFlow(ConfigFlow, domain=DOMAIN):
) )
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle zeroconf discovery.""" """Handle zeroconf discovery."""

View File

@ -11,7 +11,6 @@ from roombapy.discovery import RoombaDiscovery
from roombapy.getpassword import RoombaPassword from roombapy.getpassword import RoombaPassword
import voluptuous as vol import voluptuous as vol
from homeassistant.components import dhcp, zeroconf
from homeassistant.config_entries import ( from homeassistant.config_entries import (
ConfigEntry, ConfigEntry,
ConfigFlow, ConfigFlow,
@ -20,6 +19,8 @@ from homeassistant.config_entries import (
) )
from homeassistant.const import CONF_DELAY, CONF_HOST, CONF_NAME, CONF_PASSWORD from homeassistant.const import CONF_DELAY, CONF_HOST, CONF_NAME, CONF_PASSWORD
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from . import CannotConnect, async_connect_or_timeout, async_disconnect_or_timeout from . import CannotConnect, async_connect_or_timeout, async_disconnect_or_timeout
from .const import ( from .const import (
@ -95,7 +96,7 @@ class RoombaConfigFlow(ConfigFlow, domain=DOMAIN):
return RoombaOptionsFlowHandler() return RoombaOptionsFlowHandler()
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle zeroconf discovery.""" """Handle zeroconf discovery."""
return await self._async_step_discovery( return await self._async_step_discovery(
@ -103,7 +104,7 @@ class RoombaConfigFlow(ConfigFlow, domain=DOMAIN):
) )
async def async_step_dhcp( async def async_step_dhcp(
self, discovery_info: dhcp.DhcpServiceInfo self, discovery_info: DhcpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle dhcp discovery.""" """Handle dhcp discovery."""
return await self._async_step_discovery( return await self._async_step_discovery(

View File

@ -8,7 +8,6 @@ from typing import Any
from aiorussound import RussoundClient, RussoundTcpConnectionHandler from aiorussound import RussoundClient, RussoundTcpConnectionHandler
import voluptuous as vol import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import ( from homeassistant.config_entries import (
SOURCE_RECONFIGURE, SOURCE_RECONFIGURE,
ConfigFlow, ConfigFlow,
@ -16,6 +15,7 @@ from homeassistant.config_entries import (
) )
from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
from .const import DOMAIN, RUSSOUND_RIO_EXCEPTIONS from .const import DOMAIN, RUSSOUND_RIO_EXCEPTIONS
@ -39,7 +39,7 @@ class FlowHandler(ConfigFlow, domain=DOMAIN):
self.data: dict[str, Any] = {} self.data: dict[str, Any] = {}
async def async_step_zeroconf( async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: ZeroconfServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle zeroconf discovery.""" """Handle zeroconf discovery."""
self.data[CONF_HOST] = host = discovery_info.host self.data[CONF_HOST] = host = discovery_info.host

View File

@ -8,11 +8,11 @@ from typing import Any
import aioruuvigateway.api as gw_api import aioruuvigateway.api as gw_api
from aioruuvigateway.excs import CannotConnect, InvalidAuth from aioruuvigateway.excs import CannotConnect, InvalidAuth
from homeassistant.components import dhcp
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST, CONF_TOKEN from homeassistant.const import CONF_HOST, CONF_TOKEN
from homeassistant.helpers.device_registry import format_mac from homeassistant.helpers.device_registry import format_mac
from homeassistant.helpers.httpx_client import get_async_client from homeassistant.helpers.httpx_client import get_async_client
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
from . import DOMAIN from . import DOMAIN
from .schemata import CONFIG_SCHEMA, get_config_schema_with_default_host from .schemata import CONFIG_SCHEMA, get_config_schema_with_default_host
@ -82,7 +82,7 @@ class RuuviConfigFlow(ConfigFlow, domain=DOMAIN):
) )
async def async_step_dhcp( async def async_step_dhcp(
self, discovery_info: dhcp.DhcpServiceInfo self, discovery_info: DhcpServiceInfo
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Prepare configuration for a DHCP discovered Ruuvi Gateway.""" """Prepare configuration for a DHCP discovered Ruuvi Gateway."""
await self.async_set_unique_id(format_mac(discovery_info.macaddress)) await self.async_set_unique_id(format_mac(discovery_info.macaddress))