Add zwave_js.refresh_value service (#46944)
* add poll_value service * switch vol.All to vol.Schema * more relevant log message * switch service name to refresh_value, add parameter to refresh all watched values, fix tests * rename parameter and create task for polling command so we don't wait for a response * raise ValueError for unknown entity * better error message * fix test
This commit is contained in:
parent
228096847b
commit
1a99562e91
8 changed files with 168 additions and 7 deletions
|
@ -8,8 +8,10 @@ from zwave_js_server.model.value import Value as ZwaveValue, get_value_id
|
|||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||
from homeassistant.helpers.entity import Entity
|
||||
|
||||
from .const import DOMAIN
|
||||
from .discovery import ZwaveDiscoveryInfo
|
||||
from .helpers import get_device_id
|
||||
|
||||
|
@ -39,6 +41,35 @@ class ZWaveBaseEntity(Entity):
|
|||
To be overridden by platforms needing this event.
|
||||
"""
|
||||
|
||||
async def async_poll_value(self, refresh_all_values: bool) -> None:
|
||||
"""Poll a value."""
|
||||
assert self.hass
|
||||
if not refresh_all_values:
|
||||
self.hass.async_create_task(
|
||||
self.info.node.async_poll_value(self.info.primary_value)
|
||||
)
|
||||
LOGGER.info(
|
||||
(
|
||||
"Refreshing primary value %s for %s, "
|
||||
"state update may be delayed for devices on battery"
|
||||
),
|
||||
self.info.primary_value,
|
||||
self.entity_id,
|
||||
)
|
||||
return
|
||||
|
||||
for value_id in self.watched_value_ids:
|
||||
self.hass.async_create_task(self.info.node.async_poll_value(value_id))
|
||||
|
||||
LOGGER.info(
|
||||
(
|
||||
"Refreshing values %s for %s, state update may be delayed for "
|
||||
"devices on battery"
|
||||
),
|
||||
", ".join(self.watched_value_ids),
|
||||
self.entity_id,
|
||||
)
|
||||
|
||||
async def async_added_to_hass(self) -> None:
|
||||
"""Call when entity is added."""
|
||||
assert self.hass # typing
|
||||
|
@ -46,6 +77,13 @@ class ZWaveBaseEntity(Entity):
|
|||
self.async_on_remove(
|
||||
self.info.node.on(EVENT_VALUE_UPDATED, self._value_changed)
|
||||
)
|
||||
self.async_on_remove(
|
||||
async_dispatcher_connect(
|
||||
self.hass,
|
||||
f"{DOMAIN}_{self.unique_id}_poll_value",
|
||||
self.async_poll_value,
|
||||
)
|
||||
)
|
||||
|
||||
@property
|
||||
def device_info(self) -> dict:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue