mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-06-22 01:46:29 +00:00

* Improve gdbus error handling * Fix logging type * Detect no dbus * Fix issue with complex * Update hassio/dbus/__init__.py Co-Authored-By: Franck Nijhof <frenck@frenck.nl> * Update hassio/dbus/hostname.py Co-Authored-By: Franck Nijhof <frenck@frenck.nl> * Update hassio/dbus/rauc.py Co-Authored-By: Franck Nijhof <frenck@frenck.nl> * Update hassio/dbus/systemd.py Co-Authored-By: Franck Nijhof <frenck@frenck.nl> * Fix black
57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
"""Power control for host."""
|
|
import logging
|
|
|
|
from ..coresys import CoreSysAttributes
|
|
from ..exceptions import HostNotSupportedError
|
|
|
|
_LOGGER: logging.Logger = logging.getLogger(__name__)
|
|
|
|
MANAGER = "manager"
|
|
HOSTNAME = "hostname"
|
|
|
|
|
|
class SystemControl(CoreSysAttributes):
|
|
"""Handle host power controls."""
|
|
|
|
def __init__(self, coresys):
|
|
"""Initialize host power handling."""
|
|
self.coresys = coresys
|
|
|
|
def _check_dbus(self, flag):
|
|
"""Check if systemd is connect or raise error."""
|
|
if flag == MANAGER and self.sys_dbus.systemd.is_connected:
|
|
return
|
|
if flag == HOSTNAME and self.sys_dbus.hostname.is_connected:
|
|
return
|
|
|
|
_LOGGER.error("No %s D-Bus connection available", flag)
|
|
raise HostNotSupportedError()
|
|
|
|
async def reboot(self):
|
|
"""Reboot host system."""
|
|
self._check_dbus(MANAGER)
|
|
|
|
_LOGGER.info("Initialize host reboot over systemd")
|
|
try:
|
|
await self.sys_core.shutdown()
|
|
finally:
|
|
await self.sys_dbus.systemd.reboot()
|
|
|
|
async def shutdown(self):
|
|
"""Shutdown host system."""
|
|
self._check_dbus(MANAGER)
|
|
|
|
_LOGGER.info("Initialize host power off over systemd")
|
|
try:
|
|
await self.sys_core.shutdown()
|
|
finally:
|
|
await self.sys_dbus.systemd.power_off()
|
|
|
|
async def set_hostname(self, hostname):
|
|
"""Set local a new Hostname."""
|
|
self._check_dbus(HOSTNAME)
|
|
|
|
_LOGGER.info("Set hostname %s", hostname)
|
|
await self.sys_dbus.hostname.set_static_hostname(hostname)
|
|
await self.sys_host.info.update()
|