diff --git a/docs/miners/antminer/X21.md b/docs/miners/antminer/X21.md index 10252440..0e8ab90a 100644 --- a/docs/miners/antminer/X21.md +++ b/docs/miners/antminer/X21.md @@ -53,6 +53,19 @@ show_root_heading: false heading_level: 0 +## S21+ Hydro (Stock) + +- [x] Shutdowns +- [x] Power Modes +- [ ] Setpoints +- [ ] Presets + +::: pyasic.miners.antminer.bmminer.X21.S21.BMMinerS21PlusHydro + handler: python + options: + show_root_heading: false + heading_level: 0 + ## T21 (Stock) - [x] Shutdowns diff --git a/docs/miners/supported_types.md b/docs/miners/supported_types.md index 714bb949..ad80a861 100644 --- a/docs/miners/supported_types.md +++ b/docs/miners/supported_types.md @@ -104,6 +104,7 @@ details {
  • S21 (Stock)
  • S21 (Stock)
  • S21+ (Stock)
  • +
  • S21+ Hydro (Stock)
  • S21 Pro (Stock)
  • T21 (Stock)
  • S21 Hydro (Stock)
  • diff --git a/pyasic/data/boards.py b/pyasic/data/boards.py index c97250ef..37141344 100644 --- a/pyasic/data/boards.py +++ b/pyasic/data/boards.py @@ -28,6 +28,8 @@ class HashBoard(BaseModel): Attributes: slot: The slot of the board as an int. hashrate: The hashrate of the board in TH/s as a float. + inlet_temp: Inlet temperature for hydro asics as an int + outlet_temp: Outlet temperature for hydro asics as an int temp: The temperature of the PCB as an int. chip_temp: The temperature of the chips as an int. chips: The chip count of the board as an int. @@ -41,6 +43,8 @@ class HashBoard(BaseModel): slot: int = 0 hashrate: AlgoHashRateType | None = None + inlet_temp: float | None = None + outlet_temp: float | None = None temp: float | None = None chip_temp: float | None = None chips: int | None = None diff --git a/pyasic/device/models.py b/pyasic/device/models.py index ebaba5aa..140da333 100644 --- a/pyasic/device/models.py +++ b/pyasic/device/models.py @@ -59,6 +59,7 @@ class AntminerModels(MinerModelType): T19 = "T19" S21 = "S21" S21Plus = "S21+" + S21PlusHydro = "S21+ Hydro" S21Pro = "S21 Pro" S21Hydro = "S21 Hydro" T21 = "T21" diff --git a/pyasic/miners/antminer/bmminer/X21/S21.py b/pyasic/miners/antminer/bmminer/X21/S21.py index bd3216d1..1c9e7d58 100644 --- a/pyasic/miners/antminer/bmminer/X21/S21.py +++ b/pyasic/miners/antminer/bmminer/X21/S21.py @@ -15,7 +15,7 @@ # ------------------------------------------------------------------------------ from pyasic.miners.backends import AntminerModern -from pyasic.miners.device.models import S21, S21Hydro, S21Plus, S21Pro +from pyasic.miners.device.models import S21, S21Hydro, S21Plus, S21PlusHydro, S21Pro class BMMinerS21(AntminerModern, S21): @@ -26,6 +26,10 @@ class BMMinerS21Plus(AntminerModern, S21Plus): pass +class BMMinerS21PlusHydro(AntminerModern, S21PlusHydro): + pass + + class BMMinerS21Pro(AntminerModern, S21Pro): pass diff --git a/pyasic/miners/antminer/bmminer/X21/__init__.py b/pyasic/miners/antminer/bmminer/X21/__init__.py index 94cec3cc..bfbbf5ed 100644 --- a/pyasic/miners/antminer/bmminer/X21/__init__.py +++ b/pyasic/miners/antminer/bmminer/X21/__init__.py @@ -13,5 +13,11 @@ # See the License for the specific language governing permissions and - # limitations under the License. - # ------------------------------------------------------------------------------ -from .S21 import BMMinerS21, BMMinerS21Hydro, BMMinerS21Plus, BMMinerS21Pro +from .S21 import ( + BMMinerS21, + BMMinerS21Hydro, + BMMinerS21Plus, + BMMinerS21PlusHydro, + BMMinerS21Pro, +) from .T21 import BMMinerT21 diff --git a/pyasic/miners/backends/antminer.py b/pyasic/miners/backends/antminer.py index 149a37dc..2b1f746e 100644 --- a/pyasic/miners/backends/antminer.py +++ b/pyasic/miners/backends/antminer.py @@ -272,18 +272,47 @@ class AntminerModern(BMMiner): rate=board["rate_real"], unit=self.algo.unit.GH ).into(self.algo.unit.default) hashboards[board["index"]].chips = board["asic_num"] - board_temp_data = list( - filter(lambda x: not x == 0, board["temp_pcb"]) - ) - hashboards[board["index"]].temp = sum(board_temp_data) / len( - board_temp_data - ) - chip_temp_data = list( - filter(lambda x: not x == 0, board["temp_chip"]) - ) - hashboards[board["index"]].chip_temp = sum(chip_temp_data) / len( - chip_temp_data - ) + + if "S21+ Hyd" in self.model: + hashboards[board["index"]].inlet_temp = board["temp_pcb"][0] + hashboards[board["index"]].outlet_temp = board["temp_pcb"][2] + hashboards[board["index"]].chip_temp = board["temp_pic"][0] + board_temp_data = list( + filter( + lambda x: not x == 0, + [ + board["temp_pic"][1], + board["temp_pic"][2], + board["temp_pic"][3], + board["temp_pcb"][1], + board["temp_pcb"][3], + ], + ) + ) + hashboards[board["index"]].temp = ( + sum(board_temp_data) / len(board_temp_data) + if len(board_temp_data) > 0 + else 0 + ) + + else: + board_temp_data = list( + filter(lambda x: not x == 0, board["temp_pcb"]) + ) + hashboards[board["index"]].temp = ( + sum(board_temp_data) / len(board_temp_data) + if len(board_temp_data) > 0 + else 0 + ) + chip_temp_data = list( + filter(lambda x: not x == 0, board["temp_chip"]) + ) + hashboards[board["index"]].chip_temp = ( + sum(chip_temp_data) / len(chip_temp_data) + if len(chip_temp_data) > 0 + else 0 + ) + hashboards[board["index"]].serial_number = board["sn"] hashboards[board["index"]].missing = False except LookupError: diff --git a/pyasic/miners/device/models/antminer/X21/S21.py b/pyasic/miners/device/models/antminer/X21/S21.py index 996bf164..fece76f1 100644 --- a/pyasic/miners/device/models/antminer/X21/S21.py +++ b/pyasic/miners/device/models/antminer/X21/S21.py @@ -36,6 +36,15 @@ class S21Plus(AntMinerMake): algo = MinerAlgo.SHA256 +class S21PlusHydro(AntMinerMake): + raw_model = MinerModel.ANTMINER.S21PlusHydro + + expected_chips = 95 + expected_fans = 0 + expected_hashboards = 3 + algo = MinerAlgo.SHA256 + + class S21Pro(AntMinerMake): raw_model = MinerModel.ANTMINER.S21Pro diff --git a/pyasic/miners/device/models/antminer/X21/__init__.py b/pyasic/miners/device/models/antminer/X21/__init__.py index c6f0a376..70b40e1d 100644 --- a/pyasic/miners/device/models/antminer/X21/__init__.py +++ b/pyasic/miners/device/models/antminer/X21/__init__.py @@ -14,5 +14,5 @@ # limitations under the License. - # ------------------------------------------------------------------------------ -from .S21 import S21, S21Hydro, S21Plus, S21Pro +from .S21 import S21, S21Hydro, S21Plus, S21PlusHydro, S21Pro from .T21 import T21 diff --git a/pyasic/miners/factory.py b/pyasic/miners/factory.py index 5fb9be12..ad6c4ee1 100644 --- a/pyasic/miners/factory.py +++ b/pyasic/miners/factory.py @@ -121,6 +121,7 @@ MINER_CLASSES = { "ANTMINER BHB68601": BMMinerS21, # ??? "ANTMINER BHB68606": BMMinerS21, # ??? "ANTMINER S21+": BMMinerS21Plus, + "ANTMINER S21+ HYD.": BMMinerS21PlusHydro, "ANTMINER S21 PRO": BMMinerS21Pro, "ANTMINER T21": BMMinerT21, "ANTMINER S21 HYD.": BMMinerS21Hydro,