3 from __future__
import annotations
5 from datetime
import timedelta
8 from pyatome.client
import AtomeClient, PyAtomeError
9 import voluptuous
as vol
12 PLATFORM_SCHEMA
as SENSOR_PLATFORM_SCHEMA,
30 _LOGGER = logging.getLogger(__name__)
32 DEFAULT_NAME =
"atome"
40 LIVE_NAME =
"Atome Live Power"
41 DAILY_NAME =
"Atome Daily"
42 WEEKLY_NAME =
"Atome Weekly"
43 MONTHLY_NAME =
"Atome Monthly"
44 YEARLY_NAME =
"Atome Yearly"
49 MONTHLY_TYPE =
"month"
52 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
54 vol.Required(CONF_USERNAME): cv.string,
55 vol.Required(CONF_PASSWORD): cv.string,
56 vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
64 add_entities: AddEntitiesCallback,
65 discovery_info: DiscoveryInfoType |
None =
None,
67 """Set up the Atome sensor."""
68 username = config[CONF_USERNAME]
69 password = config[CONF_PASSWORD]
72 atome_client = AtomeClient(username, password)
74 except PyAtomeError
as exp:
81 sensors.append(
AtomeSensor(data, LIVE_NAME, LIVE_TYPE))
82 sensors.append(
AtomeSensor(data, DAILY_NAME, DAILY_TYPE))
83 sensors.append(
AtomeSensor(data, WEEKLY_NAME, WEEKLY_TYPE))
84 sensors.append(
AtomeSensor(data, MONTHLY_NAME, MONTHLY_TYPE))
85 sensors.append(
AtomeSensor(data, YEARLY_NAME, YEARLY_TYPE))
91 """Stores data retrieved from Neurio sensor."""
93 def __init__(self, client: AtomeClient) ->
None:
94 """Initialize the data."""
110 """Return latest active power value."""
115 """Return latest active power value."""
120 """Return latest active power value."""
127 and values.get(
"subscribed")
128 and (values.get(
"isConnected")
is not None)
134 "Updating Atome live data. Got: %d, isConnected: %s, subscribed: %d",
141 _LOGGER.error(
"Live Data : Missing last value in values: %s", values)
144 @Throttle(LIVE_SCAN_INTERVAL)
146 """Return current power value."""
148 _LOGGER.debug(
"Perform Reconnect during live request")
153 """Return current daily/weekly/monthly/yearly power usage."""
154 values = self.
atome_clientatome_client.get_consumption(period_type)
155 if values.get(
"total")
and values.get(
"price"):
156 period_usage = values[
"total"] / 1000
157 period_price = values[
"price"]
158 _LOGGER.debug(
"Updating Atome %s data. Got: %d", period_type, period_usage)
159 return True, period_usage, period_price
161 _LOGGER.error(
"%s : Missing last value in values: %s", period_type, values)
162 return False,
None,
None
165 """Return current daily/weekly/monthly/yearly power usage with one retry."""
171 if not retrieve_success:
172 _LOGGER.debug(
"Perform Reconnect during %s", period_type)
179 return (period_usage, period_price)
183 """Return latest daily usage value."""
188 """Return latest daily usage value."""
191 @Throttle(DAILY_SCAN_INTERVAL)
193 """Return current daily power usage."""
201 """Return latest weekly usage value."""
206 """Return latest weekly usage value."""
209 @Throttle(WEEKLY_SCAN_INTERVAL)
211 """Return current weekly power usage."""
219 """Return latest monthly usage value."""
224 """Return latest monthly usage value."""
227 @Throttle(MONTHLY_SCAN_INTERVAL)
229 """Return current monthly power usage."""
237 """Return latest yearly usage value."""
242 """Return latest yearly usage value."""
245 @Throttle(YEARLY_SCAN_INTERVAL)
247 """Return current yearly power usage."""
255 """Representation of a sensor entity for Atome."""
258 """Initialize the sensor."""
264 if sensor_type == LIVE_TYPE:
274 """Update device state."""
275 update_function = getattr(self.
_data_data, f
"update_{self._sensor_type}_usage")
281 "subscribed_power": self.
_data_data.subscribed_power,
282 "is_connected": self.
_data_data.is_connected,
287 "price": getattr(self.
_data_data, f
"{self._sensor_type}_price")
None __init__(self, AtomeClient client)
def _retrieve_period_usage(self, period_type)
def subscribed_power(self)
def _retrieve_period_usage_with_retry(self, period_type)
def update_month_usage(self)
def update_week_usage(self)
def update_year_usage(self)
def update_day_usage(self)
def update_live_usage(self)
_attr_native_unit_of_measurement
def __init__(self, data, name, sensor_type)
_attr_extra_state_attributes
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
def add_entities(account, async_add_entities, tracked)