added fan counts to miners, and added more data to bosminer and miner data
This commit is contained in:
@@ -7,8 +7,18 @@ class MinerData:
|
||||
model: str = "Unknown"
|
||||
hostname: str = "Unknown"
|
||||
hashrate: float = 0
|
||||
temperature: float = 0
|
||||
temperature_avg: int = field(init=False)
|
||||
left_board_temp: int = 0
|
||||
left_board_chip_temp: int = 0
|
||||
center_board_temp: int = 0
|
||||
center_board_chip_temp: int = 0
|
||||
right_board_temp: int = 0
|
||||
right_board_chip_temp: int = 0
|
||||
wattage: int = 0
|
||||
fan_1: int = -1
|
||||
fan_2: int = -1
|
||||
fan_3: int = -1
|
||||
fan_4: int = -1
|
||||
left_chips: int = 0
|
||||
center_chips: int = 0
|
||||
right_chips: int = 0
|
||||
@@ -46,9 +56,25 @@ class MinerData:
|
||||
def percent_ideal(self, val):
|
||||
pass
|
||||
|
||||
def __post_init__(self):
|
||||
self.total_chips = self.right_chips + self.center_chips + self.left_chips
|
||||
self.nominal = self.ideal_chips == self.total_chips
|
||||
@property
|
||||
def temperature_avg(self): # noqa - Skip PyCharm inspection
|
||||
total_temp = 0
|
||||
temp_count = 0
|
||||
for temp in [
|
||||
self.left_board_chip_temp,
|
||||
self.center_board_chip_temp,
|
||||
self.right_board_chip_temp,
|
||||
]:
|
||||
if not temp == 0:
|
||||
total_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
|
||||
|
||||
def asdict(self):
|
||||
return asdict(self)
|
||||
|
||||
@@ -17,6 +17,7 @@ class BaseMiner:
|
||||
self.hostname = None
|
||||
self.nominal_chips = 1
|
||||
self.version = None
|
||||
self.fan_count = 2
|
||||
|
||||
def __repr__(self):
|
||||
return f"{'' if not self.api_type else self.api_type} {'' if not self.model else self.model}: {str(self.ip)}"
|
||||
|
||||
@@ -262,7 +262,7 @@ class BOSMiner(BaseMiner):
|
||||
miner_data = None
|
||||
for i in range(DATA_RETRIES):
|
||||
miner_data = await self.api.multicommand(
|
||||
"summary", "temps", "tunerstatus", "pools", "devdetails"
|
||||
"summary", "temps", "tunerstatus", "pools", "devdetails", "fans"
|
||||
)
|
||||
if miner_data:
|
||||
break
|
||||
@@ -273,6 +273,7 @@ class BOSMiner(BaseMiner):
|
||||
tunerstatus = miner_data.get("tunerstatus")[0]
|
||||
pools = miner_data.get("pools")[0]
|
||||
devdetails = miner_data.get("devdetails")[0]
|
||||
fans = miner_data.get("fans")[0]
|
||||
|
||||
if summary:
|
||||
hr = summary.get("SUMMARY")
|
||||
@@ -286,9 +287,20 @@ class BOSMiner(BaseMiner):
|
||||
temp = temps.get("TEMPS")
|
||||
if temp:
|
||||
if len(temp) > 0:
|
||||
chip_temp = temp[0].get("Chip")
|
||||
if chip_temp:
|
||||
data.temperature = round(chip_temp)
|
||||
board_map = {0: "left_board", 1: "center_board", 2: "right_board"}
|
||||
offset = temp[0]["ID"]
|
||||
for board in temp:
|
||||
id = board["ID"] - offset
|
||||
chip_temp = round(board["Chip"])
|
||||
board_temp = round(board["Board"])
|
||||
setattr(data, f"{board_map[id]}_chip_temp", chip_temp)
|
||||
setattr(data, f"{board_map[id]}_temp", board_temp)
|
||||
|
||||
if fans:
|
||||
fan_data = fans.get("FANS")
|
||||
if fan_data:
|
||||
for fan in range(self.fan_count):
|
||||
setattr(data, f"fan_{fan+1}", fan_data[fan]["RPM"])
|
||||
|
||||
if pools:
|
||||
pool_1 = None
|
||||
|
||||
@@ -7,3 +7,4 @@ class S17(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "S17"
|
||||
self.nominal_chips = 48
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class S17Plus(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "S17+"
|
||||
self.nominal_chips = 65
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class S17Pro(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "S17 Pro"
|
||||
self.nominal_chips = 48
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class S17e(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "S17e"
|
||||
self.nominal_chips = 135
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class T17(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "T17"
|
||||
self.nominal_chips = 30
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class T17Plus(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "T17+"
|
||||
self.nominal_chips = 44
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class T17e(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "T17e"
|
||||
self.nominal_chips = 78
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class S19(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "S19"
|
||||
self.nominal_chips = 76
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class S19Pro(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "S19 Pro"
|
||||
self.nominal_chips = 114
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class S19a(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "S19a"
|
||||
self.nominal_chips = 72
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class S19j(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "S19j"
|
||||
self.nominal_chips = 114
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class S19jPro(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "S19j Pro"
|
||||
self.nominal_chips = 126
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class T19(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "T19"
|
||||
self.nominal_chips = 76
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class S9(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "S9"
|
||||
self.nominal_chips = 63
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -7,3 +7,4 @@ class S9i(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "S9i"
|
||||
self.nominal_chips = 63
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -7,3 +7,4 @@ class T9(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "T9"
|
||||
self.nominal_chips = 57
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -7,3 +7,4 @@ class Avalon1047(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "Avalon 1047"
|
||||
self.nominal_chips = 114
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -7,3 +7,4 @@ class Avalon1066(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "Avalon 1066"
|
||||
self.nominal_chips = 114
|
||||
self.fan_count = 4
|
||||
|
||||
@@ -6,3 +6,4 @@ class Avalon821(BaseMiner):
|
||||
super().__init__()
|
||||
self.ip = ip
|
||||
self.model = "Avalon 821"
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -6,3 +6,4 @@ class Avalon841(BaseMiner):
|
||||
super().__init__()
|
||||
self.ip = ip
|
||||
self.model = "Avalon 841"
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -7,3 +7,4 @@ class M20S(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "M20S"
|
||||
self.nominal_chips = 66
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -7,3 +7,4 @@ class M20SPlus(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "M20S+"
|
||||
self.nominal_chips = 66
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -7,3 +7,4 @@ class M21(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "M21"
|
||||
self.nominal_chips = 105
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -7,3 +7,4 @@ class M21S(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "M21S"
|
||||
self.nominal_chips = 105
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -7,3 +7,4 @@ class M21SPlus(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "M21S+"
|
||||
self.nominal_chips = 105
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -6,3 +6,5 @@ class M30S(BaseMiner):
|
||||
super().__init__()
|
||||
self.ip = ip
|
||||
self.model = "M30S"
|
||||
# TODO: Add chip count for this miner (per board) - self.nominal_chips
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -7,3 +7,4 @@ class M30SPlus(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "M30S+"
|
||||
self.nominal_chips = 156
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -7,6 +7,4 @@ class M30SPlusPlus(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "M30S++"
|
||||
self.nominal_chips = 117
|
||||
|
||||
|
||||
# TODO: handle different chip counts, 111, 117,(128)
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -6,3 +6,5 @@ class M31S(BaseMiner):
|
||||
super().__init__()
|
||||
self.ip = ip
|
||||
self.model = "M31S"
|
||||
# TODO: Add chip count for this miner (per board) - self.nominal_chips
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -7,3 +7,4 @@ class M31SPlus(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "M31S+"
|
||||
self.nominal_chips = 78
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -7,3 +7,4 @@ class M32S(BaseMiner):
|
||||
self.ip = ip
|
||||
self.model = "M32S"
|
||||
self.nominal_chips = 78
|
||||
self.fan_count = 2
|
||||
|
||||
@@ -13,7 +13,7 @@ DATA_HEADER_MAP = {
|
||||
"model": "Model",
|
||||
"hostname": "Hostname",
|
||||
"hashrate": "Hashrate",
|
||||
"temperature": "Temp",
|
||||
"temperature_avg": "Temp",
|
||||
"wattage": "Wattage",
|
||||
"ideal_chips": "Ideal",
|
||||
"left_chips": "Left Board",
|
||||
|
||||
Reference in New Issue
Block a user