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.
This commit is contained in:
Colin Crossman
2022-11-04 15:48:30 -06:00
parent 5b078b4b27
commit 86155db455
2 changed files with 53 additions and 5 deletions

View File

@@ -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

View File

@@ -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