mirror of
https://github.com/home-assistant/core.git
synced 2025-07-08 05:47:10 +00:00
Add restrict_watering
and unrestrict_watering
services to RainMachine (#64219)
This commit is contained in:
parent
573e17472b
commit
ff4ad8ddf8
@ -67,9 +67,9 @@ UPDATE_INTERVALS = {
|
|||||||
DATA_ZONES: timedelta(seconds=15),
|
DATA_ZONES: timedelta(seconds=15),
|
||||||
}
|
}
|
||||||
|
|
||||||
# Constants expected by the RainMachine API for Service Data
|
|
||||||
CONF_CONDITION = "condition"
|
CONF_CONDITION = "condition"
|
||||||
CONF_DEWPOINT = "dewpoint"
|
CONF_DEWPOINT = "dewpoint"
|
||||||
|
CONF_DURATION = "duration"
|
||||||
CONF_ET = "et"
|
CONF_ET = "et"
|
||||||
CONF_MAXRH = "maxrh"
|
CONF_MAXRH = "maxrh"
|
||||||
CONF_MAXTEMP = "maxtemp"
|
CONF_MAXTEMP = "maxtemp"
|
||||||
@ -95,8 +95,10 @@ CV_WX_DATA_VALID_SOLARRAD = vol.All(vol.Coerce(float), vol.Range(min=0.0, max=5.
|
|||||||
|
|
||||||
SERVICE_NAME_PAUSE_WATERING = "pause_watering"
|
SERVICE_NAME_PAUSE_WATERING = "pause_watering"
|
||||||
SERVICE_NAME_PUSH_WEATHER_DATA = "push_weather_data"
|
SERVICE_NAME_PUSH_WEATHER_DATA = "push_weather_data"
|
||||||
|
SERVICE_NAME_RESTRICT_WATERING = "restrict_watering"
|
||||||
SERVICE_NAME_STOP_ALL = "stop_all"
|
SERVICE_NAME_STOP_ALL = "stop_all"
|
||||||
SERVICE_NAME_UNPAUSE_WATERING = "unpause_watering"
|
SERVICE_NAME_UNPAUSE_WATERING = "unpause_watering"
|
||||||
|
SERVICE_NAME_UNRESTRICT_WATERING = "unrestrict_watering"
|
||||||
|
|
||||||
SERVICE_SCHEMA = vol.Schema(
|
SERVICE_SCHEMA = vol.Schema(
|
||||||
{
|
{
|
||||||
@ -129,6 +131,12 @@ SERVICE_PUSH_WEATHER_DATA_SCHEMA = SERVICE_SCHEMA.extend(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
SERVICE_RESTRICT_WATERING_SCHEMA = SERVICE_SCHEMA.extend(
|
||||||
|
{
|
||||||
|
vol.Required(CONF_DURATION): cv.time_period,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_get_controller_for_service_call(
|
def async_get_controller_for_service_call(
|
||||||
@ -275,6 +283,12 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def async_restrict_watering(call: ServiceCall) -> None:
|
||||||
|
"""Restrict watering for a time period."""
|
||||||
|
controller = async_get_controller_for_service_call(hass, call)
|
||||||
|
await controller.restrictions.restrict(call.data[CONF_DURATION])
|
||||||
|
await async_update_programs_and_zones(hass, entry)
|
||||||
|
|
||||||
async def async_stop_all(call: ServiceCall) -> None:
|
async def async_stop_all(call: ServiceCall) -> None:
|
||||||
"""Stop all watering."""
|
"""Stop all watering."""
|
||||||
controller = async_get_controller_for_service_call(hass, call)
|
controller = async_get_controller_for_service_call(hass, call)
|
||||||
@ -287,6 +301,12 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
await controller.watering.unpause_all()
|
await controller.watering.unpause_all()
|
||||||
await async_update_programs_and_zones(hass, entry)
|
await async_update_programs_and_zones(hass, entry)
|
||||||
|
|
||||||
|
async def async_unrestrict_watering(call: ServiceCall) -> None:
|
||||||
|
"""Unrestrict watering."""
|
||||||
|
controller = async_get_controller_for_service_call(hass, call)
|
||||||
|
await controller.restrictions.unrestrict()
|
||||||
|
await async_update_programs_and_zones(hass, entry)
|
||||||
|
|
||||||
for service_name, schema, method in (
|
for service_name, schema, method in (
|
||||||
(
|
(
|
||||||
SERVICE_NAME_PAUSE_WATERING,
|
SERVICE_NAME_PAUSE_WATERING,
|
||||||
@ -298,8 +318,18 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
SERVICE_PUSH_WEATHER_DATA_SCHEMA,
|
SERVICE_PUSH_WEATHER_DATA_SCHEMA,
|
||||||
async_push_weather_data,
|
async_push_weather_data,
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
SERVICE_NAME_RESTRICT_WATERING,
|
||||||
|
SERVICE_RESTRICT_WATERING_SCHEMA,
|
||||||
|
async_restrict_watering,
|
||||||
|
),
|
||||||
(SERVICE_NAME_STOP_ALL, SERVICE_SCHEMA, async_stop_all),
|
(SERVICE_NAME_STOP_ALL, SERVICE_SCHEMA, async_stop_all),
|
||||||
(SERVICE_NAME_UNPAUSE_WATERING, SERVICE_SCHEMA, async_unpause_watering),
|
(SERVICE_NAME_UNPAUSE_WATERING, SERVICE_SCHEMA, async_unpause_watering),
|
||||||
|
(
|
||||||
|
SERVICE_NAME_UNRESTRICT_WATERING,
|
||||||
|
SERVICE_SCHEMA,
|
||||||
|
async_unrestrict_watering,
|
||||||
|
),
|
||||||
):
|
):
|
||||||
if hass.services.has_service(DOMAIN, service_name):
|
if hass.services.has_service(DOMAIN, service_name):
|
||||||
continue
|
continue
|
||||||
@ -325,8 +355,10 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
for service_name in (
|
for service_name in (
|
||||||
SERVICE_NAME_PAUSE_WATERING,
|
SERVICE_NAME_PAUSE_WATERING,
|
||||||
SERVICE_NAME_PUSH_WEATHER_DATA,
|
SERVICE_NAME_PUSH_WEATHER_DATA,
|
||||||
|
SERVICE_NAME_RESTRICT_WATERING,
|
||||||
SERVICE_NAME_STOP_ALL,
|
SERVICE_NAME_STOP_ALL,
|
||||||
SERVICE_NAME_UNPAUSE_WATERING,
|
SERVICE_NAME_UNPAUSE_WATERING,
|
||||||
|
SERVICE_NAME_UNRESTRICT_WATERING,
|
||||||
):
|
):
|
||||||
hass.services.async_remove(DOMAIN, service_name)
|
hass.services.async_remove(DOMAIN, service_name)
|
||||||
|
|
||||||
|
@ -47,6 +47,24 @@ pause_watering:
|
|||||||
min: 1
|
min: 1
|
||||||
max: 43200
|
max: 43200
|
||||||
unit_of_measurement: seconds
|
unit_of_measurement: seconds
|
||||||
|
restrict_watering:
|
||||||
|
name: Restrict All Watering
|
||||||
|
description: Restrict all watering activities from starting for a time period
|
||||||
|
fields:
|
||||||
|
device_id:
|
||||||
|
name: Controller
|
||||||
|
description: The controller whose watering activities should be restricted
|
||||||
|
required: true
|
||||||
|
selector:
|
||||||
|
device:
|
||||||
|
integration: rainmachine
|
||||||
|
duration:
|
||||||
|
name: Duration
|
||||||
|
description: The time period to restrict watering activities from starting
|
||||||
|
required: true
|
||||||
|
default: "01:00:00"
|
||||||
|
selector:
|
||||||
|
text:
|
||||||
start_program:
|
start_program:
|
||||||
name: Start Program
|
name: Start Program
|
||||||
description: Start a program
|
description: Start a program
|
||||||
@ -241,3 +259,14 @@ push_weather_data:
|
|||||||
max: 40
|
max: 40
|
||||||
step: 0.1
|
step: 0.1
|
||||||
unit_of_measurement: '°C'
|
unit_of_measurement: '°C'
|
||||||
|
unrestrict_watering:
|
||||||
|
name: Unrestrict All Watering
|
||||||
|
description: Unrestrict all watering activities
|
||||||
|
fields:
|
||||||
|
device_id:
|
||||||
|
name: Controller
|
||||||
|
description: The controller whose watering activities should be unrestricted
|
||||||
|
required: true
|
||||||
|
selector:
|
||||||
|
device:
|
||||||
|
integration: rainmachine
|
||||||
|
Loading…
x
Reference in New Issue
Block a user