feat: add VolcMiner D1 (#263)

This commit is contained in:
JP Compagnone
2024-12-31 12:02:48 -05:00
committed by GitHub
parent 1b4e6d4da0
commit 56536fd258
13 changed files with 82 additions and 1 deletions

View File

@@ -28,6 +28,7 @@ class MinerMake(str, Enum):
BITAXE = "BitAxe"
ICERIVER = "IceRiver"
HAMMER = "Hammer"
VOLCMINER = "VolcMiner"
BRAIINS = "Braiins"
def __str__(self):

View File

@@ -381,6 +381,13 @@ class HammerModels(MinerModelType):
return self.value
class VolcMinerModels(MinerModelType):
D1 = "D1"
def __str__(self):
return self.value
class BraiinsModels(MinerModelType):
BMM100 = "BMM100"
BMM101 = "BMM101"
@@ -397,4 +404,5 @@ class MinerModel:
BITAXE = BitAxeModels
ICERIVER = IceRiverModels
HAMMER = HammerModels
VOLCMINER = VolcMinerModels
BRAIINS = BraiinsModels

View File

@@ -58,5 +58,9 @@ class HammerMake(BaseMiner):
make = MinerMake.HAMMER
class VolcMinerMake(BaseMiner):
make = MinerMake.VOLCMINER
class BraiinsMake(BaseMiner):
make = MinerMake.BRAIINS

View File

@@ -23,4 +23,5 @@ from .goldshell import *
from .hammer import *
from .iceriver import *
from .innosilicon import *
from .volcminer import *
from .whatsminer import *

View File

@@ -0,0 +1,27 @@
# ------------------------------------------------------------------------------
# Copyright 2024 Upstream Data Inc -
# -
# Licensed under the Apache License, Version 2.0 (the "License"); -
# you may not use this file except in compliance with the License. -
# You may obtain a copy of the License at -
# -
# http://www.apache.org/licenses/LICENSE-2.0 -
# -
# Unless required by applicable law or agreed to in writing, software -
# distributed under the License is distributed on an "AS IS" BASIS, -
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -
# See the License for the specific language governing permissions and -
# limitations under the License. -
# ------------------------------------------------------------------------------
from pyasic.device.algorithm import MinerAlgo
from pyasic.device.models import MinerModel
from pyasic.miners.device.makes import VolcMinerMake
class D1(VolcMinerMake):
raw_model = MinerModel.VOLCMINER.D1
expected_chips = 105
expected_hashboards = 3
expected_fans = 4
algo = MinerAlgo.SCRYPT

View File

@@ -0,0 +1 @@
from .D1 import D1

View File

@@ -0,0 +1 @@
from .DX import *

View File

@@ -41,6 +41,7 @@ from pyasic.miners.goldshell import *
from pyasic.miners.hammer import *
from pyasic.miners.iceriver import *
from pyasic.miners.innosilicon import *
from pyasic.miners.volcminer import *
from pyasic.miners.whatsminer import *
@@ -60,6 +61,7 @@ class MinerTypes(enum.Enum):
BITAXE = 12
ICERIVER = 13
HAMMER = 14
VOLCMINER = 15
MINER_CLASSES = {
@@ -494,6 +496,10 @@ MINER_CLASSES = {
None: type("HammerUnknown", (BlackMiner, HammerMake), {}),
"HAMMER D10": HammerD10,
},
MinerTypes.VOLCMINER: {
None: type("VolcMinerUnknown", (BlackMiner, VolcMinerMake), {}),
"VOLCMINER D1": VolcMinerD1,
},
}
@@ -573,6 +579,7 @@ class MinerFactory:
MinerTypes.BITAXE: self.get_miner_model_bitaxe,
MinerTypes.ICERIVER: self.get_miner_model_iceriver,
MinerTypes.HAMMER: self.get_miner_model_hammer,
MinerTypes.VOLCMINER: self.get_miner_model_volcminer,
}
fn = miner_model_fns.get(miner_type)
@@ -620,6 +627,12 @@ class MinerFactory:
res = await self.send_web_command(ip, "/kaonsu/v1/brief", auth=auth)
if res is not None:
mtype = MinerTypes.MARATHON
if mtype == MinerTypes.HAMMER:
res = await self.get_miner_model_hammer(ip)
if "HAMMER" in res.upper():
mtype = MinerTypes.HAMMER
else:
mtype = MinerTypes.VOLCMINER
return mtype
@staticmethod
@@ -1171,6 +1184,21 @@ class MinerFactory:
except (TypeError, LookupError):
pass
async def get_miner_model_volcminer(self, ip: str) -> str | None:
auth = httpx.DigestAuth(
"root", settings.get("default_volcminer_web_password", "root")
)
web_json_data = await self.send_web_command(
ip, "/cgi-bin/get_system_info.cgi", auth=auth
)
try:
miner_model = web_json_data["minertype"]
return miner_model
except (TypeError, LookupError):
pass
miner_factory = MinerFactory()

View File

@@ -0,0 +1 @@
from .blackminer import *

View File

@@ -0,0 +1,6 @@
from pyasic.miners.backends import BlackMiner
from pyasic.miners.device.models import D1
class VolcMinerD1(BlackMiner, D1):
sticker_hashrate = 15150

View File

@@ -0,0 +1 @@
from .D1 import VolcMinerD1

View File

@@ -0,0 +1 @@
from .DX import *

View File

@@ -31,7 +31,8 @@ _settings = { # defaults
"default_whatsminer_rpc_password": "admin",
"default_innosilicon_web_password": "admin",
"default_antminer_web_password": "root",
"default_hammer_web_password": "root",
"default_hammer_web_password": "ltc@dog",
"default_volcminer_web_password": "ltc@dog",
"default_bosminer_web_password": "root",
"default_vnish_web_password": "admin",
"default_goldshell_web_password": "123456789",