From e1b1d68d5f5b9ffe3a0736ea95de2430724f73fd Mon Sep 17 00:00:00 2001 From: Gleb Date: Tue, 17 Aug 2021 14:02:11 +0300 Subject: [PATCH] Added the ability to specify the default host in the configuration --- README.md | 5 +++++ custom_components/ssh_command/__init__.py | 24 +++++++++++++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c8f1538..eea26a9 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,10 @@ If the integration is not in the list, you need to clear the browser cache. ```yaml ssh_command: + host: 192.168.1.123 # Optional + port: 22 # Optional + username: pi # Optional + password: raspberry # Optional ``` ## Usage @@ -38,6 +42,7 @@ script: - service: ssh_command.exec_command data: host: 192.168.1.123 + port: 22 user: pi pass: raspberry command: ls -la diff --git a/custom_components/ssh_command/__init__.py b/custom_components/ssh_command/__init__.py index dbbd038..413f0f9 100644 --- a/custom_components/ssh_command/__init__.py +++ b/custom_components/ssh_command/__init__.py @@ -1,19 +1,35 @@ import logging +import voluptuous as vol + from homeassistant.core import ServiceCall +from homeassistant.const import CONF_HOST, CONF_PORT, CONF_USERNAME, CONF_PASSWORD +from homeassistant.helpers import config_validation as cv from paramiko import SSHClient, AutoAddPolicy _LOGGER = logging.getLogger(__name__) DOMAIN = 'ssh_command' +SSH_COMMAND_SCHEMA = vol.All( + vol.Schema({ + vol.Optional(CONF_HOST): cv.string, + vol.Optional(CONF_PORT): cv.string, + vol.Optional(CONF_USERNAME): cv.string, + vol.Optional(CONF_PASSWORD): cv.string, + }, extra=vol.PREVENT_EXTRA)) + +CONFIG_SCHEMA = vol.Schema({ + DOMAIN: SSH_COMMAND_SCHEMA +}, extra=vol.ALLOW_EXTRA) def setup(hass, hass_config): + hass.data[DOMAIN] = hass_config.get(DOMAIN, {}) async def exec_command(call: ServiceCall): - host = call.data.get('host', '172.17.0.1') - port = call.data.get('port', 22) - username = call.data.get('user', 'pi') - password = call.data.get('pass', 'raspberry') + host = call.data.get('host', hass.data[DOMAIN].get(CONF_HOST, '172.17.0.1')) + port = call.data.get('port', hass.data[DOMAIN].get(CONF_PORT, 22)) + username = call.data.get('user', hass.data[DOMAIN].get(CONF_USERNAME, 'pi')) + password = call.data.get('pass', hass.data[DOMAIN].get(CONF_PASSWORD, 'raspberry')) command = call.data.get('command') client = SSHClient()