diff --git a/homeassistant/components/http.py b/homeassistant/components/http.py index 03d18170b3b311abac17380e33f1e2e93b1faf4d..bacdf5b15a0029903e84d9d5dee7871401519655 100644 --- a/homeassistant/components/http.py +++ b/homeassistant/components/http.py @@ -7,7 +7,6 @@ https://home-assistant.io/developers/api/ import gzip import json import logging -import socket import ssl import threading import time @@ -28,7 +27,7 @@ from homeassistant.const import ( HTTP_HEADER_CONTENT_LENGTH, HTTP_HEADER_CONTENT_TYPE, HTTP_HEADER_EXPIRES, HTTP_HEADER_HA_AUTH, HTTP_HEADER_VARY, HTTP_METHOD_NOT_ALLOWED, HTTP_NOT_FOUND, HTTP_OK, HTTP_UNAUTHORIZED, HTTP_UNPROCESSABLE_ENTITY, - SERVER_PORT, __version__) + SERVER_PORT) DOMAIN = "http" @@ -105,8 +104,12 @@ class HomeAssistantHTTPServer(ThreadingMixIn, HTTPServer): self.paths = [] self.sessions = SessionStore() self.protocol = 'https' if ssl_certificate is not None else 'http' + if server_address[0] == '0.0.0.0': + self.routable_address = util.get_local_ip() + else: + self.routable_address = server_address[0] self.base_url = "{}://{}:{}".format(self.protocol, - util.get_local_ip(), + self.routable_address, self.server_address[1]) # We will lazy init this one if needed diff --git a/homeassistant/components/zeroconf.py b/homeassistant/components/zeroconf.py index a9e773fae6de387c3375fe37961aedd8f660e237..cd472734f86c95e1653e604712cb9670a96228f2 100644 --- a/homeassistant/components/zeroconf.py +++ b/homeassistant/components/zeroconf.py @@ -1,6 +1,7 @@ """ -This module exposes Home Assistant via Zeroconf, also sometimes known as -Bonjour, Rendezvous, Avahi or Multicast DNS (mDNS). +This module exposes Home Assistant via Zeroconf. + +Zeroconf is also known as Bonjour, Avahi or Multicast DNS (mDNS). For more details about Zeroconf, please refer to the documentation at https://home-assistant.io/components/zeroconf/ @@ -8,10 +9,7 @@ https://home-assistant.io/components/zeroconf/ import logging import socket -from homeassistant.const import ( - EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, __version__) - -import homeassistant.util as util +from homeassistant.const import (EVENT_HOMEASSISTANT_STOP, __version__) REQUIREMENTS = ["zeroconf==0.17.5"] @@ -21,30 +19,31 @@ DOMAIN = "zeroconf" ZEROCONF_TYPE = "_home-assistant._tcp.local." -DEPENDENCIES = ["http", "api"] +DEPENDENCIES = ["http"] -def setup(hass, config): - from zeroconf import Zeroconf, ServiceInfo +def setup(hass, config): + """Set up Zeroconf and make Home Assistant discoverable.""" + from zeroconf import Zeroconf, ServiceInfo - zeroconf = Zeroconf() + zeroconf = Zeroconf() - zeroconf_name = "{}.{}".format(hass.config.location_name, - ZEROCONF_TYPE) + zeroconf_name = "{}.{}".format(hass.config.location_name, + ZEROCONF_TYPE) - params = {"version": __version__, "base_url": hass.http.base_url, - "has_password": (hass.http.api_password != "")} + params = {"version": __version__, "base_url": hass.http.base_url, + "needs_auth": (hass.http.api_password != "")} - info = ServiceInfo(ZEROCONF_TYPE, zeroconf_name, - socket.inet_aton(util.get_local_ip()), - hass.http.server_address[1], 0, 0, params) + info = ServiceInfo(ZEROCONF_TYPE, zeroconf_name, + socket.inet_aton(hass.http.routable_address), + hass.http.server_address[1], 0, 0, params) - zeroconf.register_service(info) + zeroconf.register_service(info) - def stop_zeroconf(event): - """Stop Zeroconf.""" - zeroconf.unregister_all_services() + def stop_zeroconf(event): + """Stop Zeroconf.""" + zeroconf.unregister_service(info) - hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_zeroconf) + hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_zeroconf) - return True + return True