feature: Add whatsminer get_config.
This commit is contained in:
@@ -15,12 +15,11 @@
|
|||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import warnings
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from typing import List, Optional, Tuple
|
from typing import List, Optional, Tuple
|
||||||
|
|
||||||
from pyasic.API.btminer import BTMinerAPI
|
from pyasic.API.btminer import BTMinerAPI
|
||||||
from pyasic.config import MinerConfig
|
from pyasic.config import MinerConfig, MiningModeConfig
|
||||||
from pyasic.data import Fan, HashBoard
|
from pyasic.data import Fan, HashBoard
|
||||||
from pyasic.data.error_codes import MinerErrorData, WhatsminerError
|
from pyasic.data.error_codes import MinerErrorData, WhatsminerError
|
||||||
from pyasic.errors import APIError
|
from pyasic.errors import APIError
|
||||||
@@ -209,33 +208,53 @@ class BTMiner(BaseMiner):
|
|||||||
async def get_config(self) -> MinerConfig:
|
async def get_config(self) -> MinerConfig:
|
||||||
pools = None
|
pools = None
|
||||||
summary = None
|
summary = None
|
||||||
cfg = MinerConfig()
|
status = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
data = await self.api.multicommand("pools", "summary")
|
data = await self.api.multicommand("pools", "summary", "status")
|
||||||
pools = data["pools"][0]
|
pools = data["pools"][0]
|
||||||
summary = data["summary"][0]
|
summary = data["summary"][0]
|
||||||
|
status = data["status"][0]
|
||||||
except APIError as e:
|
except APIError as e:
|
||||||
logging.warning(e)
|
logging.warning(e)
|
||||||
except LookupError:
|
except LookupError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if pools:
|
if pools is not None:
|
||||||
if "POOLS" in pools:
|
cfg = MinerConfig.from_api(pools)
|
||||||
cfg = cfg.from_api(pools["POOLS"])
|
|
||||||
else:
|
else:
|
||||||
# somethings wrong with the miner
|
cfg = MinerConfig()
|
||||||
warnings.warn(
|
|
||||||
f"Failed to gather pool config for miner: {self}, miner did not return pool information."
|
is_mining = await self.is_mining(status)
|
||||||
)
|
if not is_mining:
|
||||||
if summary:
|
cfg.mining_mode = MiningModeConfig.sleep()
|
||||||
if "SUMMARY" in summary:
|
return cfg
|
||||||
if wattage := summary["SUMMARY"][0].get("Power Limit"):
|
|
||||||
cfg.autotuning_wattage = wattage
|
if summary is not None:
|
||||||
|
mining_mode = None
|
||||||
|
try:
|
||||||
|
mining_mode = summary["SUMMARY"][0]["Power Mode"]
|
||||||
|
except LookupError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if mining_mode == "High":
|
||||||
|
cfg.mining_mode = MiningModeConfig.high()
|
||||||
|
return cfg
|
||||||
|
elif mining_mode == "Low":
|
||||||
|
cfg.mining_mode = MiningModeConfig.low()
|
||||||
|
return cfg
|
||||||
|
try:
|
||||||
|
power_lim = summary["SUMMARY"][0]["Power Limit"]
|
||||||
|
except LookupError:
|
||||||
|
power_lim = None
|
||||||
|
|
||||||
|
if power_lim is None:
|
||||||
|
cfg.mining_mode = MiningModeConfig.normal()
|
||||||
|
return cfg
|
||||||
|
|
||||||
|
cfg.mining_mode = MiningModeConfig.power_tuning(power_lim)
|
||||||
|
return cfg
|
||||||
|
|
||||||
self.config = cfg
|
|
||||||
|
|
||||||
return self.config
|
|
||||||
|
|
||||||
async def set_power_limit(self, wattage: int) -> bool:
|
async def set_power_limit(self, wattage: int) -> bool:
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user