1 """Support for balance data via the Starling Bank API."""
3 from __future__
import annotations
5 from datetime
import timedelta
9 from starlingbank
import StarlingAccount
10 import voluptuous
as vol
13 PLATFORM_SCHEMA
as SENSOR_PLATFORM_SCHEMA,
22 _LOGGER = logging.getLogger(__name__)
24 BALANCE_TYPES = [
"cleared_balance",
"effective_balance"]
26 CONF_ACCOUNTS =
"accounts"
27 CONF_BALANCE_TYPES =
"balance_types"
28 CONF_SANDBOX =
"sandbox"
30 DEFAULT_SANDBOX =
False
31 DEFAULT_ACCOUNT_NAME =
"Starling"
36 ACCOUNT_SCHEMA = vol.Schema(
38 vol.Required(CONF_ACCESS_TOKEN): cv.string,
39 vol.Optional(CONF_BALANCE_TYPES, default=BALANCE_TYPES): vol.All(
40 cv.ensure_list, [vol.In(BALANCE_TYPES)]
42 vol.Optional(CONF_NAME, default=DEFAULT_ACCOUNT_NAME): cv.string,
43 vol.Optional(CONF_SANDBOX, default=DEFAULT_SANDBOX): cv.boolean,
47 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
48 {vol.Required(CONF_ACCOUNTS): vol.Schema([ACCOUNT_SCHEMA])}
55 add_devices: AddEntitiesCallback,
56 discovery_info: DiscoveryInfoType |
None =
None,
58 """Set up the Sterling Bank sensor platform."""
60 sensors: list[StarlingBalanceSensor] = []
61 for account
in config[CONF_ACCOUNTS]:
63 starling_account = StarlingAccount(
64 account[CONF_ACCESS_TOKEN], sandbox=account[CONF_SANDBOX]
68 starling_account, account[CONF_NAME], balance_type
70 for balance_type
in account[CONF_BALANCE_TYPES]
72 except requests.exceptions.HTTPError
as error:
74 "Unable to set up Starling account '%s': %s", account[CONF_NAME], error
77 add_devices(sensors,
True)
81 """Representation of a Starling balance sensor."""
83 _attr_icon =
"mdi:currency-gbp"
85 def __init__(self, starling_account, account_name, balance_data_type):
86 """Initialize the sensor."""
94 """Return the name of the sensor."""
95 balance_data_type = self.
_balance_data_type_balance_data_type.replace(
"_",
" ").capitalize()
96 return f
"{self._account_name} {balance_data_type}"
100 """Return the state of the sensor."""
105 """Return the unit of measurement."""
109 """Fetch new state data for the sensor."""
def native_unit_of_measurement(self)
def __init__(self, starling_account, account_name, balance_data_type)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_devices, DiscoveryInfoType|None discovery_info=None)