From 86155db455dc0e038d5f0ac0d3451548e066e28b Mon Sep 17 00:00:00 2001 From: Colin Crossman Date: Fri, 4 Nov 2022 15:48:30 -0600 Subject: [PATCH] Initial modifications to account for differential hashboard counts Now storing the hasboard data as an array of datastructs. Not fully fleshed out yet, but this is where I'm going. --- pyasic/data/__init__.py | 35 ++++++++++++++++++++++++++++-- pyasic/miners/_backends/btminer.py | 23 +++++++++++++++++--- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/pyasic/data/__init__.py b/pyasic/data/__init__.py index af2ac560..a18edb94 100644 --- a/pyasic/data/__init__.py +++ b/pyasic/data/__init__.py @@ -15,12 +15,23 @@ from typing import Union, List from dataclasses import dataclass, field, asdict from datetime import datetime, timezone +from functools import reduce import time import json import copy from .error_codes import X19Error, WhatsminerError, BraiinsOSError, InnosiliconError +@dataclass +class HashBoard: + slot: int = 0 + hashrate: float = 0.0 + temp: int = -1 + chip_temp: int = -1 + chips: int = 0 + expected_chips: int = 0 + missing: bool = True + @dataclass class MinerData: @@ -108,6 +119,10 @@ class MinerData: ] = field(default_factory=list) fault_light: Union[bool, None] = None efficiency: int = field(init=False) + hashboards: List[HashBoard] = field(default_factory=list) + ideal_hashboards: int = 1 + + def __post_init__(self): self.datetime = datetime.now(timezone.utc).astimezone() @@ -162,9 +177,13 @@ class MinerData: return cp @property - def total_chips(self): # noqa - Skip PyCharm inspection + def old_total_chips(self): # noqa - Skip PyCharm inspection return self.right_chips + self.center_chips + self.left_chips + @property + def total_chips(self): # noqa - Skip PyCharm inspection + return reduce(lambda x, y: x + y, [board.chips for board in self.hashboards]) + @total_chips.setter def total_chips(self, val): pass @@ -186,7 +205,7 @@ class MinerData: pass @property - def temperature_avg(self): # noqa - Skip PyCharm inspection + def old_temperature_avg(self): # noqa - Skip PyCharm inspection total_temp = 0 temp_count = 0 for temp in [ @@ -201,6 +220,18 @@ class MinerData: return 0 return round(total_temp / temp_count) + @property + def temperature_avg(self): # noqa - Skip PyCharm inspection + total_temp = 0 + temp_count = 0 + for temp in self.hashboards: + if temp.temp and not temp.temp == -1: + total_temp += temp.temp + temp_count += 1 + if not temp_count > 0: + return 0 + return round(total_temp / temp_count) + @temperature_avg.setter def temperature_avg(self, val): pass diff --git a/pyasic/miners/_backends/btminer.py b/pyasic/miners/_backends/btminer.py index e6d22d07..96e16174 100644 --- a/pyasic/miners/_backends/btminer.py +++ b/pyasic/miners/_backends/btminer.py @@ -21,7 +21,7 @@ from pyasic.API.btminer import BTMinerAPI from pyasic.miners.base import BaseMiner from pyasic.errors import APIError -from pyasic.data import MinerData +from pyasic.data import MinerData, HashBoard from pyasic.data.error_codes import WhatsminerError, MinerErrorData from pyasic.config import MinerConfig @@ -254,7 +254,7 @@ class BTMiner(BaseMiner): Returns: A [`MinerData`][pyasic.data.MinerData] instance containing the miners data. """ - data = MinerData(ip=str(self.ip), ideal_chips=self.nominal_chips * 3) + data = MinerData(ip=str(self.ip), ideal_chips=self.nominal_chips * self.ideal_hashboards) mac = None @@ -372,6 +372,23 @@ class BTMiner(BaseMiner): ) ) + + if devs: + dev_data = devs.get("DEVS") + if dev_data: + for board in dev_data: + temp_board = HashBoard( + slot = board["ASC"], + chip_temp = round(board["Chip Temp Avg"]), + temp = round(board["Temperature"]), + hashrate = round(board["MHS 1m"] / 1000000, 2), + chips = board["Effective Chips"], + missing = False if board["Effective Chips"] > 0 else True, + expected_chips = self.nominal_chips, + ) + data.hashboards.append(temp_board) + + """ if devs: temp_data = devs.get("DEVS") if temp_data: @@ -398,7 +415,7 @@ class BTMiner(BaseMiner): for board in boards: _id = board[id_key] - offset chips = board["Effective Chips"] - setattr(data, board_map[_id], chips) + setattr(data, board_map[_id], chips)""" if pools: pool_1 = None