""" This module will attempt to open a port in your router for Home Assistant. For more details about UPnP, please refer to the documentation at https://home-assistant.io/components/upnp/ """ import logging from homeassistant.const import (EVENT_HOMEASSISTANT_STOP) DEPENDENCIES = ["api"] _LOGGER = logging.getLogger(__name__) DOMAIN = "upnp" def setup(hass, config): """Register a port mapping for Home Assistant via UPnP.""" # pylint: disable=import-error import miniupnpc # pylint: disable=no-member upnp = miniupnpc.UPnP() upnp.discoverdelay = 200 upnp.discover() try: upnp.selectigd() # pylint: disable=broad-except except Exception: _LOGGER.exception("Error when attempting to discover a UPnP IGD") return False upnp.addportmapping(hass.config.api.port, "TCP", hass.config.api.host, hass.config.api.port, "Home Assistant", "") def deregister_port(event): """De-register the UPnP port mapping.""" upnp.deleteportmapping(hass.config.api.port, "TCP") hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, deregister_port) return True