async def async_create_upnp_device(hass: HomeAssistant, ssdp_location: str) -> UpnpDevice: """Create UPnP device.""" session = async_get_clientsession(hass) requester = AiohttpSessionRequester(session, with_sleep=True, timeout=20) factory = UpnpFactory(requester, disable_state_variable_validation=True) return await factory.async_create_device(ssdp_location)
def __init__(self, hass: HomeAssistant) -> None: """Initialize global data.""" self.lock = asyncio.Lock() session = aiohttp_client.async_get_clientsession(hass, verify_ssl=False) self.requester = AiohttpSessionRequester(session, with_sleep=True) self.upnp_factory = UpnpFactory(self.requester, non_strict=True) self.event_notifiers = {} self.event_notifier_refs = defaultdict(int)
def __init__( self, hass: HomeAssistant, ) -> None: """Initialize global data.""" self.hass = hass session = aiohttp_client.async_get_clientsession(hass, verify_ssl=False) self.requester = AiohttpSessionRequester(session, with_sleep=True) self.upnp_factory = UpnpFactory(self.requester, non_strict=True) self.devices = {} self.sources = {}
async def async_create_device(hass: HomeAssistant, ssdp_location: str) -> Device: """Create UPnP/IGD device.""" session = async_get_clientsession(hass, verify_ssl=False) requester = AiohttpSessionRequester(session, with_sleep=True, timeout=20) factory = UpnpFactory(requester, disable_state_variable_validation=True) upnp_device = await factory.async_create_device(ssdp_location) # Create profile wrapper. igd_device = IgdDevice(upnp_device, None) device = Device(hass, igd_device) return device
async def connect(self): requester = AiohttpRequester() factory = UpnpFactory(requester) device = await factory.async_create_device(self.url) self.service = device.service("urn:schemas-sony-com:service:Group:1") if not self.service: _LOGGER.error("Unable to find group service!") return False for act in self.service.actions.values(): _LOGGER.debug("Action: %s (%s)", act, [arg.name for arg in act.in_arguments()]) return True """
async def parse_device(device): requester = AiohttpRequester() factory = UpnpFactory(requester) url = device["location"] try: device = await factory.async_create_device(url) except Exception as ex: _LOGGER.error( "Unable to download the device description file from %s: %s", url, ex, ) return if debug > 0: print(etree.ElementTree.tostring(device.xml).decode()) NS = {"av": "urn:schemas-sony-com:av"} info = device.xml.find(".//av:X_ScalarWebAPI_DeviceInfo", NS) if not info: _LOGGER.error("Unable to find X_ScalaerWebAPI_DeviceInfo") return endpoint = info.find(".//av:X_ScalarWebAPI_BaseURL", NS).text version = info.find(".//av:X_ScalarWebAPI_Version", NS).text services = [ x.text for x in info.findall(".//av:X_ScalarWebAPI_ServiceType", NS) ] dev = DiscoveredDevice( name=device.name, model_number=device.model_number, udn=device.udn, endpoint=endpoint, version=version, services=services, upnp_services=list(device.services.keys()), upnp_location=url, ) _LOGGER.debug("Discovered: %s" % dev) if callback is not None: await callback(dev)
def __init__( self, hass: HomeAssistant, ) -> None: """Initialize global data.""" self.hass = hass self.lock = asyncio.Lock() session = aiohttp_client.async_get_clientsession(hass, verify_ssl=False) self.requester = AiohttpSessionRequester(session, with_sleep=True) self.upnp_factory = UpnpFactory(self.requester, non_strict=True) # NOTE: event_handler is not actually used, and is only created to # satisfy the DmsDevice.__init__ signature self.event_handler = UpnpEventHandler(UpnpNotifyServer(), self.requester) self.devices = {} self.sources = {}
async def fetch_info(self): requester = AiohttpRequester() factory = UpnpFactory(requester) device = await factory.async_create_device(self.url) self.name = device.name # FIXME this depends currently on async_upnp_client internals.. infodict = device.device_info._asdict() _LOGGER.debug("Got device info: %s from url %s", infodict, self.url) # we need to replace USN with udn from the XML. if self.udn != device.udn: _LOGGER.warning("Got different UDN, replacing..") self.udn = device.udn self.info = {k: v for k, v in infodict.items() if k != "xml"} self.info["icon"] = self.icon self.icons: List[Icon] = parse_icons(self.info["url"], device)