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) # Init core eventbus = ha.EventBus() statemachine = ha.StateMachine(eventbus) # Init observers # Device scanner if config.has_option('tomato', 'host') and \ config.has_option('tomato', 'username') and \ config.has_option('tomato', 'password') and \ config.has_option('tomato', 'http_id'): device_scanner = observers.TomatoDeviceScanner( config.get('tomato', 'host'), config.get('tomato', 'username'), 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 # Device Tracker if device_scanner: device_tracker = observers.DeviceTracker( eventbus, statemachine, device_scanner) statusses.append(("Device Tracker", True)) else: device_tracker = None # Sun tracker if config.has_option("common", "latitude") and \ config.has_option("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"): light_control = actors.HueLightControl(config.get("hue", "host")) else: light_control = actors.HueLightControl() statusses.append(("Light Control - Hue", light_control.success_init)) else: light_control = None # Light trigger if light_control: actors.LightTrigger(eventbus, statemachine, device_tracker, light_control) statusses.append(("Light Trigger", True)) if config.has_option("chromecast", "host"): statusses.append(("Chromecast", actors.setup_chromecast( eventbus, config.get("chromecast", "host")))) if config.has_option("downloader", "download_dir"): result = actors.setup_file_downloader( eventbus, config.get("downloader", "download_dir")) 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)
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) # Init core bus = ha.Bus() statemachine = ha.StateMachine(bus) # Device scanner if config.has_option('tomato', 'host') and \ config.has_option('tomato', 'username') and \ config.has_option('tomato', 'password') and \ config.has_option('tomato', 'http_id'): device_scanner = device.TomatoDeviceScanner( config.get('tomato', 'host'), config.get('tomato', 'username'), config.get('tomato', 'password'), config.get('tomato', 'http_id')) statusses.append(("Device Scanner - Tomato", device_scanner.success_init)) elif config.has_option('netgear', 'host') and \ config.has_option('netgear', 'username') and \ config.has_option('netgear', 'password'): device_scanner = device.NetgearDeviceScanner( config.get('netgear', 'host'), config.get('netgear', 'username'), config.get('netgear', 'password')) statusses.append(("Device Scanner - Netgear", device_scanner.success_init)) else: device_scanner = None if device_scanner and not device_scanner.success_init: device_scanner = None # Device Tracker if device_scanner: device.DeviceTracker(bus, statemachine, device_scanner) statusses.append(("Device Tracker", True)) # Sun tracker if config.has_option("common", "latitude") and \ config.has_option("common", "longitude"): statusses.append(("Weather - Ephem", sun.setup( bus, statemachine, config.get("common", "latitude"), config.get("common", "longitude")))) # Chromecast if config.has_option("chromecast", "host"): chromecast_started = chromecast.setup(bus, statemachine, config.get("chromecast", "host")) statusses.append(("Chromecast", chromecast_started)) else: chromecast_started = False # Light control if config.has_section("hue"): if config.has_option("hue", "host"): light_control = light.HueLightControl(config.get("hue", "host")) else: light_control = light.HueLightControl() statusses.append(("Light Control - Hue", light_control.success_init)) else: light_control = None # Light trigger if light_control: light.setup(bus, statemachine, light_control) statusses.append(("Light Trigger", device_sun_light_trigger.setup( bus, statemachine))) if config.has_option("downloader", "download_dir"): statusses.append(("Downloader", downloader.setup( bus, config.get("downloader", "download_dir")))) # Currently only works with Chromecast or Light_Control if chromecast_started or light_control: statusses.append(("General", general.setup(bus, statemachine))) statusses.append(("Browser", browser.setup(bus))) statusses.append(("Media Buttons", keyboard.setup(bus))) # Init HTTP interface if config.has_option("httpinterface", "api_password"): httpinterface.HTTPInterface( bus, 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(bus)