Add automode

This commit is contained in:
pvizeli 2017-04-13 11:25:06 +02:00 committed by Pascal Vizeli
parent f340a19e40
commit dbc080c24d
3 changed files with 40 additions and 15 deletions

View File

@ -40,6 +40,18 @@ class AddonManager(AddonsData):
return
self.read_addons_repo()
async def auto_boot(self, start_type):
"""Boot addons with mode auto."""
boot_list = self.list_startup(start_type)
tasks = []
for addon in boot_list:
tasks.append(self.loop.create_task(self.start_addon(addon)))
_LOGGER.info("Startup %s run %d addons.", start_type, len(tasks))
if tasks:
await asyncio.wait(tasks, loop=self.loop)
async def install_addon(self, addon, version=None):
"""Install a addon."""
if not self.exists_addon(addon):
@ -108,10 +120,7 @@ class AddonManager(AddonsData):
_LOGGER.error("Can't write options for addon %s.", addon)
return False
if not await self.dockers[addon].run():
return False
return True
return await self.dockers[addon].run():
async def stop_addon(self, addon):
"""Stop addon."""
@ -119,10 +128,7 @@ class AddonManager(AddonsData):
_LOGGER.error("No docker found for addon %s.", addon)
return False
if not await self.dockers[addon].stop():
return False
return True
return await self.dockers[addon].stop():
async def update_addon(self, addon, version=None):
"""Update addon."""
@ -135,7 +141,4 @@ class AddonManager(AddonsData):
return False
version = version or self.get_version(addon)
if not await self.dockers[addon].update(version):
return False
return True
return await self.dockers[addon].update(version):

View File

@ -73,12 +73,12 @@ class AddonsData(Config):
@property
def list_installed(self):
"""Return a list of installed addons."""
return self._data.keys()
return set(self._data.keys())
@property
def list_all(self):
"""Return a list of available addons."""
return self._addons_data.keys()
return set(self._addons_data.keys())
@property
def list(self):
@ -95,6 +95,21 @@ class AddonsData(Config):
return data
def list_startup(self, start_type):
"""Get list of installed addon with need start by type."""
addon_list = set()
for addon, value in self._data.items():
if self.get_boot(addon) != BOOT_AUTO:
continue
try:
if self._addons_data[addon][ATTR_STARTUP] == start_type:
addon_list.add(addon)
except KeyError:
continue
return addon_list
def exists_addon(self, addon):
"""Return True if a addon exists."""
return addon in self._addons_data

View File

@ -10,7 +10,8 @@ from .addons import AddonManager
from .api import RestAPI
from .host_controll import HostControll
from .const import (
SOCKET_DOCKER, RUN_UPDATE_INFO_TASKS, RUN_RELOAD_ADDONS_TASKS)
SOCKET_DOCKER, RUN_UPDATE_INFO_TASKS, RUN_RELOAD_ADDONS_TASKS,
STARTUP_AFTER, STARTUP_BEFORE)
from .scheduler import Scheduler
from .dock.homeassistant import DockerHomeAssistant
from .dock.supervisor import DockerSupervisor
@ -87,9 +88,15 @@ class HassIO(object):
# start api
await self.api.start()
# start addon mark as before
await self.addons.auto_boot(STARTUP_BEFORE)
# run HomeAssistant
await self.homeassistant.run()
# start addon mark as after
await self.addons.auto_boot(STARTUP_AFTER)
async def stop(self):
"""Stop a running orchestration."""
tasks = [self.websession.close(), self.api.stop()]