From 44bcc30130a3d369025e34be9428b3dbe0b1c013 Mon Sep 17 00:00:00 2001 From: UpstreamData <75442874+UpstreamData@users.noreply.github.com> Date: Sat, 8 Jan 2022 15:25:43 -0700 Subject: [PATCH] fixed more bugs with avalonminers, and added temps --- cfg_util/func/miners.py | 9 ++++++++- miners/avalonminer/__init__.py | 11 +++++++++++ miners/miner_factory.py | 13 ++++++++----- 3 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 miners/avalonminer/__init__.py diff --git a/cfg_util/func/miners.py b/cfg_util/func/miners.py index b302ee7e..6fffa598 100644 --- a/cfg_util/func/miners.py +++ b/cfg_util/func/miners.py @@ -224,13 +224,20 @@ async def get_formatted_data(ip: ipaddress.ip_address): for board in miner_data["devs"][0]['DEVS']: if board['Chip Temp Avg'] is not None and not board['Chip Temp Avg'] == 0.0: temps = board['Chip Temp Avg'] - if "stats" in miner_data.keys() and not miner_data["stats"][0]['STATS'] == []: for temp in ["temp2", "temp1", "temp3"]: if temp in miner_data["stats"][0]['STATS'][1].keys(): if miner_data["stats"][0]['STATS'][1][temp] is not None and not miner_data["stats"][0]['STATS'][1][ temp] == 0.0: temps = miner_data["stats"][0]['STATS'][1][temp] + miner_data["stats"][0]['STATS'][0].keys() + if any("MM ID" in string for string in miner_data["stats"][0]['STATS'][0].keys()): + temp_all = [] + for key in [string for string in miner_data["stats"][0]['STATS'][0].keys() if "MM ID" in string]: + for value in [string for string in miner_data["stats"][0]['STATS'][0][key].split(" ") if + "TMax" in string]: + temp_all.append(int(value.split("[")[1].replace("]", ""))) + temps = round(sum(temp_all) / len(temp_all)) if "pools" not in miner_data.keys(): user = "?" diff --git a/miners/avalonminer/__init__.py b/miners/avalonminer/__init__.py new file mode 100644 index 00000000..6392dbe7 --- /dev/null +++ b/miners/avalonminer/__init__.py @@ -0,0 +1,11 @@ +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)}" diff --git a/miners/miner_factory.py b/miners/miner_factory.py index 1c23ad5f..dfcef601 100644 --- a/miners/miner_factory.py +++ b/miners/miner_factory.py @@ -2,7 +2,6 @@ from miners.antminer.S9.bosminer import BOSMinerS9 from miners.antminer.S9.bmminer import BMMinerS9 from miners.antminer.S9.cgminer import CGMinerS9 - from miners.antminer.X17.bosminer import BOSMinerX17 from miners.antminer.X17.bmminer import BMMinerX17 from miners.antminer.X17.cgminer import CGMinerX17 @@ -16,10 +15,9 @@ from miners.whatsminer.M30 import BTMinerM30 from miners.whatsminer.M31 import BTMinerM31 from miners.whatsminer.M32 import BTMinerM32 -from miners.bmminer import BMMiner -from miners.cgminer import CGMiner +from miners.avalonminer import CGMinerAvalon + from miners.unknown import UnknownMiner -from API import APIError import asyncio import ipaddress import json @@ -85,6 +83,8 @@ class MinerFactory: miner = CGMinerX19(str(ip)) elif "BMMiner" in api: miner = BMMinerX19(str(ip)) + elif "avalon" in model: + miner = CGMinerAvalon(str(ip)) elif "M20" in model: miner = BTMinerM20(str(ip)) elif "M21" in model: @@ -116,7 +116,10 @@ class MinerFactory: except: print(f"Get Model Exception: {ip}") else: - model = data["DEVDETAILS"][0]["Model"] + if not data["DEVDETAILS"][0]["Model"] == "": + model = data["DEVDETAILS"][0]["Model"] + else: + model = data["DEVDETAILS"][0]["Driver"] else: try: data = await self._send_api_command(str(ip), "version")