1 """Provides helpers for Z-Wave JS device automations."""
3 from __future__
import annotations
5 from zwave_js_server.client
import Client
as ZwaveClient
6 from zwave_js_server.model.value
import ConfigurationValue
12 from .const
import DATA_CLIENT, DOMAIN
14 NODE_STATUSES = [
"asleep",
"awake",
"dead",
"alive"]
16 CONF_SUBTYPE =
"subtype"
17 CONF_VALUE_ID =
"value_id"
19 VALUE_ID_REGEX =
r"([0-9]+-[0-9]+-[0-9]+-).+"
23 """Generate the config parameter name used in a device automation subtype."""
24 parameter =
str(config_value.property_)
25 if config_value.property_key:
27 assert isinstance(config_value.property_key, int)
29 f
"{parameter}[{hex(config_value.property_key)}] on endpoint "
30 f
"{config_value.endpoint}"
34 f
"{parameter} ({config_value.property_name}) on endpoint "
35 f
"{config_value.endpoint}"
41 """Return whether device's config entries are not loaded."""
42 dev_reg = dr.async_get(hass)
43 if (device := dev_reg.async_get(device_id))
is None:
44 raise ValueError(f
"Device {device_id} not found")
48 for config_entry
in hass.config_entries.async_entries(DOMAIN)
49 if config_entry.entry_id
in device.config_entries
50 and config_entry.state == ConfigEntryState.LOADED
58 client: ZwaveClient = entry.runtime_data[DATA_CLIENT]
59 return client.driver
is None
str generate_config_parameter_subtype(ConfigurationValue config_value)
bool async_bypass_dynamic_config_validation(HomeAssistant hass, str device_id)