core/homeassistant/components/upnp.py

46 lines
1.2 KiB
Python

"""
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