Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Support for binary sensors through the SmartThings cloud API."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Sequence
6 
7 from pysmartthings import Attribute, Capability
8 
10  BinarySensorDeviceClass,
11  BinarySensorEntity,
12 )
13 from homeassistant.config_entries import ConfigEntry
14 from homeassistant.const import EntityCategory
15 from homeassistant.core import HomeAssistant
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 
18 from .const import DATA_BROKERS, DOMAIN
19 from .entity import SmartThingsEntity
20 
21 CAPABILITY_TO_ATTRIB = {
22  Capability.acceleration_sensor: Attribute.acceleration,
23  Capability.contact_sensor: Attribute.contact,
24  Capability.filter_status: Attribute.filter_status,
25  Capability.motion_sensor: Attribute.motion,
26  Capability.presence_sensor: Attribute.presence,
27  Capability.sound_sensor: Attribute.sound,
28  Capability.tamper_alert: Attribute.tamper,
29  Capability.valve: Attribute.valve,
30  Capability.water_sensor: Attribute.water,
31 }
32 ATTRIB_TO_CLASS = {
33  Attribute.acceleration: BinarySensorDeviceClass.MOVING,
34  Attribute.contact: BinarySensorDeviceClass.OPENING,
35  Attribute.filter_status: BinarySensorDeviceClass.PROBLEM,
36  Attribute.motion: BinarySensorDeviceClass.MOTION,
37  Attribute.presence: BinarySensorDeviceClass.PRESENCE,
38  Attribute.sound: BinarySensorDeviceClass.SOUND,
39  Attribute.tamper: BinarySensorDeviceClass.PROBLEM,
40  Attribute.valve: BinarySensorDeviceClass.OPENING,
41  Attribute.water: BinarySensorDeviceClass.MOISTURE,
42 }
43 ATTRIB_TO_ENTTIY_CATEGORY = {
44  Attribute.tamper: EntityCategory.DIAGNOSTIC,
45 }
46 
47 
49  hass: HomeAssistant,
50  config_entry: ConfigEntry,
51  async_add_entities: AddEntitiesCallback,
52 ) -> None:
53  """Add binary sensors for a config entry."""
54  broker = hass.data[DOMAIN][DATA_BROKERS][config_entry.entry_id]
55  sensors = []
56  for device in broker.devices.values():
57  for capability in broker.get_assigned(device.device_id, "binary_sensor"):
58  attrib = CAPABILITY_TO_ATTRIB[capability]
59  sensors.append(SmartThingsBinarySensor(device, attrib))
60  async_add_entities(sensors)
61 
62 
63 def get_capabilities(capabilities: Sequence[str]) -> Sequence[str] | None:
64  """Return all capabilities supported if minimum required are present."""
65  return [
66  capability for capability in CAPABILITY_TO_ATTRIB if capability in capabilities
67  ]
68 
69 
71  """Define a SmartThings Binary Sensor."""
72 
73  def __init__(self, device, attribute):
74  """Init the class."""
75  super().__init__(device)
76  self._attribute_attribute = attribute
77  self._attr_name_attr_name_attr_name = f"{device.label} {attribute}"
78  self._attr_unique_id_attr_unique_id_attr_unique_id = f"{device.device_id}.{attribute}"
79  self._attr_device_class_attr_device_class = ATTRIB_TO_CLASS[attribute]
80  self._attr_entity_category_attr_entity_category = ATTRIB_TO_ENTTIY_CATEGORY.get(attribute)
81 
82  @property
83  def is_on(self):
84  """Return true if the binary sensor is on."""
85  return self._device_device.status.is_on(self._attribute_attribute)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Sequence[str]|None get_capabilities(Sequence[str] capabilities)