feature: add innosilicon support for new HashBoard format.

This commit is contained in:
Colin Crossman
2022-11-04 21:28:33 -06:00
parent e431a06ac5
commit 1970f8c924

View File

@@ -17,7 +17,7 @@ from pyasic.miners._types import InnosiliconT3HPlus # noqa - Ignore access to _
from pyasic.data import MinerData from pyasic.data import MinerData
from pyasic.data.error_codes import InnosiliconError, MinerErrorData from pyasic.data.error_codes import InnosiliconError, MinerErrorData
from pyasic.settings import PyasicSettings from pyasic.settings import PyasicSettings
from pyasic.config import MinerConfig from pyasic.config import MinerConfig, HashBoard
from pyasic.errors import APIError from pyasic.errors import APIError
import httpx import httpx
@@ -158,7 +158,11 @@ class CGMinerInnosiliconT3HPlus(CGMiner, InnosiliconT3HPlus):
return errors return errors
async def get_data(self) -> MinerData: async def get_data(self) -> MinerData:
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,
ideal_hashboards=self.ideal_hashboards,
)
board_offset = -1 board_offset = -1
fan_offset = -1 fan_offset = -1
@@ -215,32 +219,22 @@ class CGMinerInnosiliconT3HPlus(CGMiner, InnosiliconT3HPlus):
if stats: if stats:
stats = stats[0] stats = stats[0]
if stats.get("STATS"): if stats.get("STATS"):
board_map = {0: "left", 1: "center", 2: "right"}
for idx, board in enumerate(stats["STATS"]): for idx, board in enumerate(stats["STATS"]):
chips = board.get("Num active chips") temp_board = HashBoard(
if chips: slot=idx,
setattr(data, f"{board_map[idx]}_chips", chips) chip_temp=round(board.get("Temp")),
temp = board.get("Temp") chips=board.get("Num active chips"),
if temp: missing=False if board.get("Num active chips") > 0 else True,
setattr(data, f"{board_map[idx]}_board_chip_temp", temp) expected_chips=self.nominal_chips,
)
data.hashboards.append(temp_board)
if all_data: if all_data:
if all_data.get("chain"): if all_data.get("chain"):
board_map = {0: "left", 1: "center", 2: "right"}
for idx, board in enumerate(all_data["chain"]): for idx, board in enumerate(all_data["chain"]):
temp = board.get("Temp max") data.hashboards[idx].temp = round(board.get("Temp min"))
if temp: data.hashboards[idx].hashrate = round(board.get("Hash Rate H") / 1000000000000, 2)
setattr(data, f"{board_map[idx]}_board_chip_temp", temp)
temp_board = board.get("Temp min")
if temp_board:
setattr(data, f"{board_map[idx]}_board_temp", temp_board)
hr = board.get("Hash Rate H")
if hr:
setattr(
data,
f"{board_map[idx]}_board_hashrate",
round(hr / 1000000000000, 2),
)
if all_data.get("fansSpeed"): if all_data.get("fansSpeed"):
speed = round((all_data["fansSpeed"] * 6000) / 100) speed = round((all_data["fansSpeed"] * 6000) / 100)
for fan in range(self.fan_count): for fan in range(self.fan_count):