core/homeassistant/components/shelly/binary_sensor.py

73 lines
1.8 KiB
Python
Raw Normal View History

"""Binary sensor for Shelly."""
import aioshelly
from homeassistant.components.binary_sensor import (
DEVICE_CLASS_MOISTURE,
DEVICE_CLASS_OPENING,
DEVICE_CLASS_SMOKE,
BinarySensorEntity,
)
from . import ShellyBlockEntity, ShellyDeviceWrapper
from .const import DOMAIN
SENSORS = {
"dwIsOpened": DEVICE_CLASS_OPENING,
"flood": DEVICE_CLASS_MOISTURE,
"overpower": None,
"smoke": DEVICE_CLASS_SMOKE,
}
async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up sensors for device."""
wrapper = hass.data[DOMAIN][config_entry.entry_id]
sensors = []
for block in wrapper.device.blocks:
for attr in SENSORS:
if not hasattr(block, attr):
continue
sensors.append(ShellySensor(wrapper, block, attr))
if sensors:
async_add_entities(sensors)
class ShellySensor(ShellyBlockEntity, BinarySensorEntity):
"""Switch that controls a relay block on Shelly devices."""
def __init__(
self,
wrapper: ShellyDeviceWrapper,
block: aioshelly.Block,
attribute: str,
) -> None:
"""Initialize sensor."""
super().__init__(wrapper, block)
self.attribute = attribute
device_class = SENSORS[attribute]
self._device_class = device_class
@property
def unique_id(self):
"""Return unique ID of entity."""
return f"{super().unique_id}-{self.attribute}"
@property
def name(self):
"""Name of sensor."""
return f"{self.wrapper.name} - {self.attribute}"
@property
def is_on(self):
"""Return true if sensor state is 1."""
return bool(getattr(self.block, self.attribute))
@property
def device_class(self):
"""Device class of sensor."""
return self._device_class