Fire events for hue remote buttons pressed (#33277)
* Add remote platform to hue integration supporting ZGPSwitch, ZLLSwitch and ZLLRotary switches. * Ported from custom component Hue-remotes-HASS from @robmarkcole * Add options flow for hue, to toggle handling of sensors and remotes * Sensors are enabled by default, and remotes are disabled, to not generate any breaking change for existent users. Also, when linking a new bridge these defaults are used, so unless going explicitly to the Options menu, the old behavior is preserved. * SensorManager stores the enabled platforms and ignores everything else. * Bridge is created with flags for `add_sensors` and `add_remotes`, and uses them to forward entry setup to only the enabled platforms. * Update listener removes disabled kinds of devices when options are changed, so device list is in sync with options, and disabled kinds disappear from HA, leaving the enable/disable entity option for individual devices. * Fix hue bridge mock with new parameters * Revert changes in hue bridge mock * Remove OptionsFlow and platform flags * Extract `GenericHueDevice` from `GenericHueSensor` to use it as base class for all hue devices, including those without any entity, like remotes without battery. * Add `HueBattery` sensor for battery powered remotes and generate entities for TYPE_ZLL_ROTARY and TYPE_ZLL_SWITCH remotes. * Remove remote platform * Add HueEvent class to fire events for button presses * Use `sensor.lastupdated` string to control state changes * Event data includes: - "id", as pretty name of the remote - "unique_id" of the remote device - "event", with the raw code of the pressed button ('buttonevent' or 'rotaryevent' property) - "last_updated", with the bridge timestamp for the button press * Register ZGP_SWITCH, ZLL_SWITCH, ZLL_ROTARY remotes * fix removal * Exclude W0611 * Extract GenericHueDevice to its own module and solve import tree, also fixing lint in CI * Store registered events to do not repeat device reg * Minor cleaning * Add tests for hue_event and battery entities for hue remotes
This commit is contained in:
parent
dd1608db0d
commit
f5cbc9d208
5 changed files with 385 additions and 73 deletions
|
@ -1,17 +1,25 @@
|
|||
"""Hue sensor entities."""
|
||||
from aiohue.sensors import TYPE_ZLL_LIGHTLEVEL, TYPE_ZLL_TEMPERATURE
|
||||
from aiohue.sensors import (
|
||||
TYPE_ZLL_LIGHTLEVEL,
|
||||
TYPE_ZLL_ROTARY,
|
||||
TYPE_ZLL_SWITCH,
|
||||
TYPE_ZLL_TEMPERATURE,
|
||||
)
|
||||
|
||||
from homeassistant.const import (
|
||||
DEVICE_CLASS_BATTERY,
|
||||
DEVICE_CLASS_ILLUMINANCE,
|
||||
DEVICE_CLASS_TEMPERATURE,
|
||||
TEMP_CELSIUS,
|
||||
UNIT_PERCENTAGE,
|
||||
)
|
||||
from homeassistant.helpers.entity import Entity
|
||||
|
||||
from .const import DOMAIN as HUE_DOMAIN
|
||||
from .sensor_base import SENSOR_CONFIG_MAP, GenericZLLSensor
|
||||
from .sensor_base import SENSOR_CONFIG_MAP, GenericHueSensor, GenericZLLSensor
|
||||
|
||||
LIGHT_LEVEL_NAME_FORMAT = "{} light level"
|
||||
REMOTE_NAME_FORMAT = "{} battery level"
|
||||
TEMPERATURE_NAME_FORMAT = "{} temperature"
|
||||
|
||||
|
||||
|
@ -79,6 +87,30 @@ class HueTemperature(GenericHueGaugeSensorEntity):
|
|||
return self.sensor.temperature / 100
|
||||
|
||||
|
||||
class HueBattery(GenericHueSensor):
|
||||
"""Battery class for when a batt-powered device is only represented as an event."""
|
||||
|
||||
@property
|
||||
def unique_id(self):
|
||||
"""Return a unique identifier for this device."""
|
||||
return f"{self.sensor.uniqueid}-battery"
|
||||
|
||||
@property
|
||||
def state(self):
|
||||
"""Return the state of the battery."""
|
||||
return self.sensor.battery
|
||||
|
||||
@property
|
||||
def device_class(self):
|
||||
"""Return the class of the sensor."""
|
||||
return DEVICE_CLASS_BATTERY
|
||||
|
||||
@property
|
||||
def unit_of_measurement(self):
|
||||
"""Return the unit of measurement of this entity."""
|
||||
return UNIT_PERCENTAGE
|
||||
|
||||
|
||||
SENSOR_CONFIG_MAP.update(
|
||||
{
|
||||
TYPE_ZLL_LIGHTLEVEL: {
|
||||
|
@ -91,5 +123,15 @@ SENSOR_CONFIG_MAP.update(
|
|||
"name_format": TEMPERATURE_NAME_FORMAT,
|
||||
"class": HueTemperature,
|
||||
},
|
||||
TYPE_ZLL_SWITCH: {
|
||||
"platform": "sensor",
|
||||
"name_format": REMOTE_NAME_FORMAT,
|
||||
"class": HueBattery,
|
||||
},
|
||||
TYPE_ZLL_ROTARY: {
|
||||
"platform": "sensor",
|
||||
"name_format": REMOTE_NAME_FORMAT,
|
||||
"class": HueBattery,
|
||||
},
|
||||
}
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue