From 44012c50d6c71b7ffb2adcb19229092eab7a0f40 Mon Sep 17 00:00:00 2001 From: UpstreamData Date: Fri, 13 May 2022 11:27:56 -0600 Subject: [PATCH] finished updating the miner type handlers to create subclasses of the backend and type to create a miner, each of which handles its own data to simplify creation of new miner types --- README.md | 2 +- miners/__init__.py | 19 +- miners/_backends/__init__.py | 5 + miners/{ => _backends}/bmminer.py | 10 +- miners/{ => _backends}/bosminer.py | 12 +- miners/{ => _backends}/btminer.py | 10 +- miners/{ => _backends}/cgminer.py | 10 +- miners/_backends/hiveon.py | 46 +++++ miners/_types/__init__.py | 3 + miners/_types/antminer/X17/S17.py | 9 + miners/_types/antminer/X17/S17_Plus.py | 9 + miners/_types/antminer/X17/S17_Pro.py | 9 + miners/_types/antminer/X17/S17e.py | 9 + miners/_types/antminer/X17/T17.py | 9 + miners/_types/antminer/X17/T17_Plus.py | 9 + miners/_types/antminer/X17/T17e.py | 9 + miners/_types/antminer/X17/__init__.py | 8 + miners/_types/antminer/X19/S19.py | 9 + miners/_types/antminer/X19/S19_Pro.py | 9 + miners/_types/antminer/X19/S19j.py | 9 + miners/_types/antminer/X19/S19j_Pro.py | 9 + miners/_types/antminer/X19/T19.py | 9 + miners/_types/antminer/X19/__init__.py | 7 + miners/_types/antminer/X9/S9.py | 9 + miners/_types/antminer/X9/T9.py | 9 + miners/_types/antminer/X9/__init__.py | 2 + miners/_types/antminer/__init__.py | 3 + miners/_types/avalonminer/A10X/A1047.py | 9 + miners/_types/avalonminer/A10X/A1066.py | 9 + miners/_types/avalonminer/A10X/__init__.py | 2 + miners/_types/avalonminer/A8X/A821.py | 8 + miners/_types/avalonminer/A8X/A841.py | 8 + miners/_types/avalonminer/A8X/__init__.py | 2 + miners/_types/avalonminer/__init__.py | 2 + miners/_types/whatsminer/M2X/M20S.py | 9 + miners/_types/whatsminer/M2X/M20S_Plus.py | 9 + miners/_types/whatsminer/M2X/M21.py | 9 + miners/_types/whatsminer/M2X/M21S.py | 9 + miners/_types/whatsminer/M2X/M21S_Plus.py | 9 + miners/_types/whatsminer/M2X/__init__.py | 6 + miners/_types/whatsminer/M3X/M30S.py | 8 + miners/_types/whatsminer/M3X/M30S_Plus.py | 8 + .../_types/whatsminer/M3X/M30S_Plus_Plus.py | 8 + miners/_types/whatsminer/M3X/M31S.py | 8 + miners/_types/whatsminer/M3X/M31S_Plus.py | 8 + miners/_types/whatsminer/M3X/M32S.py | 9 + miners/_types/whatsminer/M3X/__init__.py | 8 + miners/_types/whatsminer/__init__.py | 2 + miners/antminer/bmminer/X17/S17.py | 12 +- miners/antminer/bmminer/X17/S17_Plus.py | 12 +- miners/antminer/bmminer/X17/S17_Pro.py | 12 +- miners/antminer/bmminer/X17/S17e.py | 12 +- miners/antminer/bmminer/X17/T17.py | 12 +- miners/antminer/bmminer/X17/T17_Plus.py | 12 +- miners/antminer/bmminer/X17/T17e.py | 12 +- miners/antminer/bmminer/X19/S19.py | 12 +- miners/antminer/bmminer/X19/S19_Pro.py | 12 +- miners/antminer/bmminer/X19/S19j.py | 12 +- miners/antminer/bmminer/X19/S19j_Pro.py | 12 +- miners/antminer/bmminer/X19/T19.py | 12 +- miners/antminer/bmminer/X9/S9.py | 11 +- miners/antminer/bmminer/X9/T9.py | 11 +- miners/antminer/bosminer/X17/S17.py | 12 +- miners/antminer/bosminer/X17/S17_Plus.py | 12 +- miners/antminer/bosminer/X17/S17_Pro.py | 12 +- miners/antminer/bosminer/X17/S17e.py | 12 +- miners/antminer/bosminer/X17/T17.py | 12 +- miners/antminer/bosminer/X17/T17_Plus.py | 12 +- miners/antminer/bosminer/X17/T17e.py | 12 +- miners/antminer/bosminer/X19/S19.py | 12 +- miners/antminer/bosminer/X19/S19_Pro.py | 12 +- miners/antminer/bosminer/X19/S19j.py | 12 +- miners/antminer/bosminer/X19/S19j_Pro.py | 12 +- miners/antminer/bosminer/X19/T19.py | 12 +- miners/antminer/bosminer/X9/S9.py | 11 +- miners/antminer/cgminer/X17/S17.py | 12 +- miners/antminer/cgminer/X17/S17_Plus.py | 12 +- miners/antminer/cgminer/X17/S17_Pro.py | 12 +- miners/antminer/cgminer/X17/S17e.py | 12 +- miners/antminer/cgminer/X17/T17.py | 12 +- miners/antminer/cgminer/X17/T17_Plus.py | 12 +- miners/antminer/cgminer/X17/T17e.py | 12 +- miners/antminer/cgminer/X19/S19.py | 12 +- miners/antminer/cgminer/X19/S19_Pro.py | 12 +- miners/antminer/cgminer/X19/S19j.py | 12 +- miners/antminer/cgminer/X19/S19j_Pro.py | 12 +- miners/antminer/cgminer/X19/T19.py | 12 +- miners/antminer/cgminer/X9/S9.py | 11 +- miners/antminer/cgminer/X9/T9.py | 2 +- miners/antminer/cgminer/X9/__init__.py | 1 - miners/antminer/hiveon/X9/T9.py | 49 +---- miners/avalonminer/Avalon10/__init__.py | 61 ------ miners/avalonminer/Avalon8/__init__.py | 177 ------------------ miners/avalonminer/__init__.py | 12 +- miners/avalonminer/cgminer/A10X/A1047.py | 8 + miners/avalonminer/cgminer/A10X/A1066.py | 8 + miners/avalonminer/cgminer/A10X/__init__.py | 2 + miners/avalonminer/cgminer/A8X/A821.py | 8 + miners/avalonminer/cgminer/A8X/A841.py | 8 + miners/avalonminer/cgminer/A8X/__init__.py | 2 + miners/avalonminer/cgminer/__init__.py | 2 + miners/miner_factory.py | 15 +- miners/unknown.py | 6 +- miners/whatsminer/btminer/M2X/M20S.py | 10 +- miners/whatsminer/btminer/M2X/M20S_Plus.py | 10 +- miners/whatsminer/btminer/M2X/M21.py | 10 +- miners/whatsminer/btminer/M2X/M21S.py | 10 +- miners/whatsminer/btminer/M2X/M21S_Plus.py | 10 +- miners/whatsminer/btminer/M3X/M30S.py | 9 +- miners/whatsminer/btminer/M3X/M30S_Plus.py | 9 +- .../whatsminer/btminer/M3X/M30S_Plus_Plus.py | 9 +- miners/whatsminer/btminer/M3X/M31S.py | 10 +- miners/whatsminer/btminer/M3X/M31S_Plus.py | 10 +- miners/whatsminer/btminer/M3X/M32S.py | 10 +- misc/bos.py | 22 ++- 115 files changed, 644 insertions(+), 735 deletions(-) create mode 100644 miners/_backends/__init__.py rename miners/{ => _backends}/bmminer.py (97%) rename miners/{ => _backends}/bosminer.py (98%) rename miners/{ => _backends}/btminer.py (97%) rename miners/{ => _backends}/cgminer.py (97%) create mode 100644 miners/_backends/hiveon.py create mode 100644 miners/_types/__init__.py create mode 100644 miners/_types/antminer/X17/S17.py create mode 100644 miners/_types/antminer/X17/S17_Plus.py create mode 100644 miners/_types/antminer/X17/S17_Pro.py create mode 100644 miners/_types/antminer/X17/S17e.py create mode 100644 miners/_types/antminer/X17/T17.py create mode 100644 miners/_types/antminer/X17/T17_Plus.py create mode 100644 miners/_types/antminer/X17/T17e.py create mode 100644 miners/_types/antminer/X17/__init__.py create mode 100644 miners/_types/antminer/X19/S19.py create mode 100644 miners/_types/antminer/X19/S19_Pro.py create mode 100644 miners/_types/antminer/X19/S19j.py create mode 100644 miners/_types/antminer/X19/S19j_Pro.py create mode 100644 miners/_types/antminer/X19/T19.py create mode 100644 miners/_types/antminer/X19/__init__.py create mode 100644 miners/_types/antminer/X9/S9.py create mode 100644 miners/_types/antminer/X9/T9.py create mode 100644 miners/_types/antminer/X9/__init__.py create mode 100644 miners/_types/antminer/__init__.py create mode 100644 miners/_types/avalonminer/A10X/A1047.py create mode 100644 miners/_types/avalonminer/A10X/A1066.py create mode 100644 miners/_types/avalonminer/A10X/__init__.py create mode 100644 miners/_types/avalonminer/A8X/A821.py create mode 100644 miners/_types/avalonminer/A8X/A841.py create mode 100644 miners/_types/avalonminer/A8X/__init__.py create mode 100644 miners/_types/avalonminer/__init__.py create mode 100644 miners/_types/whatsminer/M2X/M20S.py create mode 100644 miners/_types/whatsminer/M2X/M20S_Plus.py create mode 100644 miners/_types/whatsminer/M2X/M21.py create mode 100644 miners/_types/whatsminer/M2X/M21S.py create mode 100644 miners/_types/whatsminer/M2X/M21S_Plus.py create mode 100644 miners/_types/whatsminer/M2X/__init__.py create mode 100644 miners/_types/whatsminer/M3X/M30S.py create mode 100644 miners/_types/whatsminer/M3X/M30S_Plus.py create mode 100644 miners/_types/whatsminer/M3X/M30S_Plus_Plus.py create mode 100644 miners/_types/whatsminer/M3X/M31S.py create mode 100644 miners/_types/whatsminer/M3X/M31S_Plus.py create mode 100644 miners/_types/whatsminer/M3X/M32S.py create mode 100644 miners/_types/whatsminer/M3X/__init__.py create mode 100644 miners/_types/whatsminer/__init__.py delete mode 100644 miners/avalonminer/Avalon10/__init__.py delete mode 100644 miners/avalonminer/Avalon8/__init__.py create mode 100644 miners/avalonminer/cgminer/A10X/A1047.py create mode 100644 miners/avalonminer/cgminer/A10X/A1066.py create mode 100644 miners/avalonminer/cgminer/A10X/__init__.py create mode 100644 miners/avalonminer/cgminer/A8X/A821.py create mode 100644 miners/avalonminer/cgminer/A8X/A841.py create mode 100644 miners/avalonminer/cgminer/A8X/__init__.py create mode 100644 miners/avalonminer/cgminer/__init__.py diff --git a/README.md b/README.md index da1f0559..19e313f1 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ Or generate a miner directly without the factory: ```python import asyncio -from miners.bosminer import BOSMiner +from miners._backends.bosminer import BOSMiner from tools.cfg_util_old.func.parse_data import safe_parse_api_data diff --git a/miners/__init__.py b/miners/__init__.py index 67084baf..548a85fe 100644 --- a/miners/__init__.py +++ b/miners/__init__.py @@ -1,29 +1,22 @@ -from API.bmminer import BMMinerAPI -from API.bosminer import BOSMinerAPI -from API.cgminer import CGMinerAPI -from API.btminer import BTMinerAPI -from API.unknown import UnknownAPI -import ipaddress import asyncssh import logging class BaseMiner: - def __init__( - self, - ip: str, - api: BMMinerAPI or BOSMinerAPI or CGMinerAPI or BTMinerAPI or UnknownAPI, - ) -> None: - self.ip = ipaddress.ip_address(ip) + def __init__(self, *args) -> None: + self.ip = None self.uname = "root" self.pwd = "admin" - self.api = api + self.api = None self.api_type = None self.model = None self.light = None self.hostname = None self.nominal_chips = 1 + def __repr__(self): + return f"{'' if not self.api_type else self.api_type} {'' if not self.model else self.model}: {str(self.ip)}" + async def _get_ssh_connection(self) -> asyncssh.connect: """Create a new asyncssh connection""" try: diff --git a/miners/_backends/__init__.py b/miners/_backends/__init__.py new file mode 100644 index 00000000..71beef86 --- /dev/null +++ b/miners/_backends/__init__.py @@ -0,0 +1,5 @@ +from .bmminer import BMMiner +from .bosminer import BOSMiner +from .btminer import BTMiner +from .cgminer import CGMiner +from .hiveon import Hiveon diff --git a/miners/bmminer.py b/miners/_backends/bmminer.py similarity index 97% rename from miners/bmminer.py rename to miners/_backends/bmminer.py index 05795ab3..3b5c0efa 100644 --- a/miners/bmminer.py +++ b/miners/_backends/bmminer.py @@ -6,16 +6,12 @@ from settings import MINER_FACTORY_GET_VERSION_RETRIES as DATA_RETRIES class BMMiner(BaseMiner): def __init__(self, ip: str) -> None: - api = BMMinerAPI(ip) - super().__init__(ip, api) - self.model = None - self.config = None + super().__init__(ip) + self.api = BMMinerAPI(ip) + self.api_type = "BMMiner" self.uname = "root" self.pwd = "admin" - def __repr__(self) -> str: - return f"BMMiner: {str(self.ip)}" - async def get_model(self) -> str or None: """Get miner model. diff --git a/miners/bosminer.py b/miners/_backends/bosminer.py similarity index 98% rename from miners/bosminer.py rename to miners/_backends/bosminer.py index 1386e525..61b5358e 100644 --- a/miners/bosminer.py +++ b/miners/_backends/bosminer.py @@ -8,17 +8,11 @@ from settings import MINER_FACTORY_GET_VERSION_RETRIES as DATA_RETRIES class BOSMiner(BaseMiner): def __init__(self, ip: str) -> None: - api = BOSMinerAPI(ip) - super().__init__(ip, api) - self.model = None - self.config = None - self.version = None + super().__init__(ip) + self.api = BOSMinerAPI(ip) + self.api_type = "BOSMiner" self.uname = "root" self.pwd = "admin" - self.nominal_chips = 63 - - def __repr__(self) -> str: - return f"BOSminer: {str(self.ip)}" async def send_ssh_command(self, cmd: str) -> str or None: """Send a command to the miner over ssh. diff --git a/miners/btminer.py b/miners/_backends/btminer.py similarity index 97% rename from miners/btminer.py rename to miners/_backends/btminer.py index 69ff9cc9..fad9577b 100644 --- a/miners/btminer.py +++ b/miners/_backends/btminer.py @@ -7,13 +7,9 @@ from settings import MINER_FACTORY_GET_VERSION_RETRIES as DATA_RETRIES class BTMiner(BaseMiner): def __init__(self, ip: str) -> None: - api = BTMinerAPI(ip) - self.model = None - super().__init__(ip, api) - self.nominal_chips = 66 - - def __repr__(self) -> str: - return f"BTMiner: {str(self.ip)}" + super().__init__(ip) + self.api = BTMinerAPI(ip) + self.api_type = "BTMiner" async def get_model(self): if self.model: diff --git a/miners/cgminer.py b/miners/_backends/cgminer.py similarity index 97% rename from miners/cgminer.py rename to miners/_backends/cgminer.py index d36f909d..909d5012 100644 --- a/miners/cgminer.py +++ b/miners/_backends/cgminer.py @@ -7,16 +7,12 @@ import logging class CGMiner(BaseMiner): def __init__(self, ip: str) -> None: - api = CGMinerAPI(ip) - super().__init__(ip, api) - self.model = None - self.config = None + super().__init__(ip) + self.api = CGMinerAPI(ip) + self.api_type = "CGMiner" self.uname = "root" self.pwd = "admin" - def __repr__(self) -> str: - return f"CGMiner: {str(self.ip)}" - async def get_model(self): if self.model: return self.model diff --git a/miners/_backends/hiveon.py b/miners/_backends/hiveon.py new file mode 100644 index 00000000..49786e6a --- /dev/null +++ b/miners/_backends/hiveon.py @@ -0,0 +1,46 @@ +from miners._backends import BMMiner + + +class Hiveon(BMMiner): + def __init__(self, ip: str) -> None: + super().__init__(ip) + self.api_type = "Hiveon" + self.uname = "root" + self.pwd = "admin" + + async def get_board_info(self) -> dict: + """Gets data on each board and chain in the miner.""" + board_stats = await self.api.stats() + stats = board_stats["STATS"][1] + boards = {} + board_chains = {0: [2, 9, 10], 1: [3, 11, 12], 2: [4, 13, 14]} + for idx, board in enumerate(board_chains): + boards[board] = [] + for chain in board_chains[board]: + count = stats[f"chain_acn{chain}"] + chips = stats[f"chain_acs{chain}"].replace(" ", "") + if not count == 18 or "x" in chips: + nominal = False + else: + nominal = True + boards[board].append( + { + "chain": chain, + "chip_count": count, + "chip_status": chips, + "nominal": nominal, + } + ) + return boards + + async def get_bad_boards(self) -> dict: + """Checks for and provides list of non working boards.""" + boards = await self.get_board_info() + bad_boards = {} + for board in boards.keys(): + for chain in boards[board]: + if not chain["chip_count"] == 18 or "x" in chain["chip_status"]: + if board not in bad_boards.keys(): + bad_boards[board] = [] + bad_boards[board].append(chain) + return bad_boards diff --git a/miners/_types/__init__.py b/miners/_types/__init__.py new file mode 100644 index 00000000..8265a511 --- /dev/null +++ b/miners/_types/__init__.py @@ -0,0 +1,3 @@ +from .antminer import * +from .avalonminer import * +from .whatsminer import * diff --git a/miners/_types/antminer/X17/S17.py b/miners/_types/antminer/X17/S17.py new file mode 100644 index 00000000..3394951a --- /dev/null +++ b/miners/_types/antminer/X17/S17.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class S17(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "S17" + self.nominal_chips = 65 diff --git a/miners/_types/antminer/X17/S17_Plus.py b/miners/_types/antminer/X17/S17_Plus.py new file mode 100644 index 00000000..bf438475 --- /dev/null +++ b/miners/_types/antminer/X17/S17_Plus.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class S17Plus(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "S17+" + self.nominal_chips = 65 diff --git a/miners/_types/antminer/X17/S17_Pro.py b/miners/_types/antminer/X17/S17_Pro.py new file mode 100644 index 00000000..71568dbb --- /dev/null +++ b/miners/_types/antminer/X17/S17_Pro.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class S17Pro(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "S17 Pro" + self.nominal_chips = 65 diff --git a/miners/_types/antminer/X17/S17e.py b/miners/_types/antminer/X17/S17e.py new file mode 100644 index 00000000..2e9e9b43 --- /dev/null +++ b/miners/_types/antminer/X17/S17e.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class S17e(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "S17e" + self.nominal_chips = 65 diff --git a/miners/_types/antminer/X17/T17.py b/miners/_types/antminer/X17/T17.py new file mode 100644 index 00000000..b52790d4 --- /dev/null +++ b/miners/_types/antminer/X17/T17.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class T17(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "T17" + self.nominal_chips = 65 diff --git a/miners/_types/antminer/X17/T17_Plus.py b/miners/_types/antminer/X17/T17_Plus.py new file mode 100644 index 00000000..3f95418b --- /dev/null +++ b/miners/_types/antminer/X17/T17_Plus.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class T17Plus(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "T17+" + self.nominal_chips = 65 diff --git a/miners/_types/antminer/X17/T17e.py b/miners/_types/antminer/X17/T17e.py new file mode 100644 index 00000000..f4a2aa5a --- /dev/null +++ b/miners/_types/antminer/X17/T17e.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class T17e(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "T17e" + self.nominal_chips = 65 diff --git a/miners/_types/antminer/X17/__init__.py b/miners/_types/antminer/X17/__init__.py new file mode 100644 index 00000000..44ee964d --- /dev/null +++ b/miners/_types/antminer/X17/__init__.py @@ -0,0 +1,8 @@ +from .S17 import S17 +from .S17_Plus import S17Plus +from .S17_Pro import S17Pro +from .S17e import S17e + +from .T17 import T17 +from .T17_Plus import T17Plus +from .T17e import T17e diff --git a/miners/_types/antminer/X19/S19.py b/miners/_types/antminer/X19/S19.py new file mode 100644 index 00000000..061a194e --- /dev/null +++ b/miners/_types/antminer/X19/S19.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class S19(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "S19" + self.nominal_chips = 114 diff --git a/miners/_types/antminer/X19/S19_Pro.py b/miners/_types/antminer/X19/S19_Pro.py new file mode 100644 index 00000000..98fd2d57 --- /dev/null +++ b/miners/_types/antminer/X19/S19_Pro.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class S19Pro(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "S19 Pro" + self.nominal_chips = 114 diff --git a/miners/_types/antminer/X19/S19j.py b/miners/_types/antminer/X19/S19j.py new file mode 100644 index 00000000..3d27c229 --- /dev/null +++ b/miners/_types/antminer/X19/S19j.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class S19j(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "S19j" + self.nominal_chips = 114 diff --git a/miners/_types/antminer/X19/S19j_Pro.py b/miners/_types/antminer/X19/S19j_Pro.py new file mode 100644 index 00000000..e75daadf --- /dev/null +++ b/miners/_types/antminer/X19/S19j_Pro.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class S19jPro(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "S19j Pro" + self.nominal_chips = 114 diff --git a/miners/_types/antminer/X19/T19.py b/miners/_types/antminer/X19/T19.py new file mode 100644 index 00000000..728d43e4 --- /dev/null +++ b/miners/_types/antminer/X19/T19.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class T19(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "T19" + self.nominal_chips = 114 diff --git a/miners/_types/antminer/X19/__init__.py b/miners/_types/antminer/X19/__init__.py new file mode 100644 index 00000000..9f1cec2a --- /dev/null +++ b/miners/_types/antminer/X19/__init__.py @@ -0,0 +1,7 @@ +from .S19 import S19 +from .S19_Pro import S19Pro + +from .S19j import S19j +from .S19j_Pro import S19jPro + +from .T19 import T19 diff --git a/miners/_types/antminer/X9/S9.py b/miners/_types/antminer/X9/S9.py new file mode 100644 index 00000000..2efb5fd7 --- /dev/null +++ b/miners/_types/antminer/X9/S9.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class S9(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "S9" + self.nominal_chips = 63 diff --git a/miners/_types/antminer/X9/T9.py b/miners/_types/antminer/X9/T9.py new file mode 100644 index 00000000..d1d9681c --- /dev/null +++ b/miners/_types/antminer/X9/T9.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class T9(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "T9" + self.nominal_chips = 1 diff --git a/miners/_types/antminer/X9/__init__.py b/miners/_types/antminer/X9/__init__.py new file mode 100644 index 00000000..49d411c4 --- /dev/null +++ b/miners/_types/antminer/X9/__init__.py @@ -0,0 +1,2 @@ +from .S9 import S9 +from .T9 import T9 diff --git a/miners/_types/antminer/__init__.py b/miners/_types/antminer/__init__.py new file mode 100644 index 00000000..bd492da8 --- /dev/null +++ b/miners/_types/antminer/__init__.py @@ -0,0 +1,3 @@ +from .X9 import * +from .X17 import * +from .X19 import * diff --git a/miners/_types/avalonminer/A10X/A1047.py b/miners/_types/avalonminer/A10X/A1047.py new file mode 100644 index 00000000..c8aa2c63 --- /dev/null +++ b/miners/_types/avalonminer/A10X/A1047.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class Avalon1047(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "Avalon 1047" + self.nominal_chips = 114 diff --git a/miners/_types/avalonminer/A10X/A1066.py b/miners/_types/avalonminer/A10X/A1066.py new file mode 100644 index 00000000..5cded585 --- /dev/null +++ b/miners/_types/avalonminer/A10X/A1066.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class Avalon1066(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "Avalon 1066" + self.nominal_chips = 114 diff --git a/miners/_types/avalonminer/A10X/__init__.py b/miners/_types/avalonminer/A10X/__init__.py new file mode 100644 index 00000000..f7bf6790 --- /dev/null +++ b/miners/_types/avalonminer/A10X/__init__.py @@ -0,0 +1,2 @@ +from .A1047 import Avalon1047 +from .A1066 import Avalon1066 diff --git a/miners/_types/avalonminer/A8X/A821.py b/miners/_types/avalonminer/A8X/A821.py new file mode 100644 index 00000000..c733932e --- /dev/null +++ b/miners/_types/avalonminer/A8X/A821.py @@ -0,0 +1,8 @@ +from miners import BaseMiner + + +class Avalon821(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "Avalon 821" diff --git a/miners/_types/avalonminer/A8X/A841.py b/miners/_types/avalonminer/A8X/A841.py new file mode 100644 index 00000000..31d04718 --- /dev/null +++ b/miners/_types/avalonminer/A8X/A841.py @@ -0,0 +1,8 @@ +from miners import BaseMiner + + +class Avalon841(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "Avalon 841" diff --git a/miners/_types/avalonminer/A8X/__init__.py b/miners/_types/avalonminer/A8X/__init__.py new file mode 100644 index 00000000..49de826b --- /dev/null +++ b/miners/_types/avalonminer/A8X/__init__.py @@ -0,0 +1,2 @@ +from .A821 import Avalon821 +from .A841 import Avalon841 diff --git a/miners/_types/avalonminer/__init__.py b/miners/_types/avalonminer/__init__.py new file mode 100644 index 00000000..8e8f61d3 --- /dev/null +++ b/miners/_types/avalonminer/__init__.py @@ -0,0 +1,2 @@ +from .A8X import * +from .A10X import * diff --git a/miners/_types/whatsminer/M2X/M20S.py b/miners/_types/whatsminer/M2X/M20S.py new file mode 100644 index 00000000..20c5fffd --- /dev/null +++ b/miners/_types/whatsminer/M2X/M20S.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class M20S(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "M20S" + self.nominal_chips = 66 diff --git a/miners/_types/whatsminer/M2X/M20S_Plus.py b/miners/_types/whatsminer/M2X/M20S_Plus.py new file mode 100644 index 00000000..c6294d35 --- /dev/null +++ b/miners/_types/whatsminer/M2X/M20S_Plus.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class M20SPlus(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "M20S+" + self.nominal_chips = 66 diff --git a/miners/_types/whatsminer/M2X/M21.py b/miners/_types/whatsminer/M2X/M21.py new file mode 100644 index 00000000..dcff5b06 --- /dev/null +++ b/miners/_types/whatsminer/M2X/M21.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class M21(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "M21" + self.nominal_chips = 105 diff --git a/miners/_types/whatsminer/M2X/M21S.py b/miners/_types/whatsminer/M2X/M21S.py new file mode 100644 index 00000000..16cce782 --- /dev/null +++ b/miners/_types/whatsminer/M2X/M21S.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class M21S(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "M21S" + self.nominal_chips = 105 diff --git a/miners/_types/whatsminer/M2X/M21S_Plus.py b/miners/_types/whatsminer/M2X/M21S_Plus.py new file mode 100644 index 00000000..b0814e66 --- /dev/null +++ b/miners/_types/whatsminer/M2X/M21S_Plus.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class M21SPlus(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "M21S+" + self.nominal_chips = 105 diff --git a/miners/_types/whatsminer/M2X/__init__.py b/miners/_types/whatsminer/M2X/__init__.py new file mode 100644 index 00000000..46c9aca4 --- /dev/null +++ b/miners/_types/whatsminer/M2X/__init__.py @@ -0,0 +1,6 @@ +from .M20S import M20S +from .M20S_Plus import M20SPlus + +from .M21 import M21 +from .M21S import M21S +from .M21S_Plus import M21SPlus diff --git a/miners/_types/whatsminer/M3X/M30S.py b/miners/_types/whatsminer/M3X/M30S.py new file mode 100644 index 00000000..a0d5176a --- /dev/null +++ b/miners/_types/whatsminer/M3X/M30S.py @@ -0,0 +1,8 @@ +from miners import BaseMiner + + +class M30S(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "M30S" diff --git a/miners/_types/whatsminer/M3X/M30S_Plus.py b/miners/_types/whatsminer/M3X/M30S_Plus.py new file mode 100644 index 00000000..a1391dfb --- /dev/null +++ b/miners/_types/whatsminer/M3X/M30S_Plus.py @@ -0,0 +1,8 @@ +from miners import BaseMiner + + +class M30SPlus(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "M30S+" diff --git a/miners/_types/whatsminer/M3X/M30S_Plus_Plus.py b/miners/_types/whatsminer/M3X/M30S_Plus_Plus.py new file mode 100644 index 00000000..78ea87f3 --- /dev/null +++ b/miners/_types/whatsminer/M3X/M30S_Plus_Plus.py @@ -0,0 +1,8 @@ +from miners import BaseMiner + + +class M30SPlusPlus(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "M30S++" diff --git a/miners/_types/whatsminer/M3X/M31S.py b/miners/_types/whatsminer/M3X/M31S.py new file mode 100644 index 00000000..adc755a8 --- /dev/null +++ b/miners/_types/whatsminer/M3X/M31S.py @@ -0,0 +1,8 @@ +from miners import BaseMiner + + +class M31S(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "M31S" diff --git a/miners/_types/whatsminer/M3X/M31S_Plus.py b/miners/_types/whatsminer/M3X/M31S_Plus.py new file mode 100644 index 00000000..0fd51901 --- /dev/null +++ b/miners/_types/whatsminer/M3X/M31S_Plus.py @@ -0,0 +1,8 @@ +from miners import BaseMiner + + +class M31SPlus(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "M31S+" diff --git a/miners/_types/whatsminer/M3X/M32S.py b/miners/_types/whatsminer/M3X/M32S.py new file mode 100644 index 00000000..5b200dc2 --- /dev/null +++ b/miners/_types/whatsminer/M3X/M32S.py @@ -0,0 +1,9 @@ +from miners import BaseMiner + + +class M32S(BaseMiner): + def __init__(self, ip: str): + super().__init__() + self.ip = ip + self.model = "M32S" + self.nominal_chips = 78 diff --git a/miners/_types/whatsminer/M3X/__init__.py b/miners/_types/whatsminer/M3X/__init__.py new file mode 100644 index 00000000..b5a3cc9f --- /dev/null +++ b/miners/_types/whatsminer/M3X/__init__.py @@ -0,0 +1,8 @@ +from .M30S import M30S +from .M30S_Plus import M30SPlus +from .M30S_Plus_Plus import M30SPlusPlus + +from .M31S import M31S +from .M31S_Plus import M31SPlus + +from .M32S import M32S diff --git a/miners/_types/whatsminer/__init__.py b/miners/_types/whatsminer/__init__.py new file mode 100644 index 00000000..83439f1a --- /dev/null +++ b/miners/_types/whatsminer/__init__.py @@ -0,0 +1,2 @@ +from .M2X import * +from .M3X import * diff --git a/miners/antminer/bmminer/X17/S17.py b/miners/antminer/bmminer/X17/S17.py index 63d14b7c..8ba567d0 100644 --- a/miners/antminer/bmminer/X17/S17.py +++ b/miners/antminer/bmminer/X17/S17.py @@ -1,12 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import S17 -class BMMinerS17(BMMiner): +class BMMinerS17(BMMiner, S17): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BMMiner" - self.model = "S17" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BMMinerS17: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bmminer/X17/S17_Plus.py b/miners/antminer/bmminer/X17/S17_Plus.py index d272fdb9..6120a9f3 100644 --- a/miners/antminer/bmminer/X17/S17_Plus.py +++ b/miners/antminer/bmminer/X17/S17_Plus.py @@ -1,12 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import S17Plus -class BMMinerS17Plus(BMMiner): +class BMMinerS17Plus(BMMiner, S17Plus): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BMMiner" - self.model = "S17+" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BMMinerS17+: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bmminer/X17/S17_Pro.py b/miners/antminer/bmminer/X17/S17_Pro.py index 294c6562..932384af 100644 --- a/miners/antminer/bmminer/X17/S17_Pro.py +++ b/miners/antminer/bmminer/X17/S17_Pro.py @@ -1,12 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import S17Pro -class BMMinerS17Pro(BMMiner): +class BMMinerS17Pro(BMMiner, S17Pro): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BMMiner" - self.model = "S17 Pro" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BMMinerS17Pro: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bmminer/X17/S17e.py b/miners/antminer/bmminer/X17/S17e.py index ddb43e25..fb760874 100644 --- a/miners/antminer/bmminer/X17/S17e.py +++ b/miners/antminer/bmminer/X17/S17e.py @@ -1,12 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import S17e -class BMMinerS17e(BMMiner): +class BMMinerS17e(BMMiner, S17e): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BMMiner" - self.model = "S17e" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BMMinerS17e: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bmminer/X17/T17.py b/miners/antminer/bmminer/X17/T17.py index fcfd14f3..db6a6906 100644 --- a/miners/antminer/bmminer/X17/T17.py +++ b/miners/antminer/bmminer/X17/T17.py @@ -1,12 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import T17 -class BMMinerT17(BMMiner): +class BMMinerT17(BMMiner, T17): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BMMiner" - self.model = "T17" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BMMinerT17: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bmminer/X17/T17_Plus.py b/miners/antminer/bmminer/X17/T17_Plus.py index 31090c02..3d098b06 100644 --- a/miners/antminer/bmminer/X17/T17_Plus.py +++ b/miners/antminer/bmminer/X17/T17_Plus.py @@ -1,12 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import T17Plus -class BMMinerT17Plus(BMMiner): +class BMMinerT17Plus(BMMiner, T17Plus): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BMMiner" - self.model = "T17+" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BMMinerT17+: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bmminer/X17/T17e.py b/miners/antminer/bmminer/X17/T17e.py index c04c7431..ec84a145 100644 --- a/miners/antminer/bmminer/X17/T17e.py +++ b/miners/antminer/bmminer/X17/T17e.py @@ -1,12 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import T17e -class BMMinerT17e(BMMiner): +class BMMinerT17e(BMMiner, T17e): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BMMiner" - self.model = "T17e" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BMMinerT17e: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bmminer/X19/S19.py b/miners/antminer/bmminer/X19/S19.py index a27dc7ec..eeff4fe9 100644 --- a/miners/antminer/bmminer/X19/S19.py +++ b/miners/antminer/bmminer/X19/S19.py @@ -1,12 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import S19 -class BMMinerS19(BMMiner): +class BMMinerS19(BMMiner, S19): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BMMiner" - self.model = "S19" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"BMMinerS19: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bmminer/X19/S19_Pro.py b/miners/antminer/bmminer/X19/S19_Pro.py index fbbb8f5e..5ea71645 100644 --- a/miners/antminer/bmminer/X19/S19_Pro.py +++ b/miners/antminer/bmminer/X19/S19_Pro.py @@ -1,12 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import S19Pro -class BMMinerS19Pro(BMMiner): +class BMMinerS19Pro(BMMiner, S19Pro): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BMMiner" - self.model = "S19 Pro" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"BMMinerS19Pro: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bmminer/X19/S19j.py b/miners/antminer/bmminer/X19/S19j.py index fb0394de..a8494efd 100644 --- a/miners/antminer/bmminer/X19/S19j.py +++ b/miners/antminer/bmminer/X19/S19j.py @@ -1,12 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import S19j -class BMMinerS19j(BMMiner): +class BMMinerS19j(BMMiner, S19j): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BMMiner" - self.model = "S19j" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"BMMinerS19j: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bmminer/X19/S19j_Pro.py b/miners/antminer/bmminer/X19/S19j_Pro.py index 132fb9b9..c9747a56 100644 --- a/miners/antminer/bmminer/X19/S19j_Pro.py +++ b/miners/antminer/bmminer/X19/S19j_Pro.py @@ -1,12 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import S19jPro -class BMMinerS19jPro(BMMiner): +class BMMinerS19jPro(BMMiner, S19jPro): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BMMiner" - self.model = "S19j Pro" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"BMMinerS19jPro: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bmminer/X19/T19.py b/miners/antminer/bmminer/X19/T19.py index c78bc723..43b9b1cd 100644 --- a/miners/antminer/bmminer/X19/T19.py +++ b/miners/antminer/bmminer/X19/T19.py @@ -1,12 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import T19 -class BMMinerT19(BMMiner): +class BMMinerT19(BMMiner, T19): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BMMiner" - self.model = "T19" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"BMMinerT19: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bmminer/X9/S9.py b/miners/antminer/bmminer/X9/S9.py index 15fae1da..1a17ffa4 100644 --- a/miners/antminer/bmminer/X9/S9.py +++ b/miners/antminer/bmminer/X9/S9.py @@ -1,11 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import S9 -class BMMinerS9(BMMiner): +class BMMinerS9(BMMiner, S9): def __init__(self, ip: str) -> None: super().__init__(ip) - self.model = "S9" - self.api_type = "BMMiner" - - def __repr__(self) -> str: - return f"BMMinerS9: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bmminer/X9/T9.py b/miners/antminer/bmminer/X9/T9.py index b024ed94..46ad8c64 100644 --- a/miners/antminer/bmminer/X9/T9.py +++ b/miners/antminer/bmminer/X9/T9.py @@ -1,11 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import BMMiner +from miners._types import T9 -class BMMinerT9(BMMiner): +class BMMinerT9(BMMiner, T9): def __init__(self, ip: str) -> None: super().__init__(ip) - self.model = "T9" - self.api_type = "BMMiner" - - def __repr__(self) -> str: - return f"BMMinerT9: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bosminer/X17/S17.py b/miners/antminer/bosminer/X17/S17.py index dac96026..c4179ddc 100644 --- a/miners/antminer/bosminer/X17/S17.py +++ b/miners/antminer/bosminer/X17/S17.py @@ -1,12 +1,8 @@ -from miners.bosminer import BOSMiner +from miners._backends import BOSMiner +from miners._types import S17 -class BOSMinerS17(BOSMiner): +class BOSMinerS17(BOSMiner, S17): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BOSMiner" - self.model = "S17" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BOSMinerS17: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bosminer/X17/S17_Plus.py b/miners/antminer/bosminer/X17/S17_Plus.py index 8dfe3382..abbe51d4 100644 --- a/miners/antminer/bosminer/X17/S17_Plus.py +++ b/miners/antminer/bosminer/X17/S17_Plus.py @@ -1,12 +1,8 @@ -from miners.bosminer import BOSMiner +from miners._backends import BOSMiner +from miners._types import S17Plus -class BOSMinerS17Plus(BOSMiner): +class BOSMinerS17Plus(BOSMiner, S17Plus): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BOSMiner" - self.model = "S17+" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BOSMinerS17+: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bosminer/X17/S17_Pro.py b/miners/antminer/bosminer/X17/S17_Pro.py index 7dadc028..92995045 100644 --- a/miners/antminer/bosminer/X17/S17_Pro.py +++ b/miners/antminer/bosminer/X17/S17_Pro.py @@ -1,12 +1,8 @@ -from miners.bosminer import BOSMiner +from miners._backends import BOSMiner +from miners._types import S17Pro -class BOSMinerS17Pro(BOSMiner): +class BOSMinerS17Pro(BOSMiner, S17Pro): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BOSMiner" - self.model = "S17 Pro" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BOSMinerS17Pro: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bosminer/X17/S17e.py b/miners/antminer/bosminer/X17/S17e.py index 0e130031..61a487f2 100644 --- a/miners/antminer/bosminer/X17/S17e.py +++ b/miners/antminer/bosminer/X17/S17e.py @@ -1,12 +1,8 @@ -from miners.bosminer import BOSMiner +from miners._backends import BOSMiner +from miners._types import S17e -class BOSMinerS17e(BOSMiner): +class BOSMinerS17e(BOSMiner, S17e): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BOSMiner" - self.model = "S17e" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BOSMinerS17e: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bosminer/X17/T17.py b/miners/antminer/bosminer/X17/T17.py index 4c3830bd..b5aa4f7a 100644 --- a/miners/antminer/bosminer/X17/T17.py +++ b/miners/antminer/bosminer/X17/T17.py @@ -1,12 +1,8 @@ -from miners.bosminer import BOSMiner +from miners._backends import BOSMiner +from miners._types import T17 -class BOSMinerT17(BOSMiner): +class BOSMinerT17(BOSMiner, T17): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BOSMiner" - self.model = "T17" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BOSMinerT17: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bosminer/X17/T17_Plus.py b/miners/antminer/bosminer/X17/T17_Plus.py index 61f5bfe7..9452d858 100644 --- a/miners/antminer/bosminer/X17/T17_Plus.py +++ b/miners/antminer/bosminer/X17/T17_Plus.py @@ -1,12 +1,8 @@ -from miners.bosminer import BOSMiner +from miners._backends import BOSMiner +from miners._types import T17Plus -class BOSMinerT17Plus(BOSMiner): +class BOSMinerT17Plus(BOSMiner, T17Plus): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BOSMiner" - self.model = "T17+" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BOSMinerT17+: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bosminer/X17/T17e.py b/miners/antminer/bosminer/X17/T17e.py index 625e4d11..8f092c2e 100644 --- a/miners/antminer/bosminer/X17/T17e.py +++ b/miners/antminer/bosminer/X17/T17e.py @@ -1,12 +1,8 @@ -from miners.bosminer import BOSMiner +from miners._backends import BOSMiner +from miners._types import T17e -class BOSMinerT17e(BOSMiner): +class BOSMinerT17e(BOSMiner, T17e): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BOSMiner" - self.model = "T17e" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"BOSMinerT17e: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bosminer/X19/S19.py b/miners/antminer/bosminer/X19/S19.py index 02e78f39..be242bf4 100644 --- a/miners/antminer/bosminer/X19/S19.py +++ b/miners/antminer/bosminer/X19/S19.py @@ -1,12 +1,8 @@ -from miners.bosminer import BOSMiner +from miners._backends import BOSMiner +from miners._types import S19 -class BOSMinerS19(BOSMiner): +class BOSMinerS19(BOSMiner, S19): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BOSMiner" - self.model = "S19" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"BOSMinerS19: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bosminer/X19/S19_Pro.py b/miners/antminer/bosminer/X19/S19_Pro.py index 010a0d3c..1641bc37 100644 --- a/miners/antminer/bosminer/X19/S19_Pro.py +++ b/miners/antminer/bosminer/X19/S19_Pro.py @@ -1,12 +1,8 @@ -from miners.bosminer import BOSMiner +from miners._backends import BOSMiner +from miners._types import S19Pro -class BOSMinerS19Pro(BOSMiner): +class BOSMinerS19Pro(BOSMiner, S19Pro): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BOSMiner" - self.model = "S19 Pro" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"BOSMinerS19Pro: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bosminer/X19/S19j.py b/miners/antminer/bosminer/X19/S19j.py index aa7d5cd0..0fb87aab 100644 --- a/miners/antminer/bosminer/X19/S19j.py +++ b/miners/antminer/bosminer/X19/S19j.py @@ -1,12 +1,8 @@ -from miners.bosminer import BOSMiner +from miners._backends import BOSMiner +from miners._types import S19j -class BOSMinerS19j(BOSMiner): +class BOSMinerS19j(BOSMiner, S19j): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BOSMiner" - self.model = "S19j" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"BOSMinerS19j: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bosminer/X19/S19j_Pro.py b/miners/antminer/bosminer/X19/S19j_Pro.py index bf13cf2f..c974be72 100644 --- a/miners/antminer/bosminer/X19/S19j_Pro.py +++ b/miners/antminer/bosminer/X19/S19j_Pro.py @@ -1,12 +1,8 @@ -from miners.bosminer import BOSMiner +from miners._backends import BOSMiner +from miners._types import S19jPro -class BOSMinerS19jPro(BOSMiner): +class BOSMinerS19jPro(BOSMiner, S19jPro): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BOSMiner" - self.model = "S19j Pro" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"BOSMinerS19jPro: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bosminer/X19/T19.py b/miners/antminer/bosminer/X19/T19.py index da7d26c7..7ba233b6 100644 --- a/miners/antminer/bosminer/X19/T19.py +++ b/miners/antminer/bosminer/X19/T19.py @@ -1,12 +1,8 @@ -from miners.bosminer import BOSMiner +from miners._backends import BOSMiner +from miners._types import T19 -class BOSMinerT19(BOSMiner): +class BOSMinerT19(BOSMiner, T19): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "BOSMiner" - self.model = "T19" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"BOSMinerT19: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/bosminer/X9/S9.py b/miners/antminer/bosminer/X9/S9.py index e69ce584..2a760467 100644 --- a/miners/antminer/bosminer/X9/S9.py +++ b/miners/antminer/bosminer/X9/S9.py @@ -1,11 +1,8 @@ -from miners.bosminer import BOSMiner +from miners._backends import BOSMiner +from miners._types import S9 -class BOSMinerS9(BOSMiner): +class BOSMinerS9(BOSMiner, S9): def __init__(self, ip: str) -> None: super().__init__(ip) - self.model = "S9" - self.api_type = "BOSMiner" - - def __repr__(self) -> str: - return f"BOSMinerS9: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X17/S17.py b/miners/antminer/cgminer/X17/S17.py index e01260c5..b9c1147a 100644 --- a/miners/antminer/cgminer/X17/S17.py +++ b/miners/antminer/cgminer/X17/S17.py @@ -1,12 +1,8 @@ -from miners.cgminer import CGMiner +from miners._backends import CGMiner +from miners._types import S17 -class CGMinerS17(CGMiner): +class CGMinerS17(CGMiner, S17): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "CGMiner" - self.model = "S17" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"CGMinerS17: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X17/S17_Plus.py b/miners/antminer/cgminer/X17/S17_Plus.py index 29c45c24..20bec5d5 100644 --- a/miners/antminer/cgminer/X17/S17_Plus.py +++ b/miners/antminer/cgminer/X17/S17_Plus.py @@ -1,12 +1,8 @@ -from miners.cgminer import CGMiner +from miners._backends import CGMiner +from miners._types import S17Plus -class CGMinerS17Plus(CGMiner): +class CGMinerS17Plus(CGMiner, S17Plus): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "CGMiner" - self.model = "S17+" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"CGMinerS17+: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X17/S17_Pro.py b/miners/antminer/cgminer/X17/S17_Pro.py index 9aaf469d..28076822 100644 --- a/miners/antminer/cgminer/X17/S17_Pro.py +++ b/miners/antminer/cgminer/X17/S17_Pro.py @@ -1,12 +1,8 @@ -from miners.cgminer import CGMiner +from miners._backends import CGMiner +from miners._types import S17Pro -class CGMinerS17Pro(CGMiner): +class CGMinerS17Pro(CGMiner, S17Pro): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "CGMiner" - self.model = "S17 Pro" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"CGMinerS17Pro: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X17/S17e.py b/miners/antminer/cgminer/X17/S17e.py index 2d370c80..a5f9bf62 100644 --- a/miners/antminer/cgminer/X17/S17e.py +++ b/miners/antminer/cgminer/X17/S17e.py @@ -1,12 +1,8 @@ -from miners.cgminer import CGMiner +from miners._backends import CGMiner +from miners._types import S17e -class CGMinerS17e(CGMiner): +class CGMinerS17e(CGMiner, S17e): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "CGMiner" - self.model = "S17e" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"CGMinerS17e: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X17/T17.py b/miners/antminer/cgminer/X17/T17.py index efc8e375..9c908b64 100644 --- a/miners/antminer/cgminer/X17/T17.py +++ b/miners/antminer/cgminer/X17/T17.py @@ -1,12 +1,8 @@ -from miners.cgminer import CGMiner +from miners._backends import CGMiner +from miners._types import T17 -class CGMinerT17(CGMiner): +class CGMinerT17(CGMiner, T17): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "CGMiner" - self.model = "T17" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"CGMinerT17: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X17/T17_Plus.py b/miners/antminer/cgminer/X17/T17_Plus.py index 3ac95dca..14a22cb9 100644 --- a/miners/antminer/cgminer/X17/T17_Plus.py +++ b/miners/antminer/cgminer/X17/T17_Plus.py @@ -1,12 +1,8 @@ -from miners.cgminer import CGMiner +from miners._backends import CGMiner +from miners._types import T17Plus -class CGMinerT17Plus(CGMiner): +class CGMinerT17Plus(CGMiner, T17Plus): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "CGMiner" - self.model = "T17+" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"CGMinerT17+: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X17/T17e.py b/miners/antminer/cgminer/X17/T17e.py index c975bc5b..1d63a57e 100644 --- a/miners/antminer/cgminer/X17/T17e.py +++ b/miners/antminer/cgminer/X17/T17e.py @@ -1,12 +1,8 @@ -from miners.cgminer import CGMiner +from miners._backends import CGMiner +from miners._types import T17e -class CGMinerT17e(CGMiner): +class CGMinerT17e(CGMiner, T17e): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "CGMiner" - self.model = "T17e" - self.nominal_chips = 65 - - def __repr__(self) -> str: - return f"CGMinerT17e: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X19/S19.py b/miners/antminer/cgminer/X19/S19.py index 3ab0b297..823bf775 100644 --- a/miners/antminer/cgminer/X19/S19.py +++ b/miners/antminer/cgminer/X19/S19.py @@ -1,12 +1,8 @@ -from miners.cgminer import CGMiner +from miners._backends import CGMiner +from miners._types import S19 -class CGMinerS19(CGMiner): +class CGMinerS19(CGMiner, S19): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "CGMiner" - self.model = "S19" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"CGMinerS19: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X19/S19_Pro.py b/miners/antminer/cgminer/X19/S19_Pro.py index f4643f73..814f3021 100644 --- a/miners/antminer/cgminer/X19/S19_Pro.py +++ b/miners/antminer/cgminer/X19/S19_Pro.py @@ -1,12 +1,8 @@ -from miners.cgminer import CGMiner +from miners._backends import CGMiner +from miners._types import S19Pro -class CGMinerS19Pro(CGMiner): +class CGMinerS19Pro(CGMiner, S19Pro): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "CGMiner" - self.model = "S19 Pro" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"CGMinerS19Pro: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X19/S19j.py b/miners/antminer/cgminer/X19/S19j.py index 85791922..ec4ec9f9 100644 --- a/miners/antminer/cgminer/X19/S19j.py +++ b/miners/antminer/cgminer/X19/S19j.py @@ -1,12 +1,8 @@ -from miners.cgminer import CGMiner +from miners._backends import CGMiner +from miners._types import S19j -class CGMinerS19j(CGMiner): +class CGMinerS19j(CGMiner, S19j): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "CGMiner" - self.model = "S19j" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"CGMinerS19j: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X19/S19j_Pro.py b/miners/antminer/cgminer/X19/S19j_Pro.py index 3161b47e..eeea0081 100644 --- a/miners/antminer/cgminer/X19/S19j_Pro.py +++ b/miners/antminer/cgminer/X19/S19j_Pro.py @@ -1,12 +1,8 @@ -from miners.cgminer import CGMiner +from miners._backends import CGMiner +from miners._types import S19jPro -class CGMinerS19jPro(CGMiner): +class CGMinerS19jPro(CGMiner, S19jPro): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "CGMiner" - self.model = "S19j Pro" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"CGMinerS19jPro: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X19/T19.py b/miners/antminer/cgminer/X19/T19.py index b383626c..fbebe6ec 100644 --- a/miners/antminer/cgminer/X19/T19.py +++ b/miners/antminer/cgminer/X19/T19.py @@ -1,12 +1,8 @@ -from miners.cgminer import CGMiner +from miners._backends import CGMiner +from miners._types import T19 -class CGMinerT19(CGMiner): +class CGMinerT19(CGMiner, T19): def __init__(self, ip: str) -> None: super().__init__(ip) - self.api_type = "CGMiner" - self.model = "T19" - self.nominal_chips = 114 - - def __repr__(self) -> str: - return f"CGMinerT19: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X9/S9.py b/miners/antminer/cgminer/X9/S9.py index 33d8f988..4e1c7b9f 100644 --- a/miners/antminer/cgminer/X9/S9.py +++ b/miners/antminer/cgminer/X9/S9.py @@ -1,11 +1,8 @@ -from miners.cgminer import CGMiner +from miners._backends import CGMiner +from miners._types import S9 -class CGMinerS9(CGMiner): +class CGMinerS9(CGMiner, S9): def __init__(self, ip: str) -> None: super().__init__(ip) - self.model = "S9" - self.api_type = "CGMiner" - - def __repr__(self) -> str: - return f"CGMinerS9: {str(self.ip)}" + self.ip = ip diff --git a/miners/antminer/cgminer/X9/T9.py b/miners/antminer/cgminer/X9/T9.py index 8502629d..48a394f3 100644 --- a/miners/antminer/cgminer/X9/T9.py +++ b/miners/antminer/cgminer/X9/T9.py @@ -1,4 +1,4 @@ -from miners.cgminer import CGMiner +from miners._backends.cgminer import CGMiner class CGMinerT9(CGMiner): diff --git a/miners/antminer/cgminer/X9/__init__.py b/miners/antminer/cgminer/X9/__init__.py index fb65d2b4..61ee2866 100644 --- a/miners/antminer/cgminer/X9/__init__.py +++ b/miners/antminer/cgminer/X9/__init__.py @@ -1,2 +1 @@ from .S9 import CGMinerS9 -from .T9 import CGMinerT9 diff --git a/miners/antminer/hiveon/X9/T9.py b/miners/antminer/hiveon/X9/T9.py index 8c0ca7bf..60c35dcc 100644 --- a/miners/antminer/hiveon/X9/T9.py +++ b/miners/antminer/hiveon/X9/T9.py @@ -1,49 +1,8 @@ -from miners.bmminer import BMMiner +from miners._backends import Hiveon +from miners._types import T9 -class HiveonT9(BMMiner): +class HiveonT9(Hiveon, T9): def __init__(self, ip: str) -> None: super().__init__(ip) - self.model = "T9" - self.api_type = "Hiveon" - self.nominal_chips = 54 - - def __repr__(self) -> str: - return f"HiveonT9: {str(self.ip)}" - - async def get_board_info(self) -> dict: - """Gets data on each board and chain in the miner.""" - board_stats = await self.api.stats() - stats = board_stats["STATS"][1] - boards = {} - board_chains = {0: [2, 9, 10], 1: [3, 11, 12], 2: [4, 13, 14]} - for idx, board in enumerate(board_chains): - boards[board] = [] - for chain in board_chains[board]: - count = stats[f"chain_acn{chain}"] - chips = stats[f"chain_acs{chain}"].replace(" ", "") - if not count == 18 or "x" in chips: - nominal = False - else: - nominal = True - boards[board].append( - { - "chain": chain, - "chip_count": count, - "chip_status": chips, - "nominal": nominal, - } - ) - return boards - - async def get_bad_boards(self) -> dict: - """Checks for and provides list of non working boards.""" - boards = await self.get_board_info() - bad_boards = {} - for board in boards.keys(): - for chain in boards[board]: - if not chain["chip_count"] == 18 or "x" in chain["chip_status"]: - if board not in bad_boards.keys(): - bad_boards[board] = [] - bad_boards[board].append(chain) - return bad_boards + self.ip = ip diff --git a/miners/avalonminer/Avalon10/__init__.py b/miners/avalonminer/Avalon10/__init__.py deleted file mode 100644 index 9cf5f3fe..00000000 --- a/miners/avalonminer/Avalon10/__init__.py +++ /dev/null @@ -1,61 +0,0 @@ -from miners.cgminer import CGMiner -import logging - - -class CGMinerAvalon10(CGMiner): - def __init__(self, ip: str) -> None: - super().__init__(ip) - self.model = "Avalon 10" - self.api_type = "CGMiner" - self.nominal_chips = 114 - - async def get_hostname(self): - try: - devdetails = await self.api.devdetails() - if devdetails: - if len(devdetails.get("DEVDETAILS")) > 0: - if "Name" in devdetails["DEVDETAILS"][0]: - host = devdetails["DEVDETAILS"][0]["Name"] - logging.debug(f"Found hostname for {self.ip}: {host}") - return host - except Exception as e: - logging.warning(f"Failed to get hostname for miner: {self}") - return "?" - logging.warning(f"Failed to get hostname for miner: {self}") - return "?" - - async def get_board_info(self): - boards_chips = 0 - logging.debug(f"{self}: Getting board info.") - stats = await self.api.stats() - if not stats.get("STATS") and not stats.get("STATS") == []: - print("stats error", stats) - return {0: [], 1: [], 2: []} - stats = stats["STATS"][0] - for key in stats.keys(): - if key.startswith("MM") and not stats[key] == 1: - data = stats[key] - for line in data.split("]"): - if "TA[" in line: - total_chips = line.replace("TA[", "") - boards_chips = round(int(total_chips)/3) - boards = {} - for board in [0, 1, 2]: - if not boards_chips == self.nominal_chips: - nominal = False - else: - nominal = True - boards[board] = [] - boards[board].append({ - "chain": board, - "chip_count": boards_chips, - "chip_status": "o" * boards_chips, - "nominal": nominal, - }) - return boards - - - - - - diff --git a/miners/avalonminer/Avalon8/__init__.py b/miners/avalonminer/Avalon8/__init__.py deleted file mode 100644 index b1952931..00000000 --- a/miners/avalonminer/Avalon8/__init__.py +++ /dev/null @@ -1,177 +0,0 @@ -from miners.cgminer import CGMiner -import re - - -class CGMinerAvalon8(CGMiner): - def __init__(self, ip: str) -> None: - super().__init__(ip) - self.model = "Avalon 8" - self.api_type = "CGMiner" - self.pattern = re.compile( - r"Ver\[(?P[-0-9A-Fa-f+]+)\]\s" - "DNA\[(?P[0-9A-Fa-f]+)\]\s" - "Elapsed\[(?P[-0-9]+)\]\s" - "MW\[(?P[-\s0-9]+)\]\s" - "LW\[(?P[-0-9]+)\]\s" - "MH\[(?P[-\s0-9]+)\]\s" - "HW\[(?P[-0-9]+)\]\s" - "Temp\[(?P[0-9]+)\]\s" - "TMax\[(?P[0-9]+)\]\s" - "Fan\[(?P[0-9]+)\]\s" - "FanR\[(?P[0-9]+)%\]\s" - "Vi\[(?P[-\s0-9]+)\]\s" - "Vo\[(?P[-\s0-9]+)\]\s" - "(" - "PLL0\[(?P[-\s0-9]+)\]\s" - "PLL1\[(?P[-\s0-9]+)\]\s" - "PLL2\[(?P[-\s0-9]+)\]\s" - "PLL3\[(?P[-\s0-9]+)\]\s" - ")?" - "GHSmm\[(?P[-.0-9]+)\]\s" - "WU\[(?P[-.0-9]+)\]\s" - "Freq\[(?P[.0-9]+)\]\s" - "PG\[(?P[0-9]+)\]\s" - "Led\[(?P0|1)\]\s" - "MW0\[(?P[0-9\s]+)\]\s" - "MW1\[(?P[0-9\s]+)\]\s" - "MW2\[(?P[0-9\s]+)\]\s" - "MW3\[(?P[0-9\s]+)\]\s" - "TA\[(?P[0-9]+)\]\s" - "ECHU\[(?P[0-9\s]+)\]\s" - "ECMM\[(?P[0-9]+)\]\s.*" - "FAC0\[(?P[-0-9]+)\]\s" - "OC\[(?P[0-9]+)\]\s" - "SF0\[(?P[-\s0-9]+)\]\s" - "SF1\[(?P[-\s0-9]+)\]\s" - "SF2\[(?P[-\s0-9]+)\]\s" - "SF3\[(?P[-\s0-9]+)\]\s" - "PMUV\[(?P[-\s\S*]+)\]\s" - "PVT_T0\[(?P[-0-9\s]+)\]\s" - "PVT_T1\[(?P[-0-9\s]+)\]\s" - "PVT_T2\[(?P[-0-9\s]+)\]\s" - "PVT_T3\[(?P[-0-9\s]+)\]\s" - "PVT_V0_0\[(?P[-0-9\s]+)\]\s" - "PVT_V0_1\[(?P[-0-9\s]+)\]\s" - "PVT_V0_2\[(?P[-0-9\s]+)\]\s" - "PVT_V0_3\[(?P[-0-9\s]+)\]\s" - "PVT_V0_4\[(?P[-0-9\s]+)\]\s" - "PVT_V0_5\[(?P[-0-9\s]+)\]\s" - "PVT_V0_6\[(?P[-0-9\s]+)\]\s" - "PVT_V0_7\[(?P[-0-9\s]+)\]\s" - "PVT_V0_8\[(?P[-0-9\s]+)\]\s" - "PVT_V0_9\[(?P[-0-9\s]+)\]\s" - "PVT_V0_10\[(?P[-0-9\s]+)\]\s" - "PVT_V0_11\[(?P[-0-9\s]+)\]\s" - "PVT_V0_12\[(?P[-0-9\s]+)\]\s" - "PVT_V0_13\[(?P[-0-9\s]+)\]\s" - "PVT_V0_14\[(?P[-0-9\s]+)\]\s" - "PVT_V0_15\[(?P[-0-9\s]+)\]\s" - "PVT_V0_16\[(?P[-0-9\s]+)\]\s" - "PVT_V0_17\[(?P[-0-9\s]+)\]\s" - "PVT_V0_18\[(?P[-0-9\s]+)\]\s" - "PVT_V0_19\[(?P[-0-9\s]+)\]\s" - "PVT_V0_20\[(?P[-0-9\s]+)\]\s" - "PVT_V0_21\[(?P[-0-9\s]+)\]\s" - "PVT_V0_22\[(?P[-0-9\s]+)\]\s" - "PVT_V0_23\[(?P[-0-9\s]+)\]\s" - "PVT_V0_24\[(?P[-0-9\s]+)\]\s" - "PVT_V0_25\[(?P[-0-9\s]+)\]\s" - "PVT_V1_0\[(?P[-0-9\s]+)\]\s" - "PVT_V1_1\[(?P[-0-9\s]+)\]\s" - "PVT_V1_2\[(?P[-0-9\s]+)\]\s" - "PVT_V1_3\[(?P[-0-9\s]+)\]\s" - "PVT_V1_4\[(?P[-0-9\s]+)\]\s" - "PVT_V1_5\[(?P[-0-9\s]+)\]\s" - "PVT_V1_6\[(?P[-0-9\s]+)\]\s" - "PVT_V1_7\[(?P[-0-9\s]+)\]\s" - "PVT_V1_8\[(?P[-0-9\s]+)\]\s" - "PVT_V1_9\[(?P[-0-9\s]+)\]\s" - "PVT_V1_10\[(?P[-0-9\s]+)\]\s" - "PVT_V1_11\[(?P[-0-9\s]+)\]\s" - "PVT_V1_12\[(?P[-0-9\s]+)\]\s" - "PVT_V1_13\[(?P[-0-9\s]+)\]\s" - "PVT_V1_14\[(?P[-0-9\s]+)\]\s" - "PVT_V1_15\[(?P[-0-9\s]+)\]\s" - "PVT_V1_16\[(?P[-0-9\s]+)\]\s" - "PVT_V1_17\[(?P[-0-9\s]+)\]\s" - "PVT_V1_18\[(?P[-0-9\s]+)\]\s" - "PVT_V1_19\[(?P[-0-9\s]+)\]\s" - "PVT_V1_20\[(?P[-0-9\s]+)\]\s" - "PVT_V1_21\[(?P[-0-9\s]+)\]\s" - "PVT_V1_22\[(?P[-0-9\s]+)\]\s" - "PVT_V1_23\[(?P[-0-9\s]+)\]\s" - "PVT_V1_24\[(?P[-0-9\s]+)\]\s" - "PVT_V1_25\[(?P[-0-9\s]+)\]\s" - "PVT_V2_0\[(?P[-0-9\s]+)\]\s" - "PVT_V2_1\[(?P[-0-9\s]+)\]\s" - "PVT_V2_2\[(?P[-0-9\s]+)\]\s" - "PVT_V2_3\[(?P[-0-9\s]+)\]\s" - "PVT_V2_4\[(?P[-0-9\s]+)\]\s" - "PVT_V2_5\[(?P[-0-9\s]+)\]\s" - "PVT_V2_6\[(?P[-0-9\s]+)\]\s" - "PVT_V2_7\[(?P[-0-9\s]+)\]\s" - "PVT_V2_8\[(?P[-0-9\s]+)\]\s" - "PVT_V2_9\[(?P[-0-9\s]+)\]\s" - "PVT_V2_10\[(?P[-0-9\s]+)\]\s" - "PVT_V2_11\[(?P[-0-9\s]+)\]\s" - "PVT_V2_12\[(?P[-0-9\s]+)\]\s" - "PVT_V2_13\[(?P[-0-9\s]+)\]\s" - "PVT_V2_14\[(?P[-0-9\s]+)\]\s" - "PVT_V2_15\[(?P[-0-9\s]+)\]\s" - "PVT_V2_16\[(?P[-0-9\s]+)\]\s" - "PVT_V2_17\[(?P[-0-9\s]+)\]\s" - "PVT_V2_18\[(?P[-0-9\s]+)\]\s" - "PVT_V2_19\[(?P[-0-9\s]+)\]\s" - "PVT_V2_20\[(?P[-0-9\s]+)\]\s" - "PVT_V2_21\[(?P[-0-9\s]+)\]\s" - "PVT_V2_22\[(?P[-0-9\s]+)\]\s" - "PVT_V2_23\[(?P[-0-9\s]+)\]\s" - "PVT_V2_24\[(?P[-0-9\s]+)\]\s" - "PVT_V2_25\[(?P[-0-9\s]+)\]\s" - "PVT_V3_0\[(?P[-0-9\s]+)\]\s" - "PVT_V3_1\[(?P[-0-9\s]+)\]\s" - "PVT_V3_2\[(?P[-0-9\s]+)\]\s" - "PVT_V3_3\[(?P[-0-9\s]+)\]\s" - "PVT_V3_4\[(?P[-0-9\s]+)\]\s" - "PVT_V3_5\[(?P[-0-9\s]+)\]\s" - "PVT_V3_6\[(?P[-0-9\s]+)\]\s" - "PVT_V3_7\[(?P[-0-9\s]+)\]\s" - "PVT_V3_8\[(?P[-0-9\s]+)\]\s" - "PVT_V3_9\[(?P[-0-9\s]+)\]\s" - "PVT_V3_10\[(?P[-0-9\s]+)\]\s" - "PVT_V3_11\[(?P[-0-9\s]+)\]\s" - "PVT_V3_12\[(?P[-0-9\s]+)\]\s" - "PVT_V3_13\[(?P[-0-9\s]+)\]\s" - "PVT_V3_14\[(?P[-0-9\s]+)\]\s" - "PVT_V3_15\[(?P[-0-9\s]+)\]\s" - "PVT_V3_16\[(?P[-0-9\s]+)\]\s" - "PVT_V3_17\[(?P[-0-9\s]+)\]\s" - "PVT_V3_18\[(?P[-0-9\s]+)\]\s" - "PVT_V3_19\[(?P[-0-9\s]+)\]\s" - "PVT_V3_20\[(?P[-0-9\s]+)\]\s" - "PVT_V3_21\[(?P[-0-9\s]+)\]\s" - "PVT_V3_22\[(?P[-0-9\s]+)\]\s" - "PVT_V3_23\[(?P[-0-9\s]+)\]\s" - "PVT_V3_24\[(?P[-0-9\s]+)\]\s" - "PVT_V3_25\[(?P[-0-9\s]+)\]\s" - "FM\[(?P[0-9]+)\]\s" - "CRC\[(?P[0-9\s]+)\]", - re.X, - ) - - def __repr__(self) -> str: - return f"CGMinerAvalon8: {str(self.ip)}" - - def parse_estats(self, estats): - for estat in estats: - for key in estat: - if key[:5] == "MM ID": - self._parse_estat(estat, key) - - def _parse_estat(self, estat, key): - module = estat[key] - module_info = re.match(self.pattern, module) - if not module_info: - return None - module_info = module_info.groupdict() - print(module_info) diff --git a/miners/avalonminer/__init__.py b/miners/avalonminer/__init__.py index 6392dbe7..12ec5979 100644 --- a/miners/avalonminer/__init__.py +++ b/miners/avalonminer/__init__.py @@ -1,11 +1 @@ -from miners.cgminer import CGMiner - - -class CGMinerAvalon(CGMiner): - def __init__(self, ip: str) -> None: - super().__init__(ip) - self.model = "Avalon" - self.api_type = "CGMiner" - - def __repr__(self) -> str: - return f"CGMinerAvalon: {str(self.ip)}" +from .cgminer import * diff --git a/miners/avalonminer/cgminer/A10X/A1047.py b/miners/avalonminer/cgminer/A10X/A1047.py new file mode 100644 index 00000000..c57aa7db --- /dev/null +++ b/miners/avalonminer/cgminer/A10X/A1047.py @@ -0,0 +1,8 @@ +from miners._backends import CGMiner +from miners._types import Avalon1047 + + +class CGMinerAvalon1047(CGMiner, Avalon1047): + def __init__(self, ip: str) -> None: + super().__init__(ip) + self.ip = ip diff --git a/miners/avalonminer/cgminer/A10X/A1066.py b/miners/avalonminer/cgminer/A10X/A1066.py new file mode 100644 index 00000000..f0babbaa --- /dev/null +++ b/miners/avalonminer/cgminer/A10X/A1066.py @@ -0,0 +1,8 @@ +from miners._backends import CGMiner +from miners._types import Avalon1066 + + +class CGMinerAvalon1066(CGMiner, Avalon1066): + def __init__(self, ip: str) -> None: + super().__init__(ip) + self.ip = ip diff --git a/miners/avalonminer/cgminer/A10X/__init__.py b/miners/avalonminer/cgminer/A10X/__init__.py new file mode 100644 index 00000000..b1a8ef7e --- /dev/null +++ b/miners/avalonminer/cgminer/A10X/__init__.py @@ -0,0 +1,2 @@ +from .A1047 import CGMinerAvalon1047 +from .A1066 import CGMinerAvalon1066 diff --git a/miners/avalonminer/cgminer/A8X/A821.py b/miners/avalonminer/cgminer/A8X/A821.py new file mode 100644 index 00000000..afe17dec --- /dev/null +++ b/miners/avalonminer/cgminer/A8X/A821.py @@ -0,0 +1,8 @@ +from miners._backends import CGMiner +from miners._types import Avalon821 + + +class CGMinerAvalon821(CGMiner, Avalon821): + def __init__(self, ip: str) -> None: + super().__init__(ip) + self.ip = ip diff --git a/miners/avalonminer/cgminer/A8X/A841.py b/miners/avalonminer/cgminer/A8X/A841.py new file mode 100644 index 00000000..4ba357d5 --- /dev/null +++ b/miners/avalonminer/cgminer/A8X/A841.py @@ -0,0 +1,8 @@ +from miners._backends import CGMiner +from miners._types import Avalon841 + + +class CGMinerAvalon841(CGMiner, Avalon841): + def __init__(self, ip: str) -> None: + super().__init__(ip) + self.ip = ip diff --git a/miners/avalonminer/cgminer/A8X/__init__.py b/miners/avalonminer/cgminer/A8X/__init__.py new file mode 100644 index 00000000..3708d2f7 --- /dev/null +++ b/miners/avalonminer/cgminer/A8X/__init__.py @@ -0,0 +1,2 @@ +from .A821 import CGMinerAvalon821 +from .A841 import CGMinerAvalon841 diff --git a/miners/avalonminer/cgminer/__init__.py b/miners/avalonminer/cgminer/__init__.py new file mode 100644 index 00000000..8e8f61d3 --- /dev/null +++ b/miners/avalonminer/cgminer/__init__.py @@ -0,0 +1,2 @@ +from .A8X import * +from .A10X import * diff --git a/miners/miner_factory.py b/miners/miner_factory.py index 57abae5d..fbf3cf5c 100644 --- a/miners/miner_factory.py +++ b/miners/miner_factory.py @@ -1,12 +1,10 @@ from miners.antminer import * from miners.whatsminer import * +from miners.avalonminer import * -from miners.avalonminer.Avalon8 import CGMinerAvalon8 -from miners.avalonminer.Avalon10 import CGMinerAvalon10 - -from miners.cgminer import CGMiner -from miners.bmminer import BMMiner -from miners.bosminer import BOSMiner +from miners._backends.cgminer import CGMiner +from miners._backends.bmminer import BMMiner +from miners._backends.bosminer import BOSMiner from miners.unknown import UnknownMiner @@ -223,16 +221,15 @@ class MinerFactory(metaclass=Singleton): # Avalonminers if "avalon" in model: if model == "avalon10": - miner = CGMinerAvalon10(str(ip)) + miner = CGMinerAvalon1066(str(ip)) else: - miner = CGMinerAvalon8(str(ip)) + miner = CGMinerAvalon821(str(ip)) else: if model not in MINER_CLASSES.keys(): miner = UnknownMiner(str(ip)) return miner if api not in MINER_CLASSES[model].keys(): api = "Default" - miner = MINER_CLASSES[model][api](str(ip)) # if we cant find a model, check if we found the API diff --git a/miners/unknown.py b/miners/unknown.py index 2395c33d..c9ca4ebd 100644 --- a/miners/unknown.py +++ b/miners/unknown.py @@ -4,8 +4,10 @@ from miners import BaseMiner class UnknownMiner(BaseMiner): def __init__(self, ip: str) -> None: - api = UnknownAPI(ip) - super().__init__(ip, api) + super().__init__() + self.ip = ip + self.api = UnknownAPI(ip) + self.model = "Unknown" def __repr__(self) -> str: return f"Unknown: {str(self.ip)}" diff --git a/miners/whatsminer/btminer/M2X/M20S.py b/miners/whatsminer/btminer/M2X/M20S.py index ad81d6fb..55ba0af2 100644 --- a/miners/whatsminer/btminer/M2X/M20S.py +++ b/miners/whatsminer/btminer/M2X/M20S.py @@ -1,10 +1,8 @@ -from miners.btminer import BTMiner +from miners._backends import BTMiner +from miners._types import M20S -class BTMinerM20S(BTMiner): +class BTMinerM20S(BTMiner, M20S): def __init__(self, ip: str) -> None: super().__init__(ip) - self.nominal_chips = 66 - - def __repr__(self) -> str: - return f"M20S - BTMiner: {str(self.ip)}" + self.ip = ip diff --git a/miners/whatsminer/btminer/M2X/M20S_Plus.py b/miners/whatsminer/btminer/M2X/M20S_Plus.py index 6a14f2a0..3e3a206e 100644 --- a/miners/whatsminer/btminer/M2X/M20S_Plus.py +++ b/miners/whatsminer/btminer/M2X/M20S_Plus.py @@ -1,10 +1,8 @@ -from miners.btminer import BTMiner +from miners._backends import BTMiner +from miners._types import M20SPlus -class BTMinerM20SPlus(BTMiner): +class BTMinerM20SPlus(BTMiner, M20SPlus): def __init__(self, ip: str) -> None: super().__init__(ip) - self.nominal_chips = 66 - - def __repr__(self) -> str: - return f"M20S+ - BTMiner: {str(self.ip)}" + self.ip = ip diff --git a/miners/whatsminer/btminer/M2X/M21.py b/miners/whatsminer/btminer/M2X/M21.py index 92834dc0..957a2d82 100644 --- a/miners/whatsminer/btminer/M2X/M21.py +++ b/miners/whatsminer/btminer/M2X/M21.py @@ -1,10 +1,8 @@ -from miners.btminer import BTMiner +from miners._backends import BTMiner +from miners._types import M21 -class BTMinerM21(BTMiner): +class BTMinerM21(BTMiner, M21): def __init__(self, ip: str) -> None: super().__init__(ip) - self.nominal_chips = 105 - - def __repr__(self) -> str: - return f"M21 - BTMiner: {str(self.ip)}" + self.ip = ip diff --git a/miners/whatsminer/btminer/M2X/M21S.py b/miners/whatsminer/btminer/M2X/M21S.py index 3a2cc5ea..45c272e6 100644 --- a/miners/whatsminer/btminer/M2X/M21S.py +++ b/miners/whatsminer/btminer/M2X/M21S.py @@ -1,10 +1,8 @@ -from miners.btminer import BTMiner +from miners._backends import BTMiner +from miners._types import M21S -class BTMinerM21S(BTMiner): +class BTMinerM21S(BTMiner, M21S): def __init__(self, ip: str) -> None: super().__init__(ip) - self.nominal_chips = 105 - - def __repr__(self) -> str: - return f"M21S - BTMiner: {str(self.ip)}" + self.ip = ip diff --git a/miners/whatsminer/btminer/M2X/M21S_Plus.py b/miners/whatsminer/btminer/M2X/M21S_Plus.py index a575c35b..7698197c 100644 --- a/miners/whatsminer/btminer/M2X/M21S_Plus.py +++ b/miners/whatsminer/btminer/M2X/M21S_Plus.py @@ -1,10 +1,8 @@ -from miners.btminer import BTMiner +from miners._backends import BTMiner +from miners._types import M21SPlus -class BTMinerM21SPlus(BTMiner): +class BTMinerM21SPlus(BTMiner, M21SPlus): def __init__(self, ip: str) -> None: super().__init__(ip) - self.nominal_chips = 105 - - def __repr__(self) -> str: - return f"M21S+ - BTMiner: {str(self.ip)}" + self.ip = ip diff --git a/miners/whatsminer/btminer/M3X/M30S.py b/miners/whatsminer/btminer/M3X/M30S.py index 980eb66f..97d8b03d 100644 --- a/miners/whatsminer/btminer/M3X/M30S.py +++ b/miners/whatsminer/btminer/M3X/M30S.py @@ -1,9 +1,8 @@ -from miners.btminer import BTMiner +from miners._backends import BTMiner +from miners._types import M30S -class BTMinerM30S(BTMiner): +class BTMinerM30S(BTMiner, M30S): def __init__(self, ip: str) -> None: super().__init__(ip) - - def __repr__(self) -> str: - return f"M30S - BTMiner: {str(self.ip)}" + self.ip = ip diff --git a/miners/whatsminer/btminer/M3X/M30S_Plus.py b/miners/whatsminer/btminer/M3X/M30S_Plus.py index ffd1b60b..a020d6f4 100644 --- a/miners/whatsminer/btminer/M3X/M30S_Plus.py +++ b/miners/whatsminer/btminer/M3X/M30S_Plus.py @@ -1,9 +1,8 @@ -from miners.btminer import BTMiner +from miners._backends import BTMiner +from miners._types import M30SPlus -class BTMinerM30SPlus(BTMiner): +class BTMinerM30SPlus(BTMiner, M30SPlus): def __init__(self, ip: str) -> None: super().__init__(ip) - - def __repr__(self) -> str: - return f"M30S+ - BTMiner: {str(self.ip)}" + self.ip = ip diff --git a/miners/whatsminer/btminer/M3X/M30S_Plus_Plus.py b/miners/whatsminer/btminer/M3X/M30S_Plus_Plus.py index 5468a1fe..62d547f8 100644 --- a/miners/whatsminer/btminer/M3X/M30S_Plus_Plus.py +++ b/miners/whatsminer/btminer/M3X/M30S_Plus_Plus.py @@ -1,9 +1,8 @@ -from miners.btminer import BTMiner +from miners._backends import BTMiner +from miners._types import M30SPlusPlus -class BTMinerM30SPlusPlus(BTMiner): +class BTMinerM30SPlusPlus(BTMiner, M30SPlusPlus): def __init__(self, ip: str) -> None: super().__init__(ip) - - def __repr__(self) -> str: - return f"M30S++ - BTMiner: {str(self.ip)}" + self.ip = ip diff --git a/miners/whatsminer/btminer/M3X/M31S.py b/miners/whatsminer/btminer/M3X/M31S.py index 38848537..aa9f5cd7 100644 --- a/miners/whatsminer/btminer/M3X/M31S.py +++ b/miners/whatsminer/btminer/M3X/M31S.py @@ -1,10 +1,8 @@ -from miners.btminer import BTMiner +from miners._backends import BTMiner +from miners._types import M31S -class BTMinerM31S(BTMiner): +class BTMinerM31S(BTMiner, M31S): def __init__(self, ip: str) -> None: super().__init__(ip) - self.nominal_chips = 78 - - def __repr__(self) -> str: - return f"M31S - BTMiner: {str(self.ip)}" + self.ip = ip diff --git a/miners/whatsminer/btminer/M3X/M31S_Plus.py b/miners/whatsminer/btminer/M3X/M31S_Plus.py index affc1840..9e2eb085 100644 --- a/miners/whatsminer/btminer/M3X/M31S_Plus.py +++ b/miners/whatsminer/btminer/M3X/M31S_Plus.py @@ -1,10 +1,8 @@ -from miners.btminer import BTMiner +from miners._backends import BTMiner +from miners._types import M31SPlus -class BTMinerM31SPlus(BTMiner): +class BTMinerM31SPlus(BTMiner, M31SPlus): def __init__(self, ip: str) -> None: super().__init__(ip) - self.nominal_chips = 78 - - def __repr__(self) -> str: - return f"M31S+ - BTMiner: {str(self.ip)}" + self.ip = ip diff --git a/miners/whatsminer/btminer/M3X/M32S.py b/miners/whatsminer/btminer/M3X/M32S.py index 6dad8c4c..0c109e52 100644 --- a/miners/whatsminer/btminer/M3X/M32S.py +++ b/miners/whatsminer/btminer/M3X/M32S.py @@ -1,10 +1,8 @@ -from miners.btminer import BTMiner +from miners._backends import BTMiner +from miners._types import M32S -class BTMinerM32S(BTMiner): +class BTMinerM32S(BTMiner, M32S): def __init__(self, ip: str) -> None: super().__init__(ip) - self.nominal_chips = 78 - - def __repr__(self) -> str: - return f"M32S - BTMiner: {str(self.ip)}" + self.ip = ip diff --git a/misc/bos.py b/misc/bos.py index 0a90075f..9da1bd3b 100644 --- a/misc/bos.py +++ b/misc/bos.py @@ -1,6 +1,6 @@ import asyncio from network import MinerNetwork -from miners.bosminer import BOSMiner +from miners._backends.bosminer import BOSMiner async def get_bos_bad_tuners(ip: str = "192.168.1.0", mask: int = 24): @@ -29,10 +29,20 @@ async def get_bos_bad_tuners(ip: str = "192.168.1.0", mask: int = 24): bad_boards = [] for board in item["tuner_status"]: # if its not stable or still testing, its bad - if board["status"] not in ["Stable", "Testing performance profile", "Tuning individual chips"]: + if board["status"] not in [ + "Stable", + "Testing performance profile", + "Tuning individual chips", + ]: # remove the part about the board refusing to start - bad_boards.append({"board": board["board"], - "error": board["status"].replace("Hashchain refused to start: ", "")}) + bad_boards.append( + { + "board": board["board"], + "error": board["status"].replace( + "Hashchain refused to start: ", "" + ), + } + ) # if this miner has bad boards, add it to the list of bad board miners if len(bad_boards) > 0: @@ -52,7 +62,9 @@ async def _get_tuner_status(miner): # if we have data, loop through to get the hashchain status if tuner_status: for board in tuner_status["TUNERSTATUS"][0]["TunerChainStatus"]: - tuner_data.append({"board": board["HashchainIndex"], "status": board["Status"]}) + tuner_data.append( + {"board": board["HashchainIndex"], "status": board["Status"]} + ) # return the data along with the IP or later tracking return {"ip": str(miner.ip), "tuner_status": tuner_data}