Discovery API Reference¶
Discovery classes provide device discovery implementations for common protocols.
DiscoveredDevice¶
ucapi_framework.discovery.DiscoveredDevice
dataclass
¶
DiscoveredDevice(identifier: str, name: str, address: str, extra_data: dict[str, Any] | None = None)
Common structure for discovered devices.
All discovery implementations should return this format.
BaseDiscovery¶
ucapi_framework.discovery.BaseDiscovery ¶
Bases: ABC
Base class for device discovery.
Provides a common interface for different discovery methods: - SSDP - mDNS/Bonjour - Bluetooth LE - Cloud API - Network scanning
Initialize discovery.
:param timeout: Discovery timeout in seconds
Attributes¶
devices
property
¶
Get the list of discovered devices from the last discovery run.
This property provides access to devices found by the most recent call to discover(). Useful when implementing create_device_from_discovery() in setup flows.
:return: List of discovered devices
Functions¶
discover
abstractmethod
async
¶
Perform device discovery.
:return: List of discovered devices
SSDPDiscovery¶
ucapi_framework.discovery.SSDPDiscovery ¶
SSDPDiscovery(search_target: str = 'ssdp:all', timeout: int = 5, device_filter: Callable | None = None)
Bases: BaseDiscovery
SSDP-based device discovery.
Uses Simple Service Discovery Protocol to find devices on the local network. Good for: UPnP devices, media renderers, smart TVs
Initialize SSDP discovery.
:param search_target: SSDP search target (e.g., "ssdp:all", "urn:schemas-upnp-org:device:MediaRenderer:1") :param timeout: Discovery timeout in seconds :param device_filter: Optional filter function to filter discovered devices
Functions¶
discover
async
¶
Perform SSDP discovery.
:return: List of discovered devices
parse_ssdp_device
abstractmethod
¶
Parse raw SSDP device data into DiscoveredDevice.
Override this method to extract device information from SSDP response.
:param raw_device: Raw SSDP device data :return: DiscoveredDevice or None if parsing fails
SDDPDiscovery¶
ucapi_framework.discovery.SDDPDiscovery ¶
SDDPDiscovery(search_pattern: str = '*', timeout: int = 5, multicast_address: str | None = None, multicast_port: int | None = None, bind_addresses: list[str] | None = None, include_loopback: bool = False)
Bases: BaseDiscovery
SDDP-based device discovery.
Uses Simple Device Discovery Protocol (similar to SSDP but with different format). Good for: Samsung TVs and other devices using SDDP protocol
Initialize SDDP discovery.
:param search_pattern: SDDP search pattern (default: "*" for all devices) :param timeout: Discovery timeout in seconds :param multicast_address: SDDP multicast address (uses default if None) :param multicast_port: SDDP multicast port (uses default if None) :param bind_addresses: Optional list of specific addresses to bind to :param include_loopback: Whether to include loopback interface
Functions¶
discover
async
¶
Perform SDDP discovery.
:return: List of discovered devices
parse_sddp_response
abstractmethod
¶
Parse SDDP response into DiscoveredDevice.
Override this method to extract device information from SDDP response. The datagram contains device information in its headers (hdr_from, hdr_type, etc.).
Example implementation
def parse_sddp_response(self, datagram, response_info): return DiscoveredDevice( identifier=datagram.hdr_type, # or other unique field name=datagram.hdr_type, address=datagram.hdr_from[0], # IP address extra_data={ "type": datagram.hdr_type, "datagram": datagram, } )
:param datagram: SDDP datagram with headers (hdr_from, hdr_type, etc.) :param response_info: Full response info object from SDDP client :return: DiscoveredDevice or None if parsing fails
MDNSDiscovery¶
ucapi_framework.discovery.MDNSDiscovery ¶
Bases: BaseDiscovery
mDNS/Bonjour-based device discovery.
Uses multicast DNS to discover devices advertising services. Good for: Apple devices, HomeKit, Chromecast, many IoT devices
Initialize mDNS discovery.
:param service_type: mDNS service type (e.g., "_airplay._tcp.local.", "_googlecast._tcp.local.") :param timeout: Discovery timeout in seconds
Functions¶
discover
async
¶
Perform mDNS discovery.
:return: List of discovered devices
parse_mdns_service
abstractmethod
¶
Parse mDNS service info into DiscoveredDevice.
Override this method to extract device information from mDNS service.
:param service_info: mDNS service info object :return: DiscoveredDevice or None if parsing fails
NetworkScanDiscovery¶
ucapi_framework.discovery.NetworkScanDiscovery ¶
Bases: BaseDiscovery
Network scanning-based device discovery.
Scans IP range for devices responding on specific ports. Good for: Devices without standard discovery protocols
Initialize network scan discovery.
:param ip_range: IP range to scan (e.g., "192.168.1.0/24") :param ports: List of ports to check :param timeout: Discovery timeout in seconds
Functions¶
discover
async
¶
Perform network scan discovery.
:return: List of discovered devices
probe_device
abstractmethod
async
¶
Probe a specific IP:port for device information.
Override this method to implement device probing logic.
:param ip: IP address to probe :param port: Port to probe :return: DiscoveredDevice or None if not a valid device