1 """Sensor platform for Hyperion."""
3 from __future__
import annotations
8 from hyperion
import client
9 from hyperion.const
import (
26 async_dispatcher_connect,
27 async_dispatcher_send,
32 get_hyperion_device_id,
33 get_hyperion_unique_id,
34 listen_for_instance_updates,
37 CONF_INSTANCE_CLIENTS,
39 HYPERION_MANUFACTURER_NAME,
42 TYPE_HYPERION_SENSOR_BASE,
43 TYPE_HYPERION_SENSOR_VISIBLE_PRIORITY,
46 SENSORS = [TYPE_HYPERION_SENSOR_VISIBLE_PRIORITY]
48 key=
"visible_priority",
49 translation_key=
"visible_priority",
55 """Calculate a sensor's unique_id."""
59 f
"{TYPE_HYPERION_SENSOR_BASE}_{suffix}",
65 config_entry: ConfigEntry,
66 async_add_entities: AddEntitiesCallback,
68 """Set up a Hyperion platform from config entry."""
69 entry_data = hass.data[DOMAIN][config_entry.entry_id]
70 server_id = config_entry.unique_id
73 def instance_add(instance_num: int, instance_name: str) ->
None:
74 """Add entities for a new Hyperion instance."""
81 entry_data[CONF_INSTANCE_CLIENTS][instance_num],
82 PRIORITY_SENSOR_DESCRIPTION,
89 def instance_remove(instance_num: int) ->
None:
90 """Remove entities for an old Hyperion instance."""
93 for sensor
in SENSORS:
96 SIGNAL_ENTITY_REMOVE.format(
107 _attr_has_entity_name =
True
108 _attr_should_poll =
False
115 hyperion_client: client.HyperionClient,
116 entity_description: SensorEntityDescription,
118 """Initialize the sensor."""
122 self._client_callbacks: dict[str, Any] = {}
127 identifiers={(DOMAIN, device_id)},
128 manufacturer=HYPERION_MANUFACTURER_NAME,
129 model=HYPERION_MODEL_NAME,
131 configuration_url=self.
_client_client.remote_url,
136 """Return server availability."""
140 """Register callbacks when entity added to hass."""
144 SIGNAL_ENTITY_REMOVE.format(self._attr_unique_id),
145 functools.partial(self.
async_removeasync_remove, force_remove=
True),
149 self.
_client_client.add_callbacks(self._client_callbacks)
152 """Cleanup prior to hass removal."""
153 self.
_client_client.remove_callbacks(self._client_callbacks)
157 """Class that displays the visible priority of a Hyperion instance."""
164 hyperion_client: client.HyperionClient,
165 entity_description: SensorEntityDescription,
167 """Initialize the sensor."""
170 server_id, instance_num, instance_name, hyperion_client, entity_description
174 server_id, instance_num, TYPE_HYPERION_SENSOR_VISIBLE_PRIORITY
183 """Update Hyperion priorities."""
187 for priority
in self.
_client_client.priorities
or []:
188 if not (KEY_VISIBLE
in priority
and priority[KEY_VISIBLE]
is True):
191 if priority[KEY_COMPONENTID] ==
"COLOR":
192 state_value = priority[KEY_VALUE][KEY_RGB]
194 state_value = priority.get(KEY_OWNER)
197 "component_id": priority[KEY_COMPONENTID],
198 "origin": priority[KEY_ORIGIN],
199 "priority": priority[KEY_PRIORITY],
200 "owner": priority.get(KEY_OWNER),
203 if priority[KEY_COMPONENTID] ==
"COLOR":
204 attrs[
"color"] = priority[KEY_VALUE]
206 attrs[
"color"] =
None
None __init__(self, str server_id, int instance_num, str instance_name, client.HyperionClient hyperion_client, SensorEntityDescription entity_description)
None async_will_remove_from_hass(self)
None async_added_to_hass(self)
None _update_priorities(self, dict[str, Any]|None _=None)
None __init__(self, str server_id, int instance_num, str instance_name, client.HyperionClient hyperion_client, SensorEntityDescription entity_description)
_attr_extra_state_attributes
None async_write_ha_state(self)
None async_on_remove(self, CALLBACK_TYPE func)
None async_remove(self, *bool force_remove=False)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
str _sensor_unique_id(str server_id, int instance_num, str suffix)
str get_hyperion_device_id(str server_id, int instance)
str get_hyperion_unique_id(str server_id, int instance, str name)
None listen_for_instance_updates(HomeAssistant hass, ConfigEntry config_entry, Callable add_func, Callable remove_func)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
None async_dispatcher_send(HomeAssistant hass, str signal, *Any args)