feature: add mara config parsing.

This commit is contained in:
Upstream Data
2024-04-12 14:28:22 -06:00
parent d56da007a5
commit ecf0ce22d6
6 changed files with 77 additions and 1 deletions

View File

@@ -204,3 +204,11 @@ class MinerConfig:
fan_mode=FanModeConfig.from_auradine(web_conf["fan"]), fan_mode=FanModeConfig.from_auradine(web_conf["fan"]),
mining_mode=MiningModeConfig.from_auradine(web_conf["mode"]), mining_mode=MiningModeConfig.from_auradine(web_conf["mode"]),
) )
@classmethod
def from_mara(cls, web_miner_config: dict) -> "MinerConfig":
return cls(
pools=PoolConfig.from_mara(web_miner_config),
fan_mode=FanModeConfig.from_mara(web_miner_config),
mining_mode=MiningModeConfig.from_mara(web_miner_config),
)

View File

@@ -57,6 +57,9 @@ class MinerConfigOption(Enum):
def as_auradine(self) -> dict: def as_auradine(self) -> dict:
return self.value.as_auradine() return self.value.as_auradine()
def as_mara(self) -> dict:
return self.value.as_mara()
def __call__(self, *args, **kwargs): def __call__(self, *args, **kwargs):
return self.value(*args, **kwargs) return self.value(*args, **kwargs)
@@ -106,3 +109,6 @@ class MinerConfigValue:
def as_auradine(self) -> dict: def as_auradine(self) -> dict:
return {} return {}
def as_mara(self) -> dict:
return {}

View File

@@ -235,4 +235,18 @@ class FanModeConfig(MinerConfigOption):
fan_1_target = fan_data["Target"] fan_1_target = fan_data["Target"]
return cls.manual(speed=round((fan_1_target / fan_1_max) * 100)) return cls.manual(speed=round((fan_1_target / fan_1_max) * 100))
except LookupError: except LookupError:
return cls.default() pass
return cls.default()
@classmethod
def from_mara(cls, web_config: dict):
try:
mode = web_config["general-config"]["environment-profile"]
if mode == "AirCooling":
if web_config["advance-config"]["override-fan-control"]:
return cls.manual(web_config["advance-config"]["fan-fixed-percent"])
return cls.normal()
return cls.immersion()
except LookupError:
pass
return cls.default()

View File

@@ -468,3 +468,28 @@ class MiningModeConfig(MinerConfigOption):
return cls.power_tuning(mode_data["Power"]) return cls.power_tuning(mode_data["Power"])
except LookupError: except LookupError:
return cls.default() return cls.default()
@classmethod
def from_mara(cls, web_config: dict):
try:
mode = web_config["mode"]["work-mode-selector"]
if mode == "Fixed":
fixed_conf = web_config["mode"]["fixed"]
return cls.manual(
global_freq=fixed_conf["frequency"],
global_volt=fixed_conf["voltage"],
)
elif mode == "Stock":
return cls.normal()
elif mode == "Sleep":
return cls.sleep()
elif mode == "Auto":
auto_conf = web_config["mode"]["concorde"]
auto_mode = auto_conf["mode-select"]
if auto_mode == "Hashrate":
return cls.hashrate_tuning(hashrate=auto_conf["hash-target"])
elif auto_mode == "PowerTarget":
return cls.power_tuning(power=auto_conf["power-target"])
except LookupError:
pass
return cls.default()

View File

@@ -177,6 +177,14 @@ class Pool(MinerConfigValue):
password=grpc_pool["password"], password=grpc_pool["password"],
) )
@classmethod
def from_mara(cls, web_pool: dict) -> "Pool":
return cls(
url=web_pool["url"],
user=web_pool["user"],
password=web_pool["pass"],
)
@dataclass @dataclass
class PoolGroup(MinerConfigValue): class PoolGroup(MinerConfigValue):
@@ -336,6 +344,10 @@ class PoolGroup(MinerConfigValue):
except LookupError: except LookupError:
return cls() return cls()
@classmethod
def from_mara(cls, web_config_pools: dict) -> "PoolGroup":
return cls(pools=[Pool.from_mara(pool_conf) for pool_conf in web_config_pools])
@dataclass @dataclass
class PoolConfig(MinerConfigValue): class PoolConfig(MinerConfigValue):
@@ -481,3 +493,7 @@ class PoolConfig(MinerConfigValue):
) )
except LookupError: except LookupError:
return cls() return cls()
@classmethod
def from_mara(cls, web_config: dict) -> "PoolConfig":
return cls(groups=[PoolGroup.from_mara(web_config["pools"])])

View File

@@ -1,5 +1,6 @@
from typing import List, Optional from typing import List, Optional
from pyasic import MinerConfig
from pyasic.data import Fan, HashBoard from pyasic.data import Fan, HashBoard
from pyasic.errors import APIError from pyasic.errors import APIError
from pyasic.miners.base import BaseMiner from pyasic.miners.base import BaseMiner
@@ -72,6 +73,12 @@ class MaraMiner(BaseMiner):
res = await self.web.set_locate_miner(blinking=True) res = await self.web.set_locate_miner(blinking=True)
return res.get("blinking") is True return res.get("blinking") is True
async def get_config(self) -> MinerConfig:
data = await self.web.get_miner_config()
if data:
self.config = MinerConfig.from_mara(data)
return self.config
async def _get_wattage(self, web_brief: dict = None) -> Optional[int]: async def _get_wattage(self, web_brief: dict = None) -> Optional[int]:
if web_brief is None: if web_brief is None:
try: try: