Home Assistant Unofficial Reference 2024.12.1
vacuum.py
Go to the documentation of this file.
1 """Demo platform for the vacuum component."""
2 
3 from __future__ import annotations
4 
5 from datetime import datetime
6 from typing import Any
7 
9  ATTR_CLEANED_AREA,
10  STATE_CLEANING,
11  STATE_DOCKED,
12  STATE_IDLE,
13  STATE_PAUSED,
14  STATE_RETURNING,
15  StateVacuumEntity,
16  VacuumEntityFeature,
17 )
18 from homeassistant.config_entries import ConfigEntry
19 from homeassistant.core import HomeAssistant
20 from homeassistant.helpers import event
21 from homeassistant.helpers.entity_platform import AddEntitiesCallback
22 
23 SUPPORT_MINIMAL_SERVICES = VacuumEntityFeature.TURN_ON | VacuumEntityFeature.TURN_OFF
24 
25 SUPPORT_BASIC_SERVICES = (
26  VacuumEntityFeature.STATE
27  | VacuumEntityFeature.START
28  | VacuumEntityFeature.STOP
29  | VacuumEntityFeature.BATTERY
30 )
31 
32 SUPPORT_MOST_SERVICES = (
33  VacuumEntityFeature.STATE
34  | VacuumEntityFeature.START
35  | VacuumEntityFeature.STOP
36  | VacuumEntityFeature.PAUSE
37  | VacuumEntityFeature.RETURN_HOME
38  | VacuumEntityFeature.BATTERY
39  | VacuumEntityFeature.FAN_SPEED
40 )
41 
42 SUPPORT_ALL_SERVICES = (
43  VacuumEntityFeature.STATE
44  | VacuumEntityFeature.START
45  | VacuumEntityFeature.STOP
46  | VacuumEntityFeature.PAUSE
47  | VacuumEntityFeature.STOP
48  | VacuumEntityFeature.RETURN_HOME
49  | VacuumEntityFeature.FAN_SPEED
50  | VacuumEntityFeature.SEND_COMMAND
51  | VacuumEntityFeature.LOCATE
52  | VacuumEntityFeature.STATUS
53  | VacuumEntityFeature.BATTERY
54  | VacuumEntityFeature.LOCATE
55  | VacuumEntityFeature.MAP
56  | VacuumEntityFeature.CLEAN_SPOT
57 )
58 
59 FAN_SPEEDS = ["min", "medium", "high", "max"]
60 DEMO_VACUUM_COMPLETE = "0_Ground_floor"
61 DEMO_VACUUM_MOST = "1_First_floor"
62 DEMO_VACUUM_BASIC = "2_Second_floor"
63 DEMO_VACUUM_MINIMAL = "3_Third_floor"
64 DEMO_VACUUM_NONE = "4_Fourth_floor"
65 
66 
68  hass: HomeAssistant,
69  config_entry: ConfigEntry,
70  async_add_entities: AddEntitiesCallback,
71 ) -> None:
72  """Set up the Demo config entry."""
74  [
75  StateDemoVacuum(DEMO_VACUUM_COMPLETE, SUPPORT_ALL_SERVICES),
76  StateDemoVacuum(DEMO_VACUUM_MOST, SUPPORT_MOST_SERVICES),
77  StateDemoVacuum(DEMO_VACUUM_BASIC, SUPPORT_BASIC_SERVICES),
78  StateDemoVacuum(DEMO_VACUUM_MINIMAL, SUPPORT_MINIMAL_SERVICES),
79  StateDemoVacuum(DEMO_VACUUM_NONE, VacuumEntityFeature(0)),
80  ]
81  )
82 
83 
85  """Representation of a demo vacuum supporting states."""
86 
87  _attr_should_poll = False
88  _attr_translation_key = "model_s"
89 
90  def __init__(self, name: str, supported_features: VacuumEntityFeature) -> None:
91  """Initialize the vacuum."""
92  self._attr_name_attr_name = name
93  self._attr_supported_features_attr_supported_features = supported_features
94  self._state_state = STATE_DOCKED
95  self._fan_speed_fan_speed = FAN_SPEEDS[1]
96  self._cleaned_area: float = 0
97  self._battery_level_battery_level = 100
98 
99  @property
100  def state(self) -> str:
101  """Return the current state of the vacuum."""
102  return self._state_state
103 
104  @property
105  def battery_level(self) -> int:
106  """Return the current battery level of the vacuum."""
107  return max(0, min(100, self._battery_level_battery_level))
108 
109  @property
110  def fan_speed(self) -> str:
111  """Return the current fan speed of the vacuum."""
112  return self._fan_speed_fan_speed
113 
114  @property
115  def fan_speed_list(self) -> list[str]:
116  """Return the list of supported fan speeds."""
117  return FAN_SPEEDS
118 
119  @property
120  def extra_state_attributes(self) -> dict[str, Any]:
121  """Return device state attributes."""
122  return {ATTR_CLEANED_AREA: round(self._cleaned_area, 2)}
123 
124  def start(self) -> None:
125  """Start or resume the cleaning task."""
126  if self._state_state != STATE_CLEANING:
127  self._state_state = STATE_CLEANING
128  self._cleaned_area += 1.32
129  self._battery_level_battery_level -= 1
130  self.schedule_update_ha_stateschedule_update_ha_state()
131 
132  def pause(self) -> None:
133  """Pause the cleaning task."""
134  if self._state_state == STATE_CLEANING:
135  self._state_state = STATE_PAUSED
136  self.schedule_update_ha_stateschedule_update_ha_state()
137 
138  def stop(self, **kwargs: Any) -> None:
139  """Stop the cleaning task, do not return to dock."""
140  self._state_state = STATE_IDLE
141  self.schedule_update_ha_stateschedule_update_ha_state()
142 
143  def return_to_base(self, **kwargs: Any) -> None:
144  """Return dock to charging base."""
145  self._state_state = STATE_RETURNING
146  self.schedule_update_ha_stateschedule_update_ha_state()
147 
148  event.call_later(self.hasshass, 30, self.__set_state_to_dock__set_state_to_dock)
149 
150  def clean_spot(self, **kwargs: Any) -> None:
151  """Perform a spot clean-up."""
152  self._state_state = STATE_CLEANING
153  self._cleaned_area += 1.32
154  self._battery_level_battery_level -= 1
155  self.schedule_update_ha_stateschedule_update_ha_state()
156 
157  def set_fan_speed(self, fan_speed: str, **kwargs: Any) -> None:
158  """Set the vacuum's fan speed."""
159  if fan_speed in self.fan_speed_listfan_speed_listfan_speed_list:
160  self._fan_speed_fan_speed = fan_speed
161  self.schedule_update_ha_stateschedule_update_ha_state()
162 
163  async def async_locate(self, **kwargs: Any) -> None:
164  """Locate the vacuum's position."""
165  await self.hasshass.services.async_call(
166  "notify",
167  "persistent_notification",
168  service_data={"message": "I'm here!", "title": "Locate request"},
169  )
170  self._state_state = STATE_IDLE
171  self.async_write_ha_stateasync_write_ha_state()
172 
173  async def async_clean_spot(self, **kwargs: Any) -> None:
174  """Locate the vacuum's position."""
175  self._state_state = STATE_CLEANING
176  self.async_write_ha_stateasync_write_ha_state()
177 
179  self,
180  command: str,
181  params: dict[str, Any] | list[Any] | None = None,
182  **kwargs: Any,
183  ) -> None:
184  """Send a command to the vacuum."""
185  self._state_state = STATE_IDLE
186  self.async_write_ha_stateasync_write_ha_state()
187 
188  def __set_state_to_dock(self, _: datetime) -> None:
189  self._state_state = STATE_DOCKED
190  self.schedule_update_ha_stateschedule_update_ha_state()
None set_fan_speed(self, str fan_speed, **Any kwargs)
Definition: vacuum.py:157
None async_send_command(self, str command, dict[str, Any]|list[Any]|None params=None, **Any kwargs)
Definition: vacuum.py:183
None __init__(self, str name, VacuumEntityFeature supported_features)
Definition: vacuum.py:90
None schedule_update_ha_state(self, bool force_refresh=False)
Definition: entity.py:1244
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: vacuum.py:71