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