mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 14:17:45 +00:00
Add service to lock/unlock Sure Petcare pet flaps (#44557)
* Add service to lock/unlock Sure Petcare pet flaps Adds a service to the Sure Petcare pet flaps to allow lock, unlocking, locking in and locking out pets using the pet flap * Linting * Changes from code review
This commit is contained in:
parent
2ed7b90027
commit
1fc4284a29
@ -4,6 +4,7 @@ from typing import Any, Dict, List
|
|||||||
|
|
||||||
from surepy import (
|
from surepy import (
|
||||||
MESTART_RESOURCE,
|
MESTART_RESOURCE,
|
||||||
|
SureLockStateID,
|
||||||
SurePetcare,
|
SurePetcare,
|
||||||
SurePetcareAuthenticationError,
|
SurePetcareAuthenticationError,
|
||||||
SurePetcareError,
|
SurePetcareError,
|
||||||
@ -24,6 +25,8 @@ from homeassistant.helpers.dispatcher import async_dispatcher_send
|
|||||||
from homeassistant.helpers.event import async_track_time_interval
|
from homeassistant.helpers.event import async_track_time_interval
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
|
ATTR_FLAP_ID,
|
||||||
|
ATTR_LOCK_STATE,
|
||||||
CONF_FEEDERS,
|
CONF_FEEDERS,
|
||||||
CONF_FLAPS,
|
CONF_FLAPS,
|
||||||
CONF_PARENT,
|
CONF_PARENT,
|
||||||
@ -32,6 +35,7 @@ from .const import (
|
|||||||
DATA_SURE_PETCARE,
|
DATA_SURE_PETCARE,
|
||||||
DEFAULT_SCAN_INTERVAL,
|
DEFAULT_SCAN_INTERVAL,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
|
SERVICE_SET_LOCK_STATE,
|
||||||
SPC,
|
SPC,
|
||||||
SURE_API_TIMEOUT,
|
SURE_API_TIMEOUT,
|
||||||
TOPIC_UPDATE,
|
TOPIC_UPDATE,
|
||||||
@ -143,6 +147,38 @@ async def async_setup(hass, config) -> bool:
|
|||||||
hass.helpers.discovery.async_load_platform("sensor", DOMAIN, {}, config)
|
hass.helpers.discovery.async_load_platform("sensor", DOMAIN, {}, config)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def handle_set_lock_state(call):
|
||||||
|
"""Call when setting the lock state."""
|
||||||
|
await spc.set_lock_state(call.data[ATTR_FLAP_ID], call.data[ATTR_LOCK_STATE])
|
||||||
|
await spc.async_update()
|
||||||
|
|
||||||
|
lock_state_service_schema = vol.Schema(
|
||||||
|
{
|
||||||
|
vol.Required(ATTR_FLAP_ID): vol.All(
|
||||||
|
cv.positive_int, vol.In(conf[CONF_FLAPS])
|
||||||
|
),
|
||||||
|
vol.Required(ATTR_LOCK_STATE): vol.All(
|
||||||
|
cv.string,
|
||||||
|
vol.Lower,
|
||||||
|
vol.In(
|
||||||
|
[
|
||||||
|
SureLockStateID.UNLOCKED.name.lower(),
|
||||||
|
SureLockStateID.LOCKED_IN.name.lower(),
|
||||||
|
SureLockStateID.LOCKED_OUT.name.lower(),
|
||||||
|
SureLockStateID.LOCKED_ALL.name.lower(),
|
||||||
|
]
|
||||||
|
),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
hass.services.async_register(
|
||||||
|
DOMAIN,
|
||||||
|
SERVICE_SET_LOCK_STATE,
|
||||||
|
handle_set_lock_state,
|
||||||
|
schema=lock_state_service_schema,
|
||||||
|
)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
@ -185,3 +221,14 @@ class SurePetcareAPI:
|
|||||||
_LOGGER.error("Unable to retrieve data from surepetcare.io: %s", error)
|
_LOGGER.error("Unable to retrieve data from surepetcare.io: %s", error)
|
||||||
|
|
||||||
async_dispatcher_send(self.hass, TOPIC_UPDATE)
|
async_dispatcher_send(self.hass, TOPIC_UPDATE)
|
||||||
|
|
||||||
|
async def set_lock_state(self, flap_id: int, state: str) -> None:
|
||||||
|
"""Update the lock state of a flap."""
|
||||||
|
if state == SureLockStateID.UNLOCKED.name.lower():
|
||||||
|
await self.surepy.unlock(flap_id)
|
||||||
|
elif state == SureLockStateID.LOCKED_IN.name.lower():
|
||||||
|
await self.surepy.lock_in(flap_id)
|
||||||
|
elif state == SureLockStateID.LOCKED_OUT.name.lower():
|
||||||
|
await self.surepy.lock_out(flap_id)
|
||||||
|
elif state == SureLockStateID.LOCKED_ALL.name.lower():
|
||||||
|
await self.surepy.lock(flap_id)
|
||||||
|
@ -31,3 +31,8 @@ BATTERY_ICON = "mdi:battery"
|
|||||||
SURE_BATT_VOLTAGE_FULL = 1.6 # voltage
|
SURE_BATT_VOLTAGE_FULL = 1.6 # voltage
|
||||||
SURE_BATT_VOLTAGE_LOW = 1.25 # voltage
|
SURE_BATT_VOLTAGE_LOW = 1.25 # voltage
|
||||||
SURE_BATT_VOLTAGE_DIFF = SURE_BATT_VOLTAGE_FULL - SURE_BATT_VOLTAGE_LOW
|
SURE_BATT_VOLTAGE_DIFF = SURE_BATT_VOLTAGE_FULL - SURE_BATT_VOLTAGE_LOW
|
||||||
|
|
||||||
|
# lock state service
|
||||||
|
SERVICE_SET_LOCK_STATE = "set_lock_state"
|
||||||
|
ATTR_FLAP_ID = "flap_id"
|
||||||
|
ATTR_LOCK_STATE = "lock_state"
|
||||||
|
9
homeassistant/components/surepetcare/services.yaml
Normal file
9
homeassistant/components/surepetcare/services.yaml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
set_lock_state:
|
||||||
|
description: Sets lock state
|
||||||
|
fields:
|
||||||
|
flap_id:
|
||||||
|
description: Flap ID to lock/unlock
|
||||||
|
example: "123456"
|
||||||
|
lock_state:
|
||||||
|
description: New lock state - unlocked, locked_in, locked_out or locked_all
|
||||||
|
example: "unlocked"
|
Loading…
x
Reference in New Issue
Block a user