2020-07-11 20:40:42 +02:00
|
|
|
"""
|
|
|
|
NiceHash Rig Payout Sensors
|
|
|
|
"""
|
|
|
|
from datetime import datetime
|
|
|
|
import logging
|
|
|
|
|
|
|
|
from homeassistant.const import ATTR_ATTRIBUTION
|
|
|
|
from homeassistant.helpers.entity import Entity
|
|
|
|
|
|
|
|
from .const import (
|
|
|
|
CURRENCY_BTC,
|
|
|
|
FORMAT_DATETIME,
|
|
|
|
ICON_CURRENCY_BTC,
|
|
|
|
ICON_PULSE,
|
|
|
|
ICON_THERMOMETER,
|
|
|
|
NICEHASH_ATTRIBUTION,
|
|
|
|
PAYOUT_USER,
|
|
|
|
)
|
2020-07-11 20:56:56 +02:00
|
|
|
from .coordinators import (
|
2020-07-11 20:40:42 +02:00
|
|
|
MiningPayoutsDataUpdateCoordinator,
|
|
|
|
MiningRigsDataUpdateCoordinator,
|
|
|
|
)
|
|
|
|
from .nicehash import MiningRig, Payout
|
|
|
|
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
class RecentMiningPayoutSensor(Entity):
|
|
|
|
"""
|
|
|
|
Displays most recent payout of a mining rig
|
|
|
|
"""
|
|
|
|
|
|
|
|
def __init__(
|
|
|
|
self, coordinator: MiningPayoutsDataUpdateCoordinator, organization_id: str
|
|
|
|
):
|
|
|
|
"""Initialize the sensor"""
|
|
|
|
self.coordinator = coordinator
|
|
|
|
self.organization_id = organization_id
|
|
|
|
self._id = None
|
|
|
|
self._created = None
|
|
|
|
self._currency = None
|
|
|
|
self._amount = 0.00
|
|
|
|
self._fee = 0.00
|
|
|
|
|
|
|
|
@property
|
|
|
|
def name(self):
|
|
|
|
"""Sensor name"""
|
|
|
|
return f"Recent Mining Payout"
|
|
|
|
|
|
|
|
@property
|
|
|
|
def unique_id(self):
|
|
|
|
"""Unique entity id"""
|
|
|
|
return f"{self.organization_id}:payouts:recent"
|
|
|
|
|
|
|
|
@property
|
|
|
|
def should_poll(self):
|
|
|
|
"""No need to poll, Coordinator notifies entity of updates"""
|
|
|
|
return False
|
|
|
|
|
|
|
|
@property
|
|
|
|
def available(self):
|
|
|
|
"""Whether sensor is available"""
|
|
|
|
return self.coordinator.last_update_success
|
|
|
|
|
|
|
|
@property
|
|
|
|
def state(self):
|
|
|
|
"""Sensor state"""
|
|
|
|
try:
|
|
|
|
for raw_payout in self.coordinator.data:
|
|
|
|
payout = Payout(raw_payout)
|
|
|
|
if payout.account_type == PAYOUT_USER:
|
|
|
|
self._id = payout.id
|
|
|
|
self._amount = payout.amount
|
|
|
|
self._currency = payout.currency
|
|
|
|
self._created = datetime.fromtimestamp(payout.created / 1000.0)
|
|
|
|
self._fee = payout.fee
|
|
|
|
except Exception as e:
|
|
|
|
_LOGGER.error(f"Unable to get most recent \n{e}")
|
|
|
|
self._id = None
|
|
|
|
self._created = None
|
|
|
|
self._currency = None
|
|
|
|
self._amount = 0.00
|
|
|
|
self._fee = 0.00
|
|
|
|
|
|
|
|
return self._amount
|
|
|
|
|
|
|
|
@property
|
|
|
|
def icon(self):
|
|
|
|
"""Sensor icon"""
|
|
|
|
return ICON_CURRENCY_BTC
|
|
|
|
|
|
|
|
@property
|
|
|
|
def unit_of_measurement(self):
|
|
|
|
"""Sensor unit of measurement"""
|
|
|
|
return CURRENCY_BTC
|
|
|
|
|
|
|
|
@property
|
|
|
|
def device_state_attributes(self):
|
|
|
|
"""Sensor device state attributes"""
|
|
|
|
created = None
|
|
|
|
if self._created:
|
|
|
|
created = self._created.strftime(FORMAT_DATETIME)
|
|
|
|
return {
|
|
|
|
ATTR_ATTRIBUTION: NICEHASH_ATTRIBUTION,
|
|
|
|
"amount": self._amount,
|
|
|
|
"created": created,
|
|
|
|
"fee": self._fee,
|
|
|
|
}
|
|
|
|
|
|
|
|
async def async_added_to_hass(self):
|
|
|
|
"""Connect to dispatcher listening for entity data notifications"""
|
|
|
|
self.async_on_remove(
|
|
|
|
self.coordinator.async_add_listener(self.async_write_ha_state)
|
|
|
|
)
|
|
|
|
|
|
|
|
async def async_update(self):
|
|
|
|
"""Update entity"""
|
|
|
|
await self.coordinator.async_request_refresh()
|