Skip to content

Commit 067a376

Browse files
committed
feature: add support for luckyminer LV08
1 parent a5d6e12 commit 067a376

File tree

25 files changed

+379
-257
lines changed

25 files changed

+379
-257
lines changed

docs/generate_miners.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ def backend_str(backend: MinerTypes) -> str:
5151
return "Mara Firmware Miners"
5252
case MinerTypes.BITAXE:
5353
return "Stock Firmware BitAxe Miners"
54+
case MinerTypes.LUCKYMINER:
55+
return "Stock Firmware Lucky Miners"
5456
case MinerTypes.ICERIVER:
5557
return "Stock Firmware IceRiver Miners"
5658
case MinerTypes.HAMMER:

docs/miners/antminer/X19.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,19 @@
495495
show_root_heading: false
496496
heading_level: 0
497497

498+
## S19i (VNish)
499+
500+
- [x] Shutdowns
501+
- [ ] Power Modes
502+
- [x] Setpoints
503+
- [x] Presets
504+
505+
::: pyasic.miners.antminer.vnish.X19.S19.VNishS19i
506+
handler: python
507+
options:
508+
show_root_heading: false
509+
heading_level: 0
510+
498511
## S19j (VNish)
499512

500513
- [x] Shutdowns

docs/miners/luckyminer/LV.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# pyasic
2+
## LV Models
3+
4+
## LV08 (Stock)
5+
6+
- [ ] Shutdowns
7+
- [ ] Power Modes
8+
- [ ] Setpoints
9+
- [ ] Presets
10+
11+
::: pyasic.miners.luckyminer.espminer.LV.LV08.LuckyMinerLV08
12+
handler: python
13+
options:
14+
show_root_heading: false
15+
heading_level: 0
16+

docs/miners/supported_types.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,7 @@ details {
694694
<li><a href="../antminer/X19#s19-no-pic-vnish">S19 No PIC (VNish)</a></li>
695695
<li><a href="../antminer/X19#s19-pro-vnish">S19 Pro (VNish)</a></li>
696696
<li><a href="../antminer/X19#s19j-vnish">S19j (VNish)</a></li>
697+
<li><a href="../antminer/X19#s19i-vnish">S19i (VNish)</a></li>
697698
<li><a href="../antminer/X19#s19j-pro-vnish">S19j Pro (VNish)</a></li>
698699
<li><a href="../antminer/X19#s19j-pro-vnish">S19j Pro (VNish)</a></li>
699700
<li><a href="../antminer/X19#s19j-pro-vnish">S19j Pro (VNish)</a></li>
@@ -859,6 +860,17 @@ details {
859860
</ul>
860861
</details>
861862
<details>
863+
<summary>Stock Firmware Lucky Miners:</summary>
864+
<ul>
865+
<details>
866+
<summary>LV Series:</summary>
867+
<ul>
868+
<li><a href="../luckyminer/LV#lv08-stock">LV08 (Stock)</a></li>
869+
</ul>
870+
</details>
871+
</ul>
872+
</details>
873+
<details>
862874
<summary>Stock Firmware IceRiver Miners:</summary>
863875
<ul>
864876
<details>

pyasic/config/__init__.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,12 @@ def as_mara(self, user_suffix: str | None = None) -> dict:
143143
**self.pools.as_mara(user_suffix=user_suffix),
144144
}
145145

146-
def as_bitaxe(self, user_suffix: str | None = None) -> dict:
146+
def as_espminer(self, user_suffix: str | None = None) -> dict:
147147
return {
148-
**self.fan_mode.as_bitaxe(),
149-
**self.temperature.as_bitaxe(),
150-
**self.mining_mode.as_bitaxe(),
151-
**self.pools.as_bitaxe(user_suffix=user_suffix),
148+
**self.fan_mode.as_espminer(),
149+
**self.temperature.as_espminer(),
150+
**self.mining_mode.as_espminer(),
151+
**self.pools.as_espminer(user_suffix=user_suffix),
152152
}
153153

154154
def as_luxos(self, user_suffix: str | None = None) -> dict:
@@ -272,10 +272,10 @@ def from_mara(cls, web_miner_config: dict) -> "MinerConfig":
272272
)
273273

274274
@classmethod
275-
def from_bitaxe(cls, web_system_info: dict) -> "MinerConfig":
275+
def from_espminer(cls, web_system_info: dict) -> "MinerConfig":
276276
return cls(
277-
pools=PoolConfig.from_bitaxe(web_system_info),
278-
fan_mode=FanModeConfig.from_bitaxe(web_system_info),
277+
pools=PoolConfig.from_espminer(web_system_info),
278+
fan_mode=FanModeConfig.from_espminer(web_system_info),
279279
)
280280

281281
@classmethod

pyasic/config/base.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ def as_auradine(self) -> dict:
6161
def as_mara(self) -> dict:
6262
return self.value.as_mara()
6363

64-
def as_bitaxe(self) -> dict:
65-
return self.value.as_bitaxe()
64+
def as_espminer(self) -> dict:
65+
return self.value.as_espminer()
6666

6767
def as_luxos(self) -> dict:
6868
return self.value.as_luxos()
@@ -125,7 +125,7 @@ def as_auradine(self) -> dict:
125125
def as_mara(self) -> dict:
126126
return {}
127127

128-
def as_bitaxe(self) -> dict:
128+
def as_espminer(self) -> dict:
129129
return {}
130130

131131
def as_luxos(self) -> dict:

pyasic/config/fans.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def as_mara(self) -> dict:
8181
},
8282
}
8383

84-
def as_bitaxe(self) -> dict:
84+
def as_espminer(self) -> dict:
8585
return {"autoFanspeed": 1}
8686

8787
def as_luxos(self) -> dict:
@@ -156,7 +156,7 @@ def as_mara(self) -> dict:
156156
},
157157
}
158158

159-
def as_bitaxe(self) -> dict:
159+
def as_espminer(self) -> dict:
160160
return {"autoFanspeed": 0, "fanspeed": self.speed}
161161

162162
def as_luxos(self) -> dict:
@@ -342,7 +342,7 @@ def from_mara(cls, web_config: dict):
342342
return cls.default()
343343

344344
@classmethod
345-
def from_bitaxe(cls, web_system_info: dict):
345+
def from_espminer(cls, web_system_info: dict):
346346
if web_system_info["autofanspeed"] == 1:
347347
return cls.normal()
348348
else:

pyasic/config/pools.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ def as_mara(self, user_suffix: str | None = None) -> dict:
102102
"pass": self.password,
103103
}
104104

105-
def as_bitaxe(self, user_suffix: str | None = None) -> dict:
105+
def as_espminer(self, user_suffix: str | None = None) -> dict:
106106
return {
107107
"stratumURL": self.url,
108108
"stratumUser": f"{self.user}{user_suffix or ''}",
@@ -192,7 +192,7 @@ def from_mara(cls, web_pool: dict) -> "Pool":
192192
)
193193

194194
@classmethod
195-
def from_bitaxe(cls, web_system_info: dict) -> "Pool":
195+
def from_espminer(cls, web_system_info: dict) -> "Pool":
196196
url = f"stratum+tcp://{web_system_info['stratumURL']}:{web_system_info['stratumPort']}"
197197
return cls(
198198
url=url,
@@ -306,8 +306,8 @@ def as_epic(self, user_suffix: str | None = None) -> list:
306306
def as_mara(self, user_suffix: str | None = None) -> list:
307307
return [p.as_mara(user_suffix=user_suffix) for p in self.pools]
308308

309-
def as_bitaxe(self, user_suffix: str | None = None) -> dict:
310-
return self.pools[0].as_bitaxe(user_suffix=user_suffix)
309+
def as_espminer(self, user_suffix: str | None = None) -> dict:
310+
return self.pools[0].as_espminer(user_suffix=user_suffix)
311311

312312
def as_boser(self, user_suffix: str | None = None) -> PoolGroupConfiguration:
313313
return PoolGroupConfiguration(
@@ -395,8 +395,8 @@ def from_mara(cls, web_config_pools: dict) -> "PoolGroup":
395395
return cls(pools=[Pool.from_mara(pool_conf) for pool_conf in web_config_pools])
396396

397397
@classmethod
398-
def from_bitaxe(cls, web_system_info: dict) -> "PoolGroup":
399-
return cls(pools=[Pool.from_bitaxe(web_system_info)])
398+
def from_espminer(cls, web_system_info: dict) -> "PoolGroup":
399+
return cls(pools=[Pool.from_espminer(web_system_info)])
400400

401401
@classmethod
402402
def from_iceriver(cls, web_userpanel: dict) -> "PoolGroup":
@@ -507,8 +507,8 @@ def as_mara(self, user_suffix: str | None = None) -> dict:
507507
return {"pools": self.groups[0].as_mara(user_suffix=user_suffix)}
508508
return {"pools": []}
509509

510-
def as_bitaxe(self, user_suffix: str | None = None) -> dict:
511-
return self.groups[0].as_bitaxe(user_suffix=user_suffix)
510+
def as_espminer(self, user_suffix: str | None = None) -> dict:
511+
return self.groups[0].as_espminer(user_suffix=user_suffix)
512512

513513
def as_luxos(self, user_suffix: str | None = None) -> dict:
514514
return {}
@@ -576,8 +576,8 @@ def from_mara(cls, web_config: dict) -> "PoolConfig":
576576
return cls(groups=[PoolGroup.from_mara(web_config["pools"])])
577577

578578
@classmethod
579-
def from_bitaxe(cls, web_system_info: dict) -> "PoolConfig":
580-
return cls(groups=[PoolGroup.from_bitaxe(web_system_info)])
579+
def from_espminer(cls, web_system_info: dict) -> "PoolConfig":
580+
return cls(groups=[PoolGroup.from_espminer(web_system_info)])
581581

582582
@classmethod
583583
def from_iceriver(cls, web_userpanel: dict) -> "PoolConfig":

pyasic/device/makes.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class MinerMake(str, Enum):
2626
AURADINE = "Auradine"
2727
EPIC = "ePIC"
2828
BITAXE = "BitAxe"
29+
LUCKYMINER = "LuckyMiner"
2930
ICERIVER = "IceRiver"
3031
HAMMER = "Hammer"
3132
VOLCMINER = "VolcMiner"

pyasic/device/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,13 @@ def __str__(self):
507507
return self.value
508508

509509

510+
class LuckyMinerModels(MinerModelType):
511+
BM1366 = "LV08"
512+
513+
def __str__(self):
514+
return self.value
515+
516+
510517
class IceRiverModels(MinerModelType):
511518
KS0 = "KS0"
512519
KS1 = "KS1"
@@ -550,6 +557,7 @@ class MinerModel:
550557
AURADINE = AuradineModels
551558
EPIC = ePICModels
552559
BITAXE = BitAxeModels
560+
LUCKYMINER = LuckyMinerModels
553561
ICERIVER = IceRiverModels
554562
HAMMER = HammerModels
555563
VOLCMINER = VolcMinerModels

0 commit comments

Comments
 (0)