Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Neato sensors."""
2 
3 from __future__ import annotations
4 
5 from datetime import timedelta
6 import logging
7 from typing import Any
8 
9 from pybotvac.exceptions import NeatoRobotException
10 from pybotvac.robot import Robot
11 
12 from homeassistant.components.sensor import SensorDeviceClass, SensorEntity
13 from homeassistant.config_entries import ConfigEntry
14 from homeassistant.const import PERCENTAGE, EntityCategory
15 from homeassistant.core import HomeAssistant
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 
18 from .const import NEATO_LOGIN, NEATO_ROBOTS, SCAN_INTERVAL_MINUTES
19 from .entity import NeatoEntity
20 from .hub import NeatoHub
21 
22 _LOGGER = logging.getLogger(__name__)
23 
24 SCAN_INTERVAL = timedelta(minutes=SCAN_INTERVAL_MINUTES)
25 
26 BATTERY = "Battery"
27 
28 
30  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
31 ) -> None:
32  """Set up the Neato sensor using config entry."""
33  neato: NeatoHub = hass.data[NEATO_LOGIN]
34  dev = [NeatoSensor(neato, robot) for robot in hass.data[NEATO_ROBOTS]]
35 
36  if not dev:
37  return
38 
39  _LOGGER.debug("Adding robots for sensors %s", dev)
40  async_add_entities(dev, True)
41 
42 
44  """Neato sensor."""
45 
46  _attr_device_class = SensorDeviceClass.BATTERY
47  _attr_entity_category = EntityCategory.DIAGNOSTIC
48  _attr_native_unit_of_measurement = PERCENTAGE
49  _attr_available: bool = False
50 
51  def __init__(self, neato: NeatoHub, robot: Robot) -> None:
52  """Initialize Neato sensor."""
53  super().__init__(robot)
54  self._robot_serial: str = self.robotrobot.serial
55  self._attr_unique_id_attr_unique_id = self.robotrobot.serial
56  self._state_state: dict[str, Any] | None = None
57 
58  def update(self) -> None:
59  """Update Neato Sensor."""
60  try:
61  self._state_state = self.robotrobot.state
62  except NeatoRobotException as ex:
63  if self._attr_available_attr_available:
64  _LOGGER.error(
65  "Neato sensor connection error for '%s': %s", self.entity_identity_id, ex
66  )
67  self._state_state = None
68  self._attr_available_attr_available = False
69  return
70 
71  self._attr_available_attr_available = True
72  _LOGGER.debug("self._state=%s", self._state_state)
73 
74  @property
75  def native_value(self) -> str | None:
76  """Return the state."""
77  if self._state_state is not None:
78  return str(self._state_state["details"]["charge"])
79  return None
None __init__(self, NeatoHub neato, Robot robot)
Definition: sensor.py:51
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:31