Expose Lutron RA2 occupancy sensors (#25854)
* Expose Lutron RA2 motion sensors * Remove unused _LOGGER * Remove unused logging import
This commit is contained in:
parent
b8bd97b3fa
commit
944ac4f3c2
4 changed files with 71 additions and 5 deletions
|
@ -40,7 +40,13 @@ def setup(hass, base_config):
|
|||
|
||||
hass.data[LUTRON_BUTTONS] = []
|
||||
hass.data[LUTRON_CONTROLLER] = None
|
||||
hass.data[LUTRON_DEVICES] = {"light": [], "cover": [], "switch": [], "scene": []}
|
||||
hass.data[LUTRON_DEVICES] = {
|
||||
"light": [],
|
||||
"cover": [],
|
||||
"switch": [],
|
||||
"scene": [],
|
||||
"binary_sensor": [],
|
||||
}
|
||||
|
||||
config = base_config.get(DOMAIN)
|
||||
hass.data[LUTRON_CONTROLLER] = Lutron(
|
||||
|
@ -76,9 +82,13 @@ def setup(hass, base_config):
|
|||
)
|
||||
|
||||
hass.data[LUTRON_BUTTONS].append(LutronButton(hass, keypad, button))
|
||||
if area.occupancy_group is not None:
|
||||
hass.data[LUTRON_DEVICES]["binary_sensor"].append(
|
||||
(area.name, area.occupancy_group)
|
||||
)
|
||||
|
||||
for component in ("light", "cover", "switch", "scene"):
|
||||
discovery.load_platform(hass, component, DOMAIN, None, base_config)
|
||||
for component in ("light", "cover", "switch", "scene", "binary_sensor"):
|
||||
discovery.load_platform(hass, component, DOMAIN, {}, base_config)
|
||||
return True
|
||||
|
||||
|
||||
|
|
56
homeassistant/components/lutron/binary_sensor.py
Normal file
56
homeassistant/components/lutron/binary_sensor.py
Normal file
|
@ -0,0 +1,56 @@
|
|||
"""Support for Lutron Powr Savr occupancy sensors."""
|
||||
from pylutron import OccupancyGroup
|
||||
|
||||
from homeassistant.components.binary_sensor import (
|
||||
BinarySensorDevice,
|
||||
DEVICE_CLASS_OCCUPANCY,
|
||||
)
|
||||
|
||||
from . import LUTRON_CONTROLLER, LUTRON_DEVICES, LutronDevice
|
||||
|
||||
|
||||
def setup_platform(hass, config, add_entities, discovery_info=None):
|
||||
"""Set up the Lutron occupancy sensors."""
|
||||
if discovery_info is None:
|
||||
return
|
||||
devs = []
|
||||
for (area_name, device) in hass.data[LUTRON_DEVICES]["binary_sensor"]:
|
||||
dev = LutronOccupancySensor(area_name, device, hass.data[LUTRON_CONTROLLER])
|
||||
devs.append(dev)
|
||||
|
||||
add_entities(devs)
|
||||
|
||||
|
||||
class LutronOccupancySensor(LutronDevice, BinarySensorDevice):
|
||||
"""Representation of a Lutron Occupancy Group.
|
||||
|
||||
The Lutron integration API reports "occupancy groups" rather than
|
||||
individual sensors. If two sensors are in the same room, they're
|
||||
reported as a single occupancy group.
|
||||
"""
|
||||
|
||||
@property
|
||||
def is_on(self):
|
||||
"""Return true if the binary sensor is on."""
|
||||
# Error cases will end up treated as unoccupied.
|
||||
return self._lutron_device.state == OccupancyGroup.State.OCCUPIED
|
||||
|
||||
@property
|
||||
def device_class(self):
|
||||
"""Return that this is an occupancy sensor."""
|
||||
return DEVICE_CLASS_OCCUPANCY
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
"""Return the name of the device."""
|
||||
# The default LutronDevice naming would create 'Kitchen Occ Kitchen',
|
||||
# but since there can only be one OccupancyGroup per area we go
|
||||
# with something shorter.
|
||||
return f"{self._area_name} Occupancy"
|
||||
|
||||
@property
|
||||
def device_state_attributes(self):
|
||||
"""Return the state attributes."""
|
||||
attr = {}
|
||||
attr["lutron_integration_id"] = self._lutron_device.id
|
||||
return attr
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Lutron",
|
||||
"documentation": "https://www.home-assistant.io/components/lutron",
|
||||
"requirements": [
|
||||
"pylutron==0.2.1"
|
||||
"pylutron==0.2.2"
|
||||
],
|
||||
"dependencies": [],
|
||||
"codeowners": []
|
||||
|
|
|
@ -1258,7 +1258,7 @@ pyloopenergy==0.1.3
|
|||
pylutron-caseta==0.5.0
|
||||
|
||||
# homeassistant.components.lutron
|
||||
pylutron==0.2.1
|
||||
pylutron==0.2.2
|
||||
|
||||
# homeassistant.components.mailgun
|
||||
pymailgunner==1.4
|
||||
|
|
Loading…
Add table
Reference in a new issue