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,