From 3627194f3410b65810fdf378ea064743a7a65b65 Mon Sep 17 00:00:00 2001 From: upstreamdata Date: Sat, 29 Jun 2024 14:59:27 -0600 Subject: [PATCH] feature: add config parsing from bitaxe. --- pyasic/config/__init__.py | 8 ++++++++ pyasic/config/fans.py | 7 +++++++ pyasic/config/pools.py | 13 +++++++++++++ pyasic/miners/backends/bitaxe.py | 6 +++++- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/pyasic/config/__init__.py b/pyasic/config/__init__.py index 4b1af0e9..f022dda5 100644 --- a/pyasic/config/__init__.py +++ b/pyasic/config/__init__.py @@ -235,3 +235,11 @@ class MinerConfig: fan_mode=FanModeConfig.from_mara(web_miner_config), mining_mode=MiningModeConfig.from_mara(web_miner_config), ) + + @classmethod + def from_bitaxe(cls, web_system_info: dict) -> "MinerConfig": + return cls( + pools=PoolConfig.from_bitaxe(web_system_info), + fan_mode=FanModeConfig.from_bitaxe(web_system_info) + + ) \ No newline at end of file diff --git a/pyasic/config/fans.py b/pyasic/config/fans.py index ed0ef002..01b33ee5 100644 --- a/pyasic/config/fans.py +++ b/pyasic/config/fans.py @@ -291,3 +291,10 @@ class FanModeConfig(MinerConfigOption): except LookupError: pass return cls.default() + + @classmethod + def from_bitaxe(cls, web_system_info: dict): + if web_system_info["autofanspeed"] == 1: + return cls.normal() + else: + return cls.manual(speed=web_system_info["fanspeed"]) \ No newline at end of file diff --git a/pyasic/config/pools.py b/pyasic/config/pools.py index 19c88262..67b0b0ca 100644 --- a/pyasic/config/pools.py +++ b/pyasic/config/pools.py @@ -194,6 +194,11 @@ class Pool(MinerConfigValue): password=web_pool["pass"], ) + @classmethod + def from_bitaxe(cls, web_system_info: dict) -> "Pool": + url = f"stratum+tcp://{web_system_info['stratumURL']}:{web_system_info['stratumPort']}" + return cls(url=url, user=web_system_info["stratumUser"], password=web_system_info.get("stratumPassword", "")) + @dataclass class PoolGroup(MinerConfigValue): @@ -360,6 +365,10 @@ class PoolGroup(MinerConfigValue): def from_mara(cls, web_config_pools: dict) -> "PoolGroup": return cls(pools=[Pool.from_mara(pool_conf) for pool_conf in web_config_pools]) + @classmethod + def from_bitaxe(cls, web_system_info: dict) -> "PoolGroup": + return cls(pools=[Pool.from_bitaxe(web_system_info)]) + @dataclass class PoolConfig(MinerConfigValue): @@ -514,3 +523,7 @@ class PoolConfig(MinerConfigValue): @classmethod def from_mara(cls, web_config: dict) -> "PoolConfig": return cls(groups=[PoolGroup.from_mara(web_config["pools"])]) + + @classmethod + def from_bitaxe(cls, web_system_info: dict) -> "PoolConfig": + return cls(groups=[PoolGroup.from_bitaxe(web_system_info)]) diff --git a/pyasic/miners/backends/bitaxe.py b/pyasic/miners/backends/bitaxe.py index cb82b37a..6b0ed666 100644 --- a/pyasic/miners/backends/bitaxe.py +++ b/pyasic/miners/backends/bitaxe.py @@ -1,6 +1,6 @@ from typing import List, Optional -from pyasic import APIError +from pyasic import APIError, MinerConfig from pyasic.data import AlgoHashRate, Fan, HashBoard, HashUnit from pyasic.miners.base import BaseMiner from pyasic.miners.data import DataFunction, DataLocations, DataOptions, WebAPICommand @@ -52,6 +52,10 @@ class BitAxe(BaseMiner): await self.web.restart() return True + async def get_config(self) -> MinerConfig: + web_system_info = await self.web.system_info() + return MinerConfig.from_bitaxe(web_system_info) + async def _get_wattage(self, web_system_info: dict = None) -> Optional[int]: if web_system_info is None: try: