54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
"""Roon event entities."""
|
|
import logging
|
|
|
|
from homeassistant.components.event import EventDeviceClass, EventEntity
|
|
from homeassistant.core import callback
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
class RoonEventEntity(EventEntity):
|
|
"""Representation of a Roon Event entity."""
|
|
|
|
_attr_device_class = EventDeviceClass.BUTTON
|
|
_attr_event_types = ["volume_up", "volume_down"]
|
|
|
|
def __init__(self, server, name):
|
|
"""Initialize the entity."""
|
|
self._server = server
|
|
self._name = f"{name} volume control"
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
"""Return name for the entity."""
|
|
return self._name
|
|
|
|
@callback
|
|
def _roonapi_volume_callback(self, control_key, event, value) -> None:
|
|
"""Callbacks from the roon api with volume request."""
|
|
|
|
if event != "set_volume":
|
|
_LOGGER.info("Received unsupported roon volume event %s", event)
|
|
return
|
|
|
|
if value > 0:
|
|
event = "volume_up"
|
|
else:
|
|
event = "volume_down"
|
|
|
|
self._trigger_event(event)
|
|
self.async_write_ha_state()
|
|
|
|
async def async_added_to_hass(self) -> None:
|
|
"""Register volume hooks with the roon api."""
|
|
self._server.roonapi.register_volume_control(
|
|
self.entity_id,
|
|
self._name,
|
|
self._roonapi_volume_callback,
|
|
0,
|
|
"incremental",
|
|
0,
|
|
0,
|
|
0,
|
|
False,
|
|
)
|