mirror of https://github.com/home-assistant/core
59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
"""Data for the D-Link Power Plug integration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
import logging
|
|
import urllib
|
|
|
|
from pyW215.pyW215 import SmartPlug
|
|
|
|
from homeassistant.util import dt as dt_util
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
class SmartPlugData:
|
|
"""Get the latest data from smart plug."""
|
|
|
|
def __init__(self, smartplug: SmartPlug) -> None:
|
|
"""Initialize the data object."""
|
|
self.smartplug = smartplug
|
|
self.state: str | None = None
|
|
self.temperature: str = ""
|
|
self.current_consumption: str = ""
|
|
self.total_consumption: str = ""
|
|
self.available = False
|
|
self._n_tried = 0
|
|
self._last_tried: datetime | None = None
|
|
|
|
def update(self) -> None:
|
|
"""Get the latest data from the smart plug."""
|
|
if self._last_tried is not None:
|
|
last_try_s = (dt_util.now() - self._last_tried).total_seconds() / 60
|
|
retry_seconds = min(self._n_tried * 2, 10) - last_try_s
|
|
if self._n_tried > 0 and retry_seconds > 0:
|
|
_LOGGER.warning("Waiting %s s to retry", retry_seconds)
|
|
return
|
|
|
|
_state = "unknown"
|
|
|
|
try:
|
|
self._last_tried = dt_util.now()
|
|
_state = self.smartplug.state
|
|
except urllib.error.HTTPError:
|
|
_LOGGER.error("D-Link connection problem")
|
|
if _state == "unknown":
|
|
self._n_tried += 1
|
|
self.available = False
|
|
_LOGGER.warning("Failed to connect to D-Link switch")
|
|
return
|
|
|
|
self.state = _state
|
|
self.available = True
|
|
|
|
self.temperature = self.smartplug.temperature
|
|
self.current_consumption = self.smartplug.current_consumption
|
|
self.total_consumption = self.smartplug.total_consumption
|
|
self._n_tried = 0
|