feature: Add whatsminer get_config.

This commit is contained in:
Upstream Data
2023-12-09 17:35:47 -07:00
parent f892c3a0fd
commit 83d0d09b0d

View File

@@ -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: