Esempio n. 1
0
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)
Esempio n. 2
0
 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)
Esempio n. 3
0
 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 = {}
Esempio n. 4
0
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
Esempio n. 5
0
    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
        """
Esempio n. 6
0
        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)
Esempio n. 7
0
 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 = {}
Esempio n. 8
0
    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)