mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 16:57:53 +00:00
Making the config bootstrap more verbose about what started
This commit is contained in:
parent
0d156ecbf0
commit
05472481c5
@ -193,12 +193,17 @@ class HueLightControl(object):
|
||||
except ImportError:
|
||||
logging.getLogger(__name__).error(("HueLightControl:"
|
||||
"Unable to init due to missing dependency phue."))
|
||||
|
||||
self.success_init = False
|
||||
|
||||
return
|
||||
|
||||
self.bridge = phue.Bridge(host)
|
||||
self.lights = self.bridge.get_light_objects()
|
||||
self.light_ids = [light.light_id for light in self.lights]
|
||||
|
||||
self.success_init = True
|
||||
|
||||
|
||||
def is_light_on(self, light_id=None):
|
||||
""" Returns if specified or all light are on. """
|
||||
@ -249,7 +254,7 @@ def setup_file_downloader(eventbus, download_path):
|
||||
"Download path {} does not exist. File Downloader not active.").
|
||||
format(download_path))
|
||||
|
||||
return
|
||||
return False
|
||||
|
||||
def download_file(event):
|
||||
""" Downloads file specified in the url. """
|
||||
@ -303,6 +308,8 @@ def setup_file_downloader(eventbus, download_path):
|
||||
|
||||
eventbus.listen(EVENT_DOWNLOAD_FILE, download_file)
|
||||
|
||||
return True
|
||||
|
||||
def setup_webbrowser(eventbus):
|
||||
""" Listen for browse_url events and open
|
||||
the url in the default webbrowser. """
|
||||
@ -312,6 +319,8 @@ def setup_webbrowser(eventbus):
|
||||
eventbus.listen(EVENT_BROWSE_URL,
|
||||
lambda event: webbrowser.open(event.data['url']))
|
||||
|
||||
return True
|
||||
|
||||
def setup_chromecast(eventbus, host):
|
||||
""" Listen for chromecast events. """
|
||||
from homeassistant.packages import pychromecast
|
||||
@ -325,6 +334,8 @@ def setup_chromecast(eventbus, host):
|
||||
eventbus.listen(EVENT_CHROMECAST_YOUTUBE_VIDEO,
|
||||
lambda event: pychromecast.play_youtube_video(host, event.data['video']))
|
||||
|
||||
return True
|
||||
|
||||
def setup_media_buttons(eventbus):
|
||||
""" Listen for keyboard events. """
|
||||
try:
|
||||
@ -332,7 +343,8 @@ def setup_media_buttons(eventbus):
|
||||
except ImportError:
|
||||
logging.getLogger(__name__).error(("MediaButtons:"
|
||||
"Unable to setup due to missing dependency PyUserInput."))
|
||||
return
|
||||
|
||||
return False
|
||||
|
||||
keyboard = pykeyboard.PyKeyboard()
|
||||
keyboard.special_key_assignment()
|
||||
@ -348,3 +360,5 @@ def setup_media_buttons(eventbus):
|
||||
|
||||
eventbus.listen(EVENT_KEYBOARD_MEDIA_PLAY_PAUSE,
|
||||
lambda event: keyboard.tap_key(keyboard.media_play_pause_key))
|
||||
|
||||
return True
|
||||
|
@ -3,16 +3,20 @@ Provides methods to bootstrap a home assistant instance.
|
||||
"""
|
||||
|
||||
import ConfigParser
|
||||
import logging
|
||||
|
||||
import homeassistant as ha
|
||||
import homeassistant.observers as observers
|
||||
import homeassistant.actors as actors
|
||||
import homeassistant.httpinterface as httpinterface
|
||||
|
||||
# pylint: disable=too-many-branches
|
||||
def from_config_file(config_path):
|
||||
""" Starts home assistant with all possible functionality
|
||||
based on a config file. """
|
||||
|
||||
statusses = []
|
||||
|
||||
# Read config
|
||||
config = ConfigParser.SafeConfigParser()
|
||||
config.read(config_path)
|
||||
@ -34,6 +38,14 @@ def from_config_file(config_path):
|
||||
config.get('tomato','password'),
|
||||
config.get('tomato','http_id'))
|
||||
|
||||
if device_scanner.success_init:
|
||||
statusses.append(("Device Scanner - Tomato", True))
|
||||
|
||||
else:
|
||||
statusses.append(("Device Scanner - Tomato", False))
|
||||
|
||||
device_scanner = None
|
||||
|
||||
else:
|
||||
device_scanner = None
|
||||
|
||||
@ -42,6 +54,9 @@ def from_config_file(config_path):
|
||||
if device_scanner:
|
||||
device_tracker = observers.DeviceTracker(eventbus, statemachine,
|
||||
device_scanner)
|
||||
|
||||
statusses.append(("Device Tracker", True))
|
||||
|
||||
else:
|
||||
device_tracker = None
|
||||
|
||||
@ -50,19 +65,21 @@ def from_config_file(config_path):
|
||||
if config.has_option("common", "latitude") and \
|
||||
config.has_option("common", "longitude"):
|
||||
|
||||
observers.track_sun(eventbus, statemachine,
|
||||
config.get("common","latitude"),
|
||||
config.get("common","longitude"))
|
||||
statusses.append(("Weather - Ephem",
|
||||
observers.track_sun(eventbus, statemachine,
|
||||
config.get("common","latitude"),
|
||||
config.get("common","longitude"))))
|
||||
|
||||
|
||||
# Init actors
|
||||
# Light control
|
||||
if config.has_section("hue"):
|
||||
if config.has_option("hue", "host"):
|
||||
hue_host = config.get("hue", "host")
|
||||
else:
|
||||
hue_host = None
|
||||
if config.has_section("hue") and config.has_option("hue", "host"):
|
||||
light_control = actors.HueLightControl(config.get("hue", "host"))
|
||||
|
||||
light_control = actors.HueLightControl(hue_host)
|
||||
statusses.append(("Light Control - Hue", light_control.success_init))
|
||||
|
||||
else:
|
||||
light_control = None
|
||||
|
||||
|
||||
# Light trigger
|
||||
@ -70,22 +87,38 @@ def from_config_file(config_path):
|
||||
actors.LightTrigger(eventbus, statemachine,
|
||||
device_tracker, light_control)
|
||||
|
||||
statusses.append(("Light Trigger", True))
|
||||
|
||||
|
||||
if config.has_option("chromecast", "host"):
|
||||
actors.setup_chromecast(eventbus, config.get("chromecast", "host"))
|
||||
statusses.append(("Chromecast", actors.setup_chromecast(eventbus,
|
||||
config.get("chromecast", "host"))))
|
||||
|
||||
|
||||
if config.has_option("downloader", "download_dir"):
|
||||
actors.setup_file_downloader(eventbus,
|
||||
result = actors.setup_file_downloader(eventbus,
|
||||
config.get("downloader", "download_dir"))
|
||||
|
||||
actors.setup_webbrowser(eventbus)
|
||||
actors.setup_media_buttons(eventbus)
|
||||
statusses.append(("Downloader", result))
|
||||
|
||||
|
||||
statusses.append(("Webbrowser", actors.setup_webbrowser(eventbus)))
|
||||
|
||||
statusses.append(("Media Buttons", actors.setup_media_buttons(eventbus)))
|
||||
|
||||
|
||||
# Init HTTP interface
|
||||
if config.has_option("httpinterface", "api_password"):
|
||||
httpinterface.HTTPInterface(eventbus, statemachine,
|
||||
config.get("httpinterface","api_password"))
|
||||
|
||||
statusses.append(("HTTPInterface", True))
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
for component, success_init in statusses:
|
||||
status = "initialized" if success_init else "Failed to initialize"
|
||||
|
||||
logger.info("{}: {}".format(component, status))
|
||||
|
||||
ha.start_home_assistant(eventbus)
|
||||
|
@ -52,7 +52,7 @@ def track_sun(eventbus, statemachine, latitude, longitude):
|
||||
except ImportError:
|
||||
logger.error(("TrackSun:"
|
||||
"Unable to setup due to missing dependency ephem."))
|
||||
return
|
||||
return False
|
||||
|
||||
sun = ephem.Sun() # pylint: disable=no-member
|
||||
|
||||
@ -89,6 +89,7 @@ def track_sun(eventbus, statemachine, latitude, longitude):
|
||||
|
||||
update_sun_state(None)
|
||||
|
||||
return True
|
||||
|
||||
class DeviceTracker(object):
|
||||
""" Class that tracks which devices are home and which are not. """
|
||||
@ -278,6 +279,8 @@ class TomatoDeviceScanner(object):
|
||||
self.date_updated = None
|
||||
self.last_results = {"wldev": [], "dhcpd_lease": []}
|
||||
|
||||
self.success_init = self._update_tomato_info()
|
||||
|
||||
def scan_devices(self):
|
||||
""" Scans for new devices and return a
|
||||
list containing found device ids. """
|
||||
@ -331,22 +334,30 @@ class TomatoDeviceScanner(object):
|
||||
|
||||
self.date_updated = datetime.now()
|
||||
|
||||
return True
|
||||
|
||||
elif response.status_code == 401:
|
||||
# Authentication error
|
||||
self.logger.exception(("Tomato:Failed to authenticate, "
|
||||
"please check your username and password"))
|
||||
|
||||
return False
|
||||
|
||||
except requests.ConnectionError:
|
||||
# We get this if we could not connect to the router or
|
||||
# an invalid http_id was supplied
|
||||
self.logger.exception(("Tomato:Failed to connect to the router"
|
||||
"or invalid http_id supplied"))
|
||||
|
||||
return False
|
||||
|
||||
except ValueError:
|
||||
# If json decoder could not parse the response
|
||||
self.logger.exception(("Tomato:Failed to parse response "
|
||||
"from router"))
|
||||
|
||||
return False
|
||||
|
||||
finally:
|
||||
self.lock.release()
|
||||
|
||||
@ -354,3 +365,5 @@ class TomatoDeviceScanner(object):
|
||||
# We acquired the lock before the IF check,
|
||||
# release it before we return True
|
||||
self.lock.release()
|
||||
|
||||
return True
|
||||
|
Loading…
x
Reference in New Issue
Block a user