diff --git a/hassio_api/hassio/core.py b/hassio_api/hassio/core.py index c81a6370a..361296813 100644 --- a/hassio_api/hassio/core.py +++ b/hassio_api/hassio/core.py @@ -6,6 +6,7 @@ import aiohttp import docker from . import bootstrap, tools +from .host_controll import HostControll from .const import HOMEASSISTANT_TAG, SOCKET_DOCKER from .docker.homeassistant import DockerHomeAssistant from .docker.supervisor import DockerSupervisor @@ -32,6 +33,10 @@ async def run_hassio(loop): tag=config.homeassistant_tag ) + # init hostcontroll + host_controll = HostControll(loop) + await host_controll.info() + # first start of supervisor? if config.homeassistant_tag is None: _LOGGER.info("First start of supervisor, read version from github.") @@ -40,7 +45,7 @@ async def run_hassio(loop): current = None while True: current = await tools.fetch_current_versions(websession) - if current and CONF_HOMEASSISTANT_TAG in current: + if current and HOMEASSISTANT_TAG in current: if await docker_hass.install(current[HOMEASSISTANT_TAG]): break _LOGGER.warning("Can't fetch info from github. Retry in 60.") diff --git a/hassio_api/hassio/host_controll.py b/hassio_api/hassio/host_controll.py index a5edcbf63..44feb4077 100644 --- a/hassio_api/hassio/host_controll.py +++ b/hassio_api/hassio/host_controll.py @@ -1,13 +1,81 @@ """Host controll for HassIO.""" -import asyncio +import json import logging +import os from .const import SOCKET_HC _LOGGER = logging.getLogger(__name__) + class HostControll(object): - """Manage host function.""" + """Client for host controll.""" def __init__(self, loop): - """Initialize host controll.""" + """Initialize HostControll socket client.""" + self.loop = loop + + async def _send_command(self, command): + """Send command to host. + + Is a coroutine. + """ + if not os.path.isfile(SOCKET_HC): + return + + reader, writer = await self.loop.create_unix_connection(SOCKET_HC) + + # send + _LOGGER.info("Send '%s' to HostControll.", command) + writer.write(command.encode()) + + # receive + data = await reader.readline() + response = data.decode().Upper() + _LOGGER.info("Receive from HostControll: %s.", response) + + if response == "OK": + return True + elif response == "ERROR": + return False + else: + return json.loads(response) + + def info(self): + """Return Info from host. + + Return a coroutine. + """ + return self._send_command("info") + + def reboot(self): + """Reboot the host system. + + Return a coroutine. + """ + return self._send_command("reboot") + + def shutdown(self): + """Shutdown the host system. + + Return a coroutine. + """ + return self._send_command("shutdown") + + def host_update(self, version=None): + """Update the host system. + + Return a coroutine. + """ + if version: + return self._send_command("host-update " + version) + return self._send_command("host-update") + + def supervisor_update(self, version=None): + """Update the supervisor on host system. + + Return a coroutine. + """ + if version: + return self._send_command("supervisor-update " + version) + return self._send_command("supervisor-update") diff --git a/hassio_api/setup.py b/hassio_api/setup.py index 852d7db96..00f68138e 100644 --- a/hassio_api/setup.py +++ b/hassio_api/setup.py @@ -1,6 +1,6 @@ from setuptools import setup -VERSION = "0.1" +VERSION = "0.2" setup( name='HassIO',