Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Platform for sensor integration."""
2 
3 from __future__ import annotations
4 
5 from datetime import timedelta
6 import logging
7 
8 from oru import Meter, MeterError
9 import voluptuous as vol
10 
12  PLATFORM_SCHEMA as SENSOR_PLATFORM_SCHEMA,
13  SensorDeviceClass,
14  SensorEntity,
15 )
16 from homeassistant.const import UnitOfEnergy
17 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
21 
22 _LOGGER = logging.getLogger(__name__)
23 
24 CONF_METER_NUMBER = "meter_number"
25 
26 SCAN_INTERVAL = timedelta(minutes=15)
27 
28 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
29  {vol.Required(CONF_METER_NUMBER): cv.string}
30 )
31 
32 
34  hass: HomeAssistant,
35  config: ConfigType,
36  add_entities: AddEntitiesCallback,
37  discovery_info: DiscoveryInfoType | None = None,
38 ) -> None:
39  """Set up the sensor platform."""
40 
41  meter_number = config[CONF_METER_NUMBER]
42 
43  try:
44  meter = Meter(meter_number)
45 
46  except MeterError:
47  _LOGGER.error("Unable to create Oru meter")
48  return
49 
51 
52  _LOGGER.debug("Oru meter_number = %s", meter_number)
53 
54 
56  """Representation of the sensor."""
57 
58  _attr_device_class = SensorDeviceClass.ENERGY
59  _attr_name = "ORU Current Energy Usage"
60  _attr_native_unit_of_measurement = UnitOfEnergy.KILO_WATT_HOUR
61 
62  def __init__(self, meter):
63  """Initialize the sensor."""
64  self._available_available = None
65  self.metermeter = meter
66 
67  @property
68  def unique_id(self):
69  """Return a unique, Home Assistant friendly identifier for this entity."""
70  return self.metermeter.meter_id
71 
72  def update(self) -> None:
73  """Fetch new state data for the sensor."""
74  try:
75  last_read = self.metermeter.last_read()
76 
77  self._attr_native_value_attr_native_value = last_read
78  self._available_available = True
79 
80  _LOGGER.debug(
81  "%s = %s %s",
82  self.namename,
83  self.native_valuenative_value,
84  self.native_unit_of_measurementnative_unit_of_measurement,
85  )
86  except MeterError as err:
87  self._available_available = False
88 
89  _LOGGER.error("Unexpected oru meter error: %s", err)
StateType|date|datetime|Decimal native_value(self)
Definition: __init__.py:460
str|UndefinedType|None name(self)
Definition: entity.py:738
def add_entities(account, async_add_entities, tracked)
Definition: sensor.py:40
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: sensor.py:38