Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for showing random numbers."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Mapping
6 from random import randrange
7 from typing import Any
8 
9 import voluptuous as vol
10 
12  PLATFORM_SCHEMA as SENSOR_PLATFORM_SCHEMA,
13  SensorEntity,
14 )
15 from homeassistant.config_entries import ConfigEntry
16 from homeassistant.const import (
17  CONF_DEVICE_CLASS,
18  CONF_MAXIMUM,
19  CONF_MINIMUM,
20  CONF_NAME,
21  CONF_UNIT_OF_MEASUREMENT,
22 )
23 from homeassistant.core import HomeAssistant
25 from homeassistant.helpers.entity_platform import AddEntitiesCallback
26 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
27 
28 from .const import DEFAULT_MAX, DEFAULT_MIN
29 
30 ATTR_MAXIMUM = "maximum"
31 ATTR_MINIMUM = "minimum"
32 
33 DEFAULT_NAME = "Random sensor"
34 
35 
36 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
37  {
38  vol.Optional(CONF_MAXIMUM, default=DEFAULT_MAX): cv.positive_int,
39  vol.Optional(CONF_MINIMUM, default=DEFAULT_MIN): cv.positive_int,
40  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
41  vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,
42  }
43 )
44 
45 
47  hass: HomeAssistant,
48  config: ConfigType,
49  async_add_entities: AddEntitiesCallback,
50  discovery_info: DiscoveryInfoType | None = None,
51 ) -> None:
52  """Set up the Random number sensor."""
53 
54  async_add_entities([RandomSensor(config)], True)
55 
56 
58  hass: HomeAssistant,
59  config_entry: ConfigEntry,
60  async_add_entities: AddEntitiesCallback,
61 ) -> None:
62  """Initialize config entry."""
63 
65  [RandomSensor(config_entry.options, config_entry.entry_id)], True
66  )
67 
68 
70  """Representation of a Random number sensor."""
71 
72  _attr_translation_key = "random"
73  _unrecorded_attributes = frozenset({ATTR_MAXIMUM, ATTR_MINIMUM})
74 
75  def __init__(self, config: Mapping[str, Any], entry_id: str | None = None) -> None:
76  """Initialize the Random sensor."""
77  self._attr_name_attr_name = config[CONF_NAME]
78  self._minimum_minimum = config[CONF_MINIMUM]
79  self._maximum_maximum = config[CONF_MAXIMUM]
80  self._attr_native_unit_of_measurement_attr_native_unit_of_measurement = config.get(CONF_UNIT_OF_MEASUREMENT)
81  self._attr_device_class_attr_device_class = config.get(CONF_DEVICE_CLASS)
82  self._attr_extra_state_attributes_attr_extra_state_attributes = {
83  ATTR_MAXIMUM: self._maximum_maximum,
84  ATTR_MINIMUM: self._minimum_minimum,
85  }
86  self._attr_unique_id_attr_unique_id = entry_id
87 
88  async def async_update(self) -> None:
89  """Get a new number and update the state."""
90 
91  self._attr_native_value_attr_native_value = randrange(self._minimum_minimum, self._maximum_maximum + 1)
None __init__(self, Mapping[str, Any] config, str|None entry_id=None)
Definition: sensor.py:75
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:61
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: sensor.py:51