1 """Provides device actions for Network UPS Tools (NUT)."""
3 from __future__
import annotations
5 import voluptuous
as vol
14 from .
import NutRuntimeData
15 from .const
import DOMAIN, INTEGRATION_SUPPORTED_COMMANDS
17 ACTION_TYPES = {cmd.replace(
".",
"_")
for cmd
in INTEGRATION_SUPPORTED_COMMANDS}
19 ACTION_SCHEMA = cv.DEVICE_ACTION_BASE_SCHEMA.extend(
21 vol.Required(CONF_TYPE): vol.In(ACTION_TYPES),
27 hass: HomeAssistant, device_id: str
28 ) -> list[dict[str, str]]:
29 """List device actions for Network UPS Tools (NUT) devices."""
33 CONF_DEVICE_ID: device_id,
38 for command_name
in runtime_data.user_available_commands
45 variables: TemplateVarsType,
46 context: Context |
None,
48 """Execute a device action."""
49 device_action_name: str = config[CONF_TYPE]
51 device_id: str = config[CONF_DEVICE_ID]
55 f
"Unable to find a NUT device with id {device_id}"
57 await runtime_data.data.async_run_command(command_name)
61 return command_name.replace(
".",
"_")
65 return device_action_name.replace(
"_",
".")
69 hass: HomeAssistant, device_id: str
70 ) -> NutRuntimeData |
None:
71 device_registry = dr.async_get(hass)
72 if (device := device_registry.async_get(device_id))
is None:
74 entry = hass.config_entries.async_get_entry(
75 next(entry_id
for entry_id
in device.config_entries)
77 assert entry
and isinstance(entry.runtime_data, NutRuntimeData)
78 return entry.runtime_data
list[dict[str, str]] async_get_actions(HomeAssistant hass, str device_id)
None async_call_action_from_config(HomeAssistant hass, ConfigType config, TemplateVarsType variables, Context|None context)
str _get_device_action_name(str command_name)
str _get_command_name(str device_action_name)
NutRuntimeData|None _get_runtime_data_from_device_id(HomeAssistant hass, str device_id)