mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-28 03:26:32 +00:00
Work on HostControll
This commit is contained in:
parent
ffe8c13cb0
commit
8094b6beb4
@ -23,15 +23,20 @@ Communicate over unix socket with a host daemon.
|
|||||||
|
|
||||||
- Answer
|
- Answer
|
||||||
```
|
```
|
||||||
[{}]
|
{}|OK|ERROR
|
||||||
OK|ERROR
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## HassIO REST API
|
## HassIO REST API
|
||||||
|
|
||||||
Interface for HomeAssistant to controll things from supervisor.
|
Interface for HomeAssistant to controll things from supervisor.
|
||||||
|
|
||||||
### host
|
### HassIO
|
||||||
|
|
||||||
|
- `/host/update`
|
||||||
|
Payload: {'version': '0.XX'}
|
||||||
|
If version is None it read last version from server.
|
||||||
|
|
||||||
|
### Host
|
||||||
- `/host/network`
|
- `/host/network`
|
||||||
Payload: {'hostname': '', 'mode': 'dhcp|fixed', 'ssid': '', 'ip': '', 'netmask': '', 'gateway': ''}
|
Payload: {'hostname': '', 'mode': 'dhcp|fixed', 'ssid': '', 'ip': '', 'netmask': '', 'gateway': ''}
|
||||||
|
|
||||||
@ -41,30 +46,33 @@ Payload: {'hostname': '', 'mode': 'dhcp|fixed', 'ssid': '', 'ip': '', 'netmask':
|
|||||||
|
|
||||||
- `/host/info`
|
- `/host/info`
|
||||||
|
|
||||||
|
- `/host/update`
|
||||||
|
On some device we support host upates. Like ResinOS.
|
||||||
|
|
||||||
### /homeassistant/info
|
### HomeAssistant
|
||||||
|
|
||||||
### /homeassistant/update
|
- `/homeassistant/info`
|
||||||
- Payload: {'version': '0.XX.Y'}
|
|
||||||
|
- `/homeassistant/update`
|
||||||
|
Payload: {'version': '0.XX.Y'}
|
||||||
If version is None it read last version from server.
|
If version is None it read last version from server.
|
||||||
|
|
||||||
## REST API addons
|
### REST API addons
|
||||||
|
|
||||||
### /addons/info
|
- `/addons/info`
|
||||||
|
|
||||||
### /addons/reload
|
- `/addons/reload`
|
||||||
|
|
||||||
### /addons/{addon}/start
|
- `/addons/{addon}/start`
|
||||||
- Payload: {'options': {}}
|
Payload: {'options': {}}
|
||||||
|
|
||||||
### /addons/{addon}/stop
|
- `/addons/{addon}/stop`
|
||||||
|
|
||||||
### /addons/{addon}/install
|
- `/addons/{addon}/install`
|
||||||
- Payload: {'version': 'x.x'}
|
Payload: {'version': 'x.x'}
|
||||||
|
|
||||||
### /addons/{addon}/uninstall
|
- `/addons/{addon}/uninstall`
|
||||||
|
|
||||||
### /addons/{addon}/update
|
|
||||||
- Payload: {'version': 'x.x'}
|
|
||||||
|
|
||||||
|
- `/addons/{addon}/update`
|
||||||
|
Payload: {'version': 'x.x'}
|
||||||
If version is None it read last version from server.
|
If version is None it read last version from server.
|
||||||
|
@ -5,7 +5,7 @@ import os
|
|||||||
|
|
||||||
from colorlog import ColoredFormatter
|
from colorlog import ColoredFormatter
|
||||||
|
|
||||||
from .const import FILE_HASSIO_ADDONS
|
from .const import FILE_HASSIO_ADDONS, SOCKET_DOCKER
|
||||||
from .config import CoreConfig
|
from .config import CoreConfig
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
@ -61,7 +61,7 @@ def initialize_logging():
|
|||||||
|
|
||||||
def check_environment():
|
def check_environment():
|
||||||
"""Check if all environment are exists."""
|
"""Check if all environment are exists."""
|
||||||
for key in ('SUPERVISOR_SHARE', 'SUPERVISOR_NAME', 'DOCKER_SOCKET',
|
for key in ('SUPERVISOR_SHARE', 'SUPERVISOR_NAME',
|
||||||
'HOMEASSISTANT_REPOSITORY'):
|
'HOMEASSISTANT_REPOSITORY'):
|
||||||
try:
|
try:
|
||||||
os.environ[key]
|
os.environ[key]
|
||||||
@ -69,7 +69,7 @@ def check_environment():
|
|||||||
_LOGGER.fatal("Can't find %s in env!", key)
|
_LOGGER.fatal("Can't find %s in env!", key)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if not os.path.isfile(os.environ['DOCKER_SOCKET']):
|
if not os.path.isfile(SOCKET_DOCKER):
|
||||||
_LOGGER.fatal("Can't find docker socket!")
|
_LOGGER.fatal("Can't find docker socket!")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -4,9 +4,9 @@ import logging
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
FILE_HASSIO_CONFIG, CONF_SUPERVISOR_TAG, CONF_SUPERVISOR_IMAGE,
|
FILE_HASSIO_CONFIG, HOMEASSISTANT_TAG, HOMEASSISTANT_IMAGE,
|
||||||
CONF_HOMEASSISTANT_TAG, CONF_HOMEASSISTANT_IMAGE, HOMEASSISTANT_SSL,
|
HOMEASSISTANT_SSL, HOMEASSISTANT_CONFIG, HASSIO_SHARE_EXT,
|
||||||
HOMEASSISTANT_CONFIG, HASSIO_SHARE_EXT, HASSIO_SHARE_INT)
|
HASSIO_SHARE_INT)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -29,9 +29,8 @@ class CoreConfig(object):
|
|||||||
|
|
||||||
if not self._data:
|
if not self._data:
|
||||||
self._data.update({
|
self._data.update({
|
||||||
CONF_HOMEASSISTANT_IMAGE:
|
HOMEASSISTANT_IMAGE: os.environ['HOMEASSISTANT_REPOSITORY'],
|
||||||
os.environ['HOMEASSISTANT_REPOSITORY'],
|
HOMEASSISTANT_TAG: '',
|
||||||
CONF_HOMEASSISTANT_TAG: '',
|
|
||||||
})
|
})
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
@ -45,17 +44,17 @@ class CoreConfig(object):
|
|||||||
@property
|
@property
|
||||||
def homeassistant_image(self):
|
def homeassistant_image(self):
|
||||||
"""Return docker homeassistant repository."""
|
"""Return docker homeassistant repository."""
|
||||||
return self._data.get(CONF_HOMEASSISTANT_IMAGE)
|
return self._data.get(HOMEASSISTANT_IMAGE)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def homeassistant_tag(self):
|
def homeassistant_tag(self):
|
||||||
"""Return docker homeassistant tag."""
|
"""Return docker homeassistant tag."""
|
||||||
return self._data.get(CONF_HOMEASSISTANT_TAG)
|
return self._data.get(HOMEASSISTANT_TAG)
|
||||||
|
|
||||||
@homeassistant_tag.setter
|
@homeassistant_tag.setter
|
||||||
def homeassistant_tag(self, value):
|
def homeassistant_tag(self, value):
|
||||||
"""Set docker homeassistant tag."""
|
"""Set docker homeassistant tag."""
|
||||||
self._data[CONF_HOMEASSISTANT_TAG] = value
|
self._data[HOMEASSISTANT_TAG] = value
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
"""Const file for HassIO."""
|
"""Const file for HassIO."""
|
||||||
import os
|
import os
|
||||||
|
|
||||||
URL_SUPERVISOR_VERSION = \
|
URL_HASSIO_VERSION = \
|
||||||
'https://raw.githubusercontent.com/pvizeli/hassio/master/version.json'
|
'https://raw.githubusercontent.com/pvizeli/hassio/master/version.json'
|
||||||
|
|
||||||
URL_ADDONS_REPO = 'https://github.com/pvizeli/hassio-addons'
|
URL_ADDONS_REPO = 'https://github.com/pvizeli/hassio-addons'
|
||||||
@ -15,12 +15,13 @@ HASSIO_SHARE_EXT = os.environ['SUPERVISOR_SHARE']
|
|||||||
HASSIO_SHARE_INT = '/data'
|
HASSIO_SHARE_INT = '/data'
|
||||||
HASSIO_DOCKER = os.environ['SUPERVISOR_NAME']
|
HASSIO_DOCKER = os.environ['SUPERVISOR_NAME']
|
||||||
|
|
||||||
|
SOCKET_DOCKER = "/var/run/docker.sock"
|
||||||
|
SOCKET_HC = "/var/run/hassio-hc.sock"
|
||||||
|
|
||||||
HOMEASSISTANT_CONFIG = "{}/homeassistant_config"
|
HOMEASSISTANT_CONFIG = "{}/homeassistant_config"
|
||||||
HOMEASSISTANT_SSL = "{}/homeassistant_ssl"
|
HOMEASSISTANT_SSL = "{}/homeassistant_ssl"
|
||||||
|
|
||||||
HTTP_PORT = 9123
|
HTTP_PORT = 9123
|
||||||
|
|
||||||
CONF_SUPERVISOR_IMAGE = 'supervisor_image'
|
HOMEASSISTANT_IMAGE = 'homeassistant_image'
|
||||||
CONF_SUPERVISOR_TAG = 'supervisor_tag'
|
HOMEASSISTANT_TAG = 'homeassistant_tag'
|
||||||
CONF_HOMEASSISTANT_IMAGE = 'homeassistant_image'
|
|
||||||
CONF_HOMEASSISTANT_TAG = 'homeassistant_tag'
|
|
||||||
|
@ -5,9 +5,8 @@ import logging
|
|||||||
import aiohttp
|
import aiohttp
|
||||||
import docker
|
import docker
|
||||||
|
|
||||||
import hassio.bootstrap as bootstrap
|
from . import bootstrap, tools
|
||||||
import hassio.tools as tools
|
from .const import HOMEASSISTANT_TAG, SOCKET_DOCKER
|
||||||
from .const import CONF_HOMEASSISTANT_TAG
|
|
||||||
from .docker.homeassistant import DockerHomeAssistant
|
from .docker.homeassistant import DockerHomeAssistant
|
||||||
from .docker.supervisor import DockerSupervisor
|
from .docker.supervisor import DockerSupervisor
|
||||||
|
|
||||||
@ -18,7 +17,7 @@ async def run_hassio(loop):
|
|||||||
"""Start HassIO."""
|
"""Start HassIO."""
|
||||||
websession = aiohttp.ClientSession(loop=loop)
|
websession = aiohttp.ClientSession(loop=loop)
|
||||||
dock = docker.DockerClient(
|
dock = docker.DockerClient(
|
||||||
base_url='unix://var/run/docker.sock', version='auto')
|
base_url="unix:/{}".format(SOCKET_DOCKER), version='auto')
|
||||||
|
|
||||||
# init system
|
# init system
|
||||||
config = bootstrap.initialize_system_data()
|
config = bootstrap.initialize_system_data()
|
||||||
@ -42,12 +41,12 @@ async def run_hassio(loop):
|
|||||||
while True:
|
while True:
|
||||||
current = await tools.fetch_current_versions(websession)
|
current = await tools.fetch_current_versions(websession)
|
||||||
if current and CONF_HOMEASSISTANT_TAG in current:
|
if current and CONF_HOMEASSISTANT_TAG in current:
|
||||||
if await docker_hass.install(current[CONF_HOMEASSISTANT_TAG]):
|
if await docker_hass.install(current[HOMEASSISTANT_TAG]):
|
||||||
break
|
break
|
||||||
_LOGGER.warning("Can't fetch info from github. Retry in 60.")
|
_LOGGER.warning("Can't fetch info from github. Retry in 60.")
|
||||||
await asyncio.sleep(60, loop=loop)
|
await asyncio.sleep(60, loop=loop)
|
||||||
|
|
||||||
config.homeassistant_tag = current[CONF_HOMEASSISTANT_TAG]
|
config.homeassistant_tag = current[HOMEASSISTANT_TAG]
|
||||||
else:
|
else:
|
||||||
_LOGGER.info("HomeAssistant docker is exists.")
|
_LOGGER.info("HomeAssistant docker is exists.")
|
||||||
|
|
||||||
|
13
hassio_api/hassio/host_controll.py
Normal file
13
hassio_api/hassio/host_controll.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
"""Host controll for HassIO."""
|
||||||
|
import asyncio
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from .const import SOCKET_HC
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class HostControll(object):
|
||||||
|
"""Manage host function."""
|
||||||
|
|
||||||
|
def __init__(self, loop):
|
||||||
|
"""Initialize host controll."""
|
@ -4,7 +4,7 @@ import re
|
|||||||
|
|
||||||
import async_timeout
|
import async_timeout
|
||||||
|
|
||||||
from .const import URL_SUPERVISOR_VERSION
|
from .const import URL_HASSIO_VERSION
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ async def fetch_current_versions(websession):
|
|||||||
"""Fetch current versions from github."""
|
"""Fetch current versions from github."""
|
||||||
try:
|
try:
|
||||||
with async_timeout.timeout(10, loop=websession.loop):
|
with async_timeout.timeout(10, loop=websession.loop):
|
||||||
async with websession.get(URL_SUPERVISOR_VERSION) as request:
|
async with websession.get(URL_HASSIO_VERSION) as request:
|
||||||
return await request.json()
|
return await request.json()
|
||||||
|
|
||||||
except Exception as err: # pylint: disable=broad-except
|
except Exception as err: # pylint: disable=broad-except
|
||||||
|
@ -13,8 +13,6 @@ runSupervisor() {
|
|||||||
-v /var/run/hassio-hc.sock:/var/run/hassio-hc.sock \
|
-v /var/run/hassio-hc.sock:/var/run/hassio-hc.sock \
|
||||||
-v /resin-data:/data \
|
-v /resin-data:/data \
|
||||||
-v /var/log/supervisor-log:/var/log \
|
-v /var/log/supervisor-log:/var/log \
|
||||||
-e DOCKER_SOCKET=/var/run/docker.sock \
|
|
||||||
-e HASSIO_HC_SOCKET=/var/run/hassio-hc.sock \
|
|
||||||
-e SUPERVISOR_SHARE=/resin-data \
|
-e SUPERVISOR_SHARE=/resin-data \
|
||||||
-e SUPERVISOR_NAME=resin_supervisor \
|
-e SUPERVISOR_NAME=resin_supervisor \
|
||||||
-e HOMEASSISTANT_REPOSITORY=${HOMEASSISTANT_REPOSITORY} \
|
-e HOMEASSISTANT_REPOSITORY=${HOMEASSISTANT_REPOSITORY} \
|
||||||
|
@ -13,8 +13,6 @@ docker run --privileged --name resin_supervisor \
|
|||||||
-v /var/run/hassio-hc.sock:/var/run/hassio-hc.sock \
|
-v /var/run/hassio-hc.sock:/var/run/hassio-hc.sock \
|
||||||
-v /resin-data:/data \
|
-v /resin-data:/data \
|
||||||
-v /var/log/supervisor-log:/var/log \
|
-v /var/log/supervisor-log:/var/log \
|
||||||
-e DOCKER_SOCKET=/var/run/docker.sock \
|
|
||||||
-e HASSIO_HC_SOCKET=/var/run/hassio-hc.sock \
|
|
||||||
-e SUPERVISOR_SHARE=/resin-data \
|
-e SUPERVISOR_SHARE=/resin-data \
|
||||||
-e SUPERVISOR_NAME=resin_supervisor \
|
-e SUPERVISOR_NAME=resin_supervisor \
|
||||||
-e HOMEASSISTANT_REPOSITORY=${HOMEASSISTANT_REPOSITORY} \
|
-e HOMEASSISTANT_REPOSITORY=${HOMEASSISTANT_REPOSITORY} \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user