Add Pi-hole enable and disable services ()

* Add service to disable pihole

* Add service to enable pihole

* Redefine optional string validator

* code review changes

* Change service parameter to timedelta

* code review changes
This commit is contained in:
John Luetke 2019-09-29 17:35:56 -07:00 committed by Charles Garwood
parent 5bd3d4aa0b
commit 245e51df7a
3 changed files with 55 additions and 1 deletions
homeassistant/components/pi_hole

View file

@ -5,7 +5,13 @@ import voluptuous as vol
from hole import Hole
from hole.exceptions import HoleError
from homeassistant.const import CONF_HOST, CONF_NAME, CONF_SSL, CONF_VERIFY_SSL
from homeassistant.const import (
CONF_HOST,
CONF_NAME,
CONF_API_KEY,
CONF_SSL,
CONF_VERIFY_SSL,
)
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.aiohttp_client import async_get_clientsession
@ -21,6 +27,9 @@ from .const import (
DEFAULT_SSL,
DEFAULT_VERIFY_SSL,
MIN_TIME_BETWEEN_UPDATES,
SERVICE_DISABLE,
SERVICE_DISABLE_ATTR_DURATION,
SERVICE_ENABLE,
)
LOGGER = logging.getLogger(__name__)
@ -31,6 +40,7 @@ CONFIG_SCHEMA = vol.Schema(
{
vol.Optional(CONF_HOST, default=DEFAULT_HOST): cv.string,
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
vol.Optional(CONF_API_KEY): cv.string,
vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean,
vol.Optional(CONF_LOCATION, default=DEFAULT_LOCATION): cv.string,
vol.Optional(CONF_VERIFY_SSL, default=DEFAULT_VERIFY_SSL): cv.boolean,
@ -40,6 +50,14 @@ CONFIG_SCHEMA = vol.Schema(
extra=vol.ALLOW_EXTRA,
)
SERVICE_DISABLE_SCHEMA = vol.Schema(
{
vol.Required(SERVICE_DISABLE_ATTR_DURATION): vol.All(
cv.time_period_str, cv.positive_timedelta
)
}
)
async def async_setup(hass, config):
"""Set up the pi_hole integration."""
@ -50,6 +68,7 @@ async def async_setup(hass, config):
use_tls = conf[CONF_SSL]
verify_tls = conf[CONF_VERIFY_SSL]
location = conf[CONF_LOCATION]
api_key = conf.get(CONF_API_KEY)
LOGGER.debug("Setting up %s integration with host %s", DOMAIN, host)
@ -62,6 +81,7 @@ async def async_setup(hass, config):
location=location,
tls=use_tls,
verify_tls=verify_tls,
api_token=api_key,
),
name,
)
@ -70,6 +90,28 @@ async def async_setup(hass, config):
hass.data[DOMAIN] = pi_hole
async def handle_disable(call):
if api_key is None:
raise vol.Invalid("Pi-hole api_key must be provided in configuration")
duration = call.data[SERVICE_DISABLE_ATTR_DURATION].total_seconds()
LOGGER.debug("Disabling %s %s for %d seconds", DOMAIN, host, duration)
await pi_hole.api.disable(duration)
async def handle_enable(call):
if api_key is None:
raise vol.Invalid("Pi-hole api_key must be provided in configuration")
LOGGER.debug("Enabling %s %s", DOMAIN, host)
await pi_hole.api.enable()
hass.services.async_register(
DOMAIN, SERVICE_DISABLE, handle_disable, schema=SERVICE_DISABLE_SCHEMA
)
hass.services.async_register(DOMAIN, SERVICE_ENABLE, handle_enable)
hass.async_create_task(async_load_platform(hass, SENSOR_DOMAIN, DOMAIN, {}, config))
return True

View file

@ -12,6 +12,10 @@ DEFAULT_NAME = "Pi-Hole"
DEFAULT_SSL = False
DEFAULT_VERIFY_SSL = True
SERVICE_DISABLE = "disable"
SERVICE_ENABLE = "enable"
SERVICE_DISABLE_ATTR_DURATION = "duration"
ATTR_BLOCKED_DOMAINS = "domains_blocked"
MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=5)

View file

@ -0,0 +1,8 @@
disable:
description: Disable Pi-hole for an amount of time
fields:
duration:
description: Time that the Pi-hole should be disabled for
example: "00:00:15"
enable:
description: Enable Pi-hole