added fan counts to miners, and added more data to bosminer and miner data

This commit is contained in:
UpstreamData
2022-05-26 10:26:40 -06:00
parent 0f51487d3f
commit d6638fa4d2
35 changed files with 81 additions and 12 deletions

View File

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

View File

@@ -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)}"

View File

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

View File

@@ -7,3 +7,4 @@ class S17(BaseMiner):
self.ip = ip
self.model = "S17"
self.nominal_chips = 48
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class S17Plus(BaseMiner):
self.ip = ip
self.model = "S17+"
self.nominal_chips = 65
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class S17Pro(BaseMiner):
self.ip = ip
self.model = "S17 Pro"
self.nominal_chips = 48
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class S17e(BaseMiner):
self.ip = ip
self.model = "S17e"
self.nominal_chips = 135
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class T17(BaseMiner):
self.ip = ip
self.model = "T17"
self.nominal_chips = 30
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class T17Plus(BaseMiner):
self.ip = ip
self.model = "T17+"
self.nominal_chips = 44
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class T17e(BaseMiner):
self.ip = ip
self.model = "T17e"
self.nominal_chips = 78
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class S19(BaseMiner):
self.ip = ip
self.model = "S19"
self.nominal_chips = 76
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class S19Pro(BaseMiner):
self.ip = ip
self.model = "S19 Pro"
self.nominal_chips = 114
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class S19a(BaseMiner):
self.ip = ip
self.model = "S19a"
self.nominal_chips = 72
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class S19j(BaseMiner):
self.ip = ip
self.model = "S19j"
self.nominal_chips = 114
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class S19jPro(BaseMiner):
self.ip = ip
self.model = "S19j Pro"
self.nominal_chips = 126
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class T19(BaseMiner):
self.ip = ip
self.model = "T19"
self.nominal_chips = 76
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class S9(BaseMiner):
self.ip = ip
self.model = "S9"
self.nominal_chips = 63
self.fan_count = 2

View File

@@ -7,3 +7,4 @@ class S9i(BaseMiner):
self.ip = ip
self.model = "S9i"
self.nominal_chips = 63
self.fan_count = 2

View File

@@ -7,3 +7,4 @@ class T9(BaseMiner):
self.ip = ip
self.model = "T9"
self.nominal_chips = 57
self.fan_count = 2

View File

@@ -7,3 +7,4 @@ class Avalon1047(BaseMiner):
self.ip = ip
self.model = "Avalon 1047"
self.nominal_chips = 114
self.fan_count = 4

View File

@@ -7,3 +7,4 @@ class Avalon1066(BaseMiner):
self.ip = ip
self.model = "Avalon 1066"
self.nominal_chips = 114
self.fan_count = 4

View File

@@ -6,3 +6,4 @@ class Avalon821(BaseMiner):
super().__init__()
self.ip = ip
self.model = "Avalon 821"
self.fan_count = 2

View File

@@ -6,3 +6,4 @@ class Avalon841(BaseMiner):
super().__init__()
self.ip = ip
self.model = "Avalon 841"
self.fan_count = 2

View File

@@ -7,3 +7,4 @@ class M20S(BaseMiner):
self.ip = ip
self.model = "M20S"
self.nominal_chips = 66
self.fan_count = 2

View File

@@ -7,3 +7,4 @@ class M20SPlus(BaseMiner):
self.ip = ip
self.model = "M20S+"
self.nominal_chips = 66
self.fan_count = 2

View File

@@ -7,3 +7,4 @@ class M21(BaseMiner):
self.ip = ip
self.model = "M21"
self.nominal_chips = 105
self.fan_count = 2

View File

@@ -7,3 +7,4 @@ class M21S(BaseMiner):
self.ip = ip
self.model = "M21S"
self.nominal_chips = 105
self.fan_count = 2

View File

@@ -7,3 +7,4 @@ class M21SPlus(BaseMiner):
self.ip = ip
self.model = "M21S+"
self.nominal_chips = 105
self.fan_count = 2

View File

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

View File

@@ -7,3 +7,4 @@ class M30SPlus(BaseMiner):
self.ip = ip
self.model = "M30S+"
self.nominal_chips = 156
self.fan_count = 2

View File

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

View File

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

View File

@@ -7,3 +7,4 @@ class M31SPlus(BaseMiner):
self.ip = ip
self.model = "M31S+"
self.nominal_chips = 78
self.fan_count = 2

View File

@@ -7,3 +7,4 @@ class M32S(BaseMiner):
self.ip = ip
self.model = "M32S"
self.nominal_chips = 78
self.fan_count = 2

View File

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