Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Etherscan sensors."""
2 
3 from __future__ import annotations
4 
5 from datetime import timedelta
6 
7 from pyetherscan import get_balance
8 import voluptuous as vol
9 
11  PLATFORM_SCHEMA as SENSOR_PLATFORM_SCHEMA,
12  SensorEntity,
13 )
14 from homeassistant.const import CONF_ADDRESS, CONF_NAME, CONF_TOKEN
15 from homeassistant.core import HomeAssistant
17 from homeassistant.helpers.entity_platform import AddEntitiesCallback
18 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
19 
20 CONF_TOKEN_ADDRESS = "token_address"
21 
22 SCAN_INTERVAL = timedelta(minutes=5)
23 
24 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
25  {
26  vol.Required(CONF_ADDRESS): cv.string,
27  vol.Optional(CONF_NAME): cv.string,
28  vol.Optional(CONF_TOKEN): cv.string,
29  vol.Optional(CONF_TOKEN_ADDRESS): cv.string,
30  }
31 )
32 
33 
35  hass: HomeAssistant,
36  config: ConfigType,
37  add_entities: AddEntitiesCallback,
38  discovery_info: DiscoveryInfoType | None = None,
39 ) -> None:
40  """Set up the Etherscan.io sensors."""
41  address = config.get(CONF_ADDRESS)
42  name = config.get(CONF_NAME)
43  token = config.get(CONF_TOKEN)
44  token_address = config.get(CONF_TOKEN_ADDRESS)
45 
46  if token:
47  token = token.upper()
48  if not name:
49  name = f"{token} Balance"
50  if not name:
51  name = "ETH Balance"
52 
53  add_entities([EtherscanSensor(name, address, token, token_address)], True)
54 
55 
57  """Representation of an Etherscan.io sensor."""
58 
59  _attr_attribution = "Data provided by etherscan.io"
60 
61  def __init__(self, name, address, token, token_address):
62  """Initialize the sensor."""
63  self._name_name = name
64  self._address_address = address
65  self._token_address_token_address = token_address
66  self._token_token = token
67  self._state_state = None
68  self._unit_of_measurement_unit_of_measurement = self._token_token or "ETH"
69 
70  @property
71  def name(self):
72  """Return the name of the sensor."""
73  return self._name_name
74 
75  @property
76  def native_value(self):
77  """Return the state of the sensor."""
78  return self._state_state
79 
80  @property
82  """Return the unit of measurement this sensor expresses itself in."""
83  return self._unit_of_measurement_unit_of_measurement
84 
85  def update(self) -> None:
86  """Get the latest state of the sensor."""
87 
88  if self._token_address_token_address:
89  self._state_state = get_balance(self._address_address, self._token_address_token_address)
90  elif self._token_token:
91  self._state_state = get_balance(self._address_address, self._token_token)
92  else:
93  self._state_state = get_balance(self._address_address)
def __init__(self, name, address, token, token_address)
Definition: sensor.py:61
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: sensor.py:39
def add_entities(account, async_add_entities, tracked)
Definition: sensor.py:40