diff --git a/docs/miners/supported_types.md b/docs/miners/supported_types.md
index 27a35437..fdd2df28 100644
--- a/docs/miners/supported_types.md
+++ b/docs/miners/supported_types.md
@@ -90,6 +90,7 @@ details {
M31S
+ M31SV70
M31S+
diff --git a/docs/miners/whatsminer/M3X.md b/docs/miners/whatsminer/M3X.md
index c8b72b7f..42cac1d5 100644
--- a/docs/miners/whatsminer/M3X.md
+++ b/docs/miners/whatsminer/M3X.md
@@ -108,6 +108,14 @@
## M31S
+::: pyasic.miners.whatsminer.btminer.M3X.M31S.BTMinerM31S
+ handler: python
+ options:
+ show_root_heading: false
+ heading_level: 4
+
+## M31SV70
+
::: pyasic.miners.whatsminer.btminer.M3X.M31S.BTMinerM31S
handler: python
options:
diff --git a/pyasic/miners/_types/whatsminer/M3X/M31S.py b/pyasic/miners/_types/whatsminer/M3X/M31S.py
index 1ef75ebc..8933799f 100644
--- a/pyasic/miners/_types/whatsminer/M3X/M31S.py
+++ b/pyasic/miners/_types/whatsminer/M3X/M31S.py
@@ -20,5 +20,14 @@ class M31S(BaseMiner): # noqa - ignore ABC method implementation
super().__init__()
self.ip = ip
self.model = "M31S"
- # TODO: Add chip count for this miner (per board) - self.nominal_chips
+ self.nominal_chips = 111
+ self.fan_count = 2
+
+
+class M31SV70(BaseMiner): # noqa - ignore ABC method implementation
+ def __init__(self, ip: str):
+ super().__init__()
+ self.ip = ip
+ self.model = "M31S V70"
+ self.nominal_chips = 111
self.fan_count = 2
diff --git a/pyasic/miners/_types/whatsminer/M3X/__init__.py b/pyasic/miners/_types/whatsminer/M3X/__init__.py
index 0e42bb30..331ee054 100644
--- a/pyasic/miners/_types/whatsminer/M3X/__init__.py
+++ b/pyasic/miners/_types/whatsminer/M3X/__init__.py
@@ -20,7 +20,7 @@ from .M30S_Plus_Plus import (
M30SPlusPlusVG40,
M30SPlusPlusVH60,
)
-from .M31S import M31S
+from .M31S import M31S, M31SV70
from .M31S_Plus import (
M31SPlus,
M31SPlusV30,
diff --git a/pyasic/miners/miner_factory.py b/pyasic/miners/miner_factory.py
index 232c459c..523a0ac1 100644
--- a/pyasic/miners/miner_factory.py
+++ b/pyasic/miners/miner_factory.py
@@ -194,6 +194,7 @@ MINER_CLASSES = {
"M31S": {
"Default": BTMinerM31S,
"BTMiner": BTMinerM31S,
+ "V70": BTMinerM31SV70,
},
"M31S+": {
"Default": BTMinerM31SPlus,
diff --git a/pyasic/miners/whatsminer/btminer/M3X/M31S.py b/pyasic/miners/whatsminer/btminer/M3X/M31S.py
index 6a1382bf..ac9a157d 100644
--- a/pyasic/miners/whatsminer/btminer/M3X/M31S.py
+++ b/pyasic/miners/whatsminer/btminer/M3X/M31S.py
@@ -13,10 +13,16 @@
# limitations under the License.
from pyasic.miners._backends import BTMiner # noqa - Ignore access to _module
-from pyasic.miners._types import M31S # noqa - Ignore access to _module
+from pyasic.miners._types import M31S, M31SV70 # noqa - Ignore access to _module
class BTMinerM31S(BTMiner, M31S):
def __init__(self, ip: str) -> None:
super().__init__(ip)
self.ip = ip
+
+
+class BTMinerM31SV70(BTMiner, M31SV70):
+ def __init__(self, ip: str) -> None:
+ super().__init__(ip)
+ self.ip = ip
diff --git a/pyasic/miners/whatsminer/btminer/M3X/__init__.py b/pyasic/miners/whatsminer/btminer/M3X/__init__.py
index 6204adbe..02b69e3e 100644
--- a/pyasic/miners/whatsminer/btminer/M3X/__init__.py
+++ b/pyasic/miners/whatsminer/btminer/M3X/__init__.py
@@ -31,7 +31,7 @@ from .M30S_Plus_Plus import (
BTMinerM30SPlusPlusVG40,
BTMinerM30SPlusPlusVH60,
)
-from .M31S import BTMinerM31S
+from .M31S import BTMinerM31S, BTMinerM31SV70
from .M31S_Plus import (
BTMinerM31SPlus,
BTMinerM31SPlusV30,