Added switches for each device which allow for enabling/disabling mining.
very basic, needs testing. * To do: Set switch to reflect the current state on init. (Currently defaults to off after HA reboot.) * Occasionally the custom component fails to load on HA start. Usually fixed by restarting HA. * When switches are toggled occasionally a false error is reported. This could be due to async call. The desired behavior still occurs though.
This commit is contained in:
parent
bbe51fef8d
commit
0e94842c9d
@ -118,6 +118,8 @@ async def async_setup(hass: HomeAssistant, config: Config):
|
|||||||
|
|
||||||
hass.data[DOMAIN]["rigs_coordinator"] = rigs_coordinator
|
hass.data[DOMAIN]["rigs_coordinator"] = rigs_coordinator
|
||||||
|
|
||||||
|
await discovery.async_load_platform(hass, "switch", DOMAIN, {}, config)
|
||||||
await discovery.async_load_platform(hass, "sensor", DOMAIN, {}, config)
|
await discovery.async_load_platform(hass, "sensor", DOMAIN, {}, config)
|
||||||
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
@ -157,6 +157,13 @@ class NiceHashPrivateClient:
|
|||||||
query = f"size={size}"
|
query = f"size={size}"
|
||||||
return await self.request("GET", "/main/api/v2/mining/rigs/payouts", query)
|
return await self.request("GET", "/main/api/v2/mining/rigs/payouts", query)
|
||||||
|
|
||||||
|
async def toggle_device(self, device_id, action, rig_id):
|
||||||
|
query = ""
|
||||||
|
body = {"deviceId":device_id,
|
||||||
|
"action":action,
|
||||||
|
"rigId":rig_id}
|
||||||
|
return await self.request("POST", "/main/api/v2/mining/rigs/status2", query, body)
|
||||||
|
|
||||||
async def request(self, method, path, query="", body=None):
|
async def request(self, method, path, query="", body=None):
|
||||||
xtime = self.get_epoch_ms_from_now()
|
xtime = self.get_epoch_ms_from_now()
|
||||||
xnonce = str(uuid.uuid4())
|
xnonce = str(uuid.uuid4())
|
||||||
|
82
custom_components/nicehash/switch.py
Normal file
82
custom_components/nicehash/switch.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
"""
|
||||||
|
Sensor platform for NiceHash
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from homeassistant.config_entries import ConfigEntry
|
||||||
|
from homeassistant.const import ATTR_ATTRIBUTION
|
||||||
|
from homeassistant.core import Config, HomeAssistant
|
||||||
|
|
||||||
|
from .const import (
|
||||||
|
BALANCE_TYPE_AVAILABLE,
|
||||||
|
BALANCE_TYPE_PENDING,
|
||||||
|
BALANCE_TYPE_TOTAL,
|
||||||
|
CURRENCY_BTC,
|
||||||
|
CURRENCY_EUR,
|
||||||
|
CURRENCY_USD,
|
||||||
|
DOMAIN,
|
||||||
|
DEVICE_LOAD,
|
||||||
|
DEVICE_RPM,
|
||||||
|
DEVICE_SPEED_RATE,
|
||||||
|
DEVICE_SPEED_ALGORITHM,
|
||||||
|
)
|
||||||
|
from .nicehash import (
|
||||||
|
MiningRig,
|
||||||
|
MiningRigDevice,
|
||||||
|
NiceHashPrivateClient,
|
||||||
|
NiceHashPublicClient,
|
||||||
|
)
|
||||||
|
from .control_switches import (
|
||||||
|
GPUSwitch
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
async def async_setup_platform(
|
||||||
|
hass: HomeAssistant, config: Config, async_add_entities, discovery_info=None
|
||||||
|
):
|
||||||
|
"""Setup NiceHash sensor platform"""
|
||||||
|
_LOGGER.debug("Creating new NiceHash switch components")
|
||||||
|
|
||||||
|
data = hass.data[DOMAIN]
|
||||||
|
# Configuration
|
||||||
|
organization_id = data.get("organization_id")
|
||||||
|
client = data.get("client")
|
||||||
|
# Options
|
||||||
|
currency = data.get("currency")
|
||||||
|
balances_enabled = data.get("balances_enabled")
|
||||||
|
payouts_enabled = data.get("payouts_enabled")
|
||||||
|
rigs_enabled = data.get("rigs_enabled")
|
||||||
|
devices_enabled = data.get("devices_enabled")
|
||||||
|
|
||||||
|
|
||||||
|
# Mining rig and device sensors
|
||||||
|
if rigs_enabled or devices_enabled:
|
||||||
|
rigs_coordinator = data.get("rigs_coordinator")
|
||||||
|
rig_data = await client.get_mining_rigs()
|
||||||
|
mining_rigs = rig_data.get("miningRigs")
|
||||||
|
_LOGGER.debug(f"Found {len(mining_rigs)} rigs")
|
||||||
|
|
||||||
|
if devices_enabled:
|
||||||
|
_LOGGER.debug("Device sensors enabled")
|
||||||
|
device_switches = create_device_switches(mining_rigs, rigs_coordinator,client)
|
||||||
|
async_add_entities(device_switches, True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def create_device_switches(mining_rigs, coordinator, client):
|
||||||
|
device_switches = []
|
||||||
|
for rig_data in mining_rigs:
|
||||||
|
rig = MiningRig(rig_data)
|
||||||
|
devices = rig.devices.values()
|
||||||
|
_LOGGER.debug(
|
||||||
|
f"Found {len(devices)} device switches(s) for {rig.name} ({rig.id})"
|
||||||
|
)
|
||||||
|
for device in devices:
|
||||||
|
_LOGGER.debug(f"Creating {device.name} ({device.id}) switches")
|
||||||
|
device_switches.append(GPUSwitch(coordinator, rig, device, client))
|
||||||
|
|
||||||
|
return device_switches
|
||||||
|
|
Loading…
Reference in New Issue
Block a user