- Device switch status now properly reflects status of mining device (there is a delay for the status to update into Home Assistant)
- Added property to switches which contains the last response from the API. This will reflect "Success!" or otherwise the error message that was provided by the API. - Added additional properties 'status' and 'device' to switches.
This commit is contained in:
parent
2aca201d3b
commit
991755ee4e
89
custom_components/nicehash/control_switches.py
Normal file
89
custom_components/nicehash/control_switches.py
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
"""
|
||||||
|
NiceHash Rig controls
|
||||||
|
"""
|
||||||
|
from datetime import datetime
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from homeassistant.const import ATTR_ATTRIBUTION
|
||||||
|
from homeassistant.helpers.entity import Entity
|
||||||
|
from homeassistant.components.switch import SwitchEntity
|
||||||
|
|
||||||
|
from .coordinators import MiningRigsDataUpdateCoordinator
|
||||||
|
from .nicehash import MiningRig, MiningRigDevice, NiceHashPrivateClient
|
||||||
|
from .const import DOMAIN, NICEHASH_ATTRIBUTION
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
class DeviceSwitch(SwitchEntity):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
coordinator: MiningRigsDataUpdateCoordinator,
|
||||||
|
rig: MiningRig,
|
||||||
|
device: MiningRigDevice,
|
||||||
|
client: NiceHashPrivateClient,
|
||||||
|
):
|
||||||
|
"""Initialize the switch"""
|
||||||
|
self.coordinator = coordinator
|
||||||
|
self._rig_id = rig.id
|
||||||
|
self._rig_name = rig.name
|
||||||
|
self._device_id = device.id
|
||||||
|
self._device_name = device.name
|
||||||
|
self._client = client
|
||||||
|
self._status = device.status
|
||||||
|
|
||||||
|
|
||||||
|
def _get_device(self):
|
||||||
|
try:
|
||||||
|
mining_rigs = self.coordinator.data.get("miningRigs")
|
||||||
|
rig = MiningRig(mining_rigs.get(self._rig_id))
|
||||||
|
return rig.devices.get(self._device_id)
|
||||||
|
except Exception as e:
|
||||||
|
_LOGGER.error(f"Unable to get mining device ({self._device_id})\n{e}")
|
||||||
|
|
||||||
|
|
||||||
|
class GPUSwitch(DeviceSwitch):
|
||||||
|
|
||||||
|
_is_on = False
|
||||||
|
_last_response = "N/A"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
"""switch name"""
|
||||||
|
return f"{self._device_name} Switch"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unique_id(self):
|
||||||
|
"""Unique entity id"""
|
||||||
|
return f"{self._device_id}:switch"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_on(self):
|
||||||
|
device = self._get_device()
|
||||||
|
if device.status == "Mining":
|
||||||
|
self._is_on = True
|
||||||
|
elif device:
|
||||||
|
self._is_on = False
|
||||||
|
else:
|
||||||
|
self._is_on = "unavailable"
|
||||||
|
return self._is_on
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_state_attributes(self):
|
||||||
|
"""Sensor device state attributes"""
|
||||||
|
return {
|
||||||
|
ATTR_ATTRIBUTION: NICEHASH_ATTRIBUTION,
|
||||||
|
"status": self._status,
|
||||||
|
"device": self._device_name,
|
||||||
|
"last_response": self._last_response,
|
||||||
|
}
|
||||||
|
|
||||||
|
def turn_on(self, **kwargs):
|
||||||
|
"""Turn the switch on."""
|
||||||
|
self._is_on = True
|
||||||
|
response = asyncio.run(self._client.toggle_device(self._device_id, "START", self._rig_id))
|
||||||
|
self._last_response = "Success!" if response["success"] else response["message"]
|
||||||
|
|
||||||
|
def turn_off(self, **kwargs):
|
||||||
|
"""Turn the switch off."""
|
||||||
|
self._is_on = False
|
||||||
|
response = asyncio.run(self._client.toggle_device(self._device_id, "STOP", self._rig_id))
|
||||||
|
self._last_response = "Success!" if response["success"] else response["message"]
|
Loading…
Reference in New Issue
Block a user