46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
"""
|
|
homeassistant.components.shell_command
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Exposes regular shell commands as services.
|
|
|
|
For more details about this platform, please refer to the documentation at
|
|
https://home-assistant.io/components/shell_command/
|
|
"""
|
|
import logging
|
|
import subprocess
|
|
|
|
from homeassistant.util import slugify
|
|
|
|
DOMAIN = 'shell_command'
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
def setup(hass, config):
|
|
""" Sets up the shell_command component. """
|
|
conf = config.get(DOMAIN)
|
|
|
|
if not isinstance(conf, dict):
|
|
_LOGGER.error('Expected configuration to be a dictionary')
|
|
return False
|
|
|
|
for name in conf.keys():
|
|
if name != slugify(name):
|
|
_LOGGER.error('Invalid service name: %s. Try %s',
|
|
name, slugify(name))
|
|
return False
|
|
|
|
def service_handler(call):
|
|
""" Execute a shell command service. """
|
|
try:
|
|
subprocess.call(conf[call.service], shell=True,
|
|
stdout=subprocess.DEVNULL,
|
|
stderr=subprocess.DEVNULL)
|
|
except subprocess.SubprocessError:
|
|
_LOGGER.exception('Error running command')
|
|
|
|
for name in conf.keys():
|
|
hass.services.register(DOMAIN, name, service_handler)
|
|
|
|
return True
|