Add Pi-hole enable and disable services (#27055)
* 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:
parent
5bd3d4aa0b
commit
245e51df7a
3 changed files with 55 additions and 1 deletions
homeassistant/components/pi_hole
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
8
homeassistant/components/pi_hole/services.yaml
Normal file
8
homeassistant/components/pi_hole/services.yaml
Normal 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
|
Loading…
Add table
Reference in a new issue