I am trying to add services to Vera lock to add and Delete door codes,
I have the code untill this
How I register the service
async def async_setup_entry(
hass: HomeAssistant,
entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the sensor config entry."""
controller_data = get_controller_data(hass, entry)
async_add_entities(
[
VeraLock(device, controller_data)
for device in controller_data.devices.get(PLATFORM_DOMAIN)
],
True,
)
platform = async_get_current_platform()
platform.async_register_entity_service(
"setpin",
SET_PIN_SCHEMA,
set_new_pin
)
platform.async_register_entity_service(
"clearpin",
CLEAR_PIN_SCHEMA,
clear_slot_pin
)
functions tied to the service
class VeraLock(VeraDevice[veraApi.VeraLock], LockEntity):
"""Representation of a Vera lock."""
def __init__(
self, vera_device: veraApi.VeraLock, controller_data: ControllerData
) -> None:
"""Initialize the Vera device."""
self._state = None
self._cmd_status = None
VeraDevice.__init__(self, vera_device, controller_data)
self.entity_id = ENTITY_ID_FORMAT.format(self.vera_id)
def lock(self, **kwargs: Any) -> None:
"""Lock the device."""
self.vera_device.lock()
self._state = STATE_LOCKED
def unlock(self, **kwargs: Any) -> None:
"""Unlock the device."""
self.vera_device.unlock()
self._state = STATE_UNLOCKED
def set_new_pin(self, **kwargs: Any) -> None:
"""Set pin on the device."""
_LOGGER.warning("calling veralock.set_new_pin to add %s with pin %s", kwargs[CONF_NAME], kwargs[CONF_PIN])
result = self.vera_device.set_new_pin(name = kwargs[CONF_NAME], pin = kwargs[CONF_PIN])
if result.status_code == HTTP_OK:
self._cmd_status = "Removed"
else:
self._cmd_status = result.text
_LOGGER.error("Failed to call %s: %s", "veralock.set_new_pin", result.text)
raise ValueError(result.text)
def clear_slot_pin(self, **kwargs: Any) -> None:
"""Clear pin on the device."""
_LOGGER.warning("calling veralock.clearpin to clear_slot_pin %s", kwargs["slot"])
result = self.vera_device.clear_slot_pin(slot = kwargs["slot"])
if result.status_code == HTTP_OK:
self._cmd_status = "Removed"
else:
self._cmd_status = result.text
_LOGGER.error("Failed to call %s: %s", "veralock.clear_slot_pin", result.text)
raise ValueError(result.text)
Am able to get the service registered and I can see home assistant firing the event
2021-10-08 17:24:40 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event call_service[L]: domain=vera, service=clearpin, service_data=slot=244>
The function in the lock.py (set_new_pin/clear_slot_pin) file is not getting executed
Can somebody help me please
Merged pull request to support this feature under pyvera, released as version 0.3.14