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 collections.abc import Callable
6 from dataclasses import dataclass
7 from datetime import datetime
8 
9 from simplefin4py import Account
10 
12  SensorDeviceClass,
13  SensorEntity,
14  SensorEntityDescription,
15  SensorStateClass,
16 )
17 from homeassistant.const import EntityCategory
18 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 from homeassistant.helpers.typing import StateType
21 
22 from . import SimpleFinConfigEntry
23 from .entity import SimpleFinEntity
24 
25 
26 @dataclass(frozen=True, kw_only=True)
28  """Describes a sensor entity."""
29 
30  value_fn: Callable[[Account], StateType | datetime]
31  icon_fn: Callable[[Account], str] | None = None
32  unit_fn: Callable[[Account], str] | None = None
33 
34 
35 SIMPLEFIN_SENSORS: tuple[SimpleFinSensorEntityDescription, ...] = (
37  key="balance",
38  translation_key="balance",
39  state_class=SensorStateClass.TOTAL,
40  device_class=SensorDeviceClass.MONETARY,
41  value_fn=lambda account: account.balance,
42  unit_fn=lambda account: account.currency,
43  icon_fn=lambda account: account.inferred_account_type,
44  ),
46  key="age",
47  translation_key="age",
48  device_class=SensorDeviceClass.TIMESTAMP,
49  entity_category=EntityCategory.DIAGNOSTIC,
50  value_fn=lambda account: account.balance_date,
51  ),
52 )
53 
54 
56  hass: HomeAssistant,
57  config_entry: SimpleFinConfigEntry,
58  async_add_entities: AddEntitiesCallback,
59 ) -> None:
60  """Set up SimpleFIN sensors for config entries."""
61 
62  sf_coordinator = config_entry.runtime_data
63  accounts = sf_coordinator.data.accounts
64 
67  sf_coordinator,
68  sensor_description,
69  account,
70  )
71  for account in accounts
72  for sensor_description in SIMPLEFIN_SENSORS
73  )
74 
75 
77  """Defines a SimpleFIN sensor."""
78 
79  entity_description: SimpleFinSensorEntityDescription
80 
81  @property
82  def native_value(self) -> StateType | datetime | None:
83  """Return the state."""
84  return self.entity_descriptionentity_description.value_fn(self.account_dataaccount_data)
85 
86  @property
87  def icon(self) -> str | None:
88  """Return the icon of this account."""
89 
90  if self.entity_descriptionentity_description.icon_fn is not None:
91  return self.entity_descriptionentity_description.icon_fn(self.account_dataaccount_data)
92  return None
93 
94  @property
95  def native_unit_of_measurement(self) -> str | None:
96  """Return the currency of this account."""
97  if self.entity_descriptionentity_description.unit_fn:
98  return self.entity_descriptionentity_description.unit_fn(self.account_dataaccount_data)
99 
100  return None
None async_setup_entry(HomeAssistant hass, SimpleFinConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:59