Files
git dc7c300884
Validate / syntax (push) Canceled after 0s
Fix monetary sensor compatibility
2026-09-27 18:49:08 +10:00

54 lines
2.1 KiB
Python

"""Balance sensors for selected Up accounts."""
from __future__ import annotations
from decimal import Decimal
from typing import Any
from homeassistant.components.sensor import SensorDeviceClass, SensorEntity, SensorStateClass
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import CURRENCY_CODE, DOMAIN
from .coordinator import UpCoordinator
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback) -> None:
coordinator: UpCoordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities(UpBalanceSensor(coordinator, account_id) for account_id in coordinator.data)
class UpBalanceSensor(CoordinatorEntity[UpCoordinator], SensorEntity):
_attr_device_class = SensorDeviceClass.MONETARY
_attr_state_class = SensorStateClass.TOTAL
_attr_native_unit_of_measurement = CURRENCY_CODE
_attr_has_entity_name = True
def __init__(self, coordinator: UpCoordinator, account_id: str) -> None:
super().__init__(coordinator)
self._account_id = account_id
self._attr_unique_id = f"{account_id}_balance"
@property
def _account(self) -> dict[str, Any]:
return self.coordinator.data[self._account_id]
@property
def name(self) -> str:
return f"{self._account['attributes']['displayName']} balance"
@property
def native_value(self) -> Decimal:
return Decimal(self._account["attributes"]["balance"]["value"])
@property
def extra_state_attributes(self) -> dict[str, str]:
attrs = self._account["attributes"]
return {"account_type": attrs["accountType"].lower(), "ownership_type": attrs["ownershipType"].lower()}
@property
def device_info(self) -> DeviceInfo:
return DeviceInfo(identifiers={(DOMAIN, self.coordinator.entry.entry_id)}, name="Up Banking", manufacturer="Up Banking")