1 """Representation of a Hue remote firing events for button presses."""
5 from aiohue.v1.sensors
import (
17 from ..const
import ATTR_HUE_EVENT
18 from .sensor_device
import GenericHueDevice
20 LOGGER = logging.getLogger(__name__)
22 CONF_LAST_UPDATED =
"last_updated"
24 EVENT_NAME_FORMAT =
"{}"
28 """When you want signals instead of entities.
30 Stateless sensors such as remotes are expected to generate an event
31 instead of a sensor entity in hass.
34 def __init__(self, sensor, name, bridge, primary_sensor=None):
35 """Register callback that will be used for signals."""
36 super().
__init__(sensor, name, bridge, primary_sensor)
44 self.
bridgebridge.reset_jobs.append(
45 self.
bridgebridge.sensor_manager.coordinator.async_add_listener(
52 """Fire the event if reason is that state is updated."""
57 self.
sensorsensor.last_event
is not None
58 and self.
sensorsensor.last_event[
"type"] != EVENT_BUTTON
64 now_updated = dt_util.parse_datetime(self.
sensorsensor.state[
"lastupdated"])
65 last_updated = dt_util.parse_datetime(self.
_last_state_last_state[
"lastupdated"])
68 now_updated
is not None
69 and last_updated
is not None
70 and now_updated <= last_updated
75 if hasattr(self.
sensorsensor,
"rotaryevent"):
76 state = self.
sensorsensor.rotaryevent
78 state = self.
sensorsensor.buttonevent
88 CONF_LAST_UPDATED: self.
sensorsensor.lastupdated,
90 self.
bridgebridge.hass.bus.async_fire(ATTR_HUE_EVENT, data)
93 """Update device registry."""
94 device_registry = dr.async_get(self.
bridgebridge.hass)
96 entry = device_registry.async_get_or_create(
97 config_entry_id=self.
bridgebridge.config_entry.entry_id, **self.
device_infodevice_info
101 "Event registry with entry_id: %s and device_id: %s",
108 TYPE_ZGP_SWITCH: {
"name_format": EVENT_NAME_FORMAT,
"class": HueEvent},
109 TYPE_ZLL_SWITCH: {
"name_format": EVENT_NAME_FORMAT,
"class": HueEvent},
110 TYPE_ZLL_ROTARY: {
"name_format": EVENT_NAME_FORMAT,
"class": HueEvent},
def __init__(self, sensor, name, bridge, primary_sensor=None)
def async_update_device_registry(self)
def async_update_callback(self)
DeviceInfo device_info(self)