Skip to content

Commit 6418c2e

Browse files
committed
feature: add BTMinerV3 control support
1 parent aa9f3b2 commit 6418c2e

2 files changed

Lines changed: 89 additions & 10 deletions

File tree

pyasic/miners/backends/btminer.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -829,6 +829,85 @@ class BTMinerV3(StockFirmware):
829829
supports_autotuning = True
830830
supports_power_modes = True
831831

832+
async def fault_light_off(self) -> bool:
833+
try:
834+
data = await self.rpc.set_system_led()
835+
except APIError:
836+
return False
837+
if data:
838+
if "code" in data.keys():
839+
if data["code"] == 0:
840+
self.light = False
841+
return True
842+
return False
843+
844+
async def fault_light_on(self) -> bool:
845+
try:
846+
data = await self.rpc.set_system_led(
847+
leds=[
848+
{
849+
{"color": "red", "period": 60, "duration": 20, "start": 0},
850+
}
851+
],
852+
)
853+
except APIError:
854+
return False
855+
if data:
856+
if "code" in data.keys():
857+
if data["code"] == 0:
858+
self.light = True
859+
return True
860+
return False
861+
862+
async def reboot(self) -> bool:
863+
try:
864+
data = await self.rpc.set_system_reboot()
865+
except APIError:
866+
return False
867+
if data.get("msg"):
868+
if data["msg"] == "ok":
869+
return True
870+
return False
871+
872+
async def restart_backend(self) -> bool:
873+
try:
874+
data = await self.rpc.set_miner_service("restart")
875+
except APIError:
876+
return False
877+
if data.get("msg"):
878+
if data["msg"] == "ok":
879+
return True
880+
return False
881+
882+
async def stop_mining(self) -> bool:
883+
try:
884+
data = await self.rpc.set_miner_service("stop")
885+
except APIError:
886+
return False
887+
if data.get("msg"):
888+
if data["msg"] == "ok":
889+
return True
890+
return False
891+
892+
async def resume_mining(self) -> bool:
893+
try:
894+
data = await self.rpc.set_miner_service("start")
895+
except APIError:
896+
return False
897+
if data.get("msg"):
898+
if data["msg"] == "ok":
899+
return True
900+
return False
901+
902+
async def set_power_limit(self, wattage: int) -> bool:
903+
try:
904+
await self.rpc.set_miner_power_limit(wattage)
905+
except Exception as e:
906+
logging.warning(f"{self} set_power_limit: {e}")
907+
return False
908+
else:
909+
return True
910+
832911
async def _get_mac(self, rpc_get_device_info: dict = None) -> str | None:
833912
if rpc_get_device_info is None:
834913
try:

pyasic/rpc/btminer.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,8 +1256,7 @@ async def get_log_download(self) -> dict | None:
12561256
async def get_fan_setting(self) -> dict | None:
12571257
return await self.send_command("get.fan.setting")
12581258

1259-
async def set_system_reboot(self, *args, **kwargs) -> dict | None:
1260-
raise NotImplementedError
1259+
async def set_system_reboot(self) -> dict | None:
12611260
return await self.send_command("set.system.reboot")
12621261

12631262
async def set_system_factory_reset(self, *args, **kwargs) -> dict | None:
@@ -1272,8 +1271,11 @@ async def set_system_net_config(self, *args, **kwargs) -> dict | None:
12721271
raise NotImplementedError
12731272
return await self.send_command("set.system.net_config")
12741273

1275-
async def set_system_led(self, *args, **kwargs) -> dict | None:
1276-
return await self.send_command("set.system.led", "auto")
1274+
async def set_system_led(self, leds: list | None = None) -> dict | None:
1275+
if leds is None:
1276+
return await self.send_command("set.system.led", parameters="auto")
1277+
else:
1278+
return await self.send_command("set.system.led", parameters=leds)
12771279

12781280
async def set_system_time_randomized(self, *args, **kwargs) -> dict | None:
12791281
raise NotImplementedError
@@ -1303,9 +1305,8 @@ async def set_system_ntp_server(self, *args, **kwargs) -> dict | None:
13031305
raise NotImplementedError
13041306
return await self.send_command("set.system.ntp_server")
13051307

1306-
async def set_miner_service(self, *args, **kwargs) -> dict | None:
1307-
raise NotImplementedError
1308-
return await self.send_command("set.miner.service")
1308+
async def set_miner_service(self, value: str) -> dict | None:
1309+
return await self.send_command("set.miner.service", parameters=value)
13091310

13101311
async def set_miner_power_mode(self, *args, **kwargs) -> dict | None:
13111312
raise NotImplementedError
@@ -1340,9 +1341,8 @@ async def set_miner_report(self, frequency: int = 1) -> dict | None:
13401341
"set.miner.report", parameters={"gap": frequency}
13411342
)
13421343

1343-
async def set_miner_power_limit(self, *args, **kwargs) -> dict | None:
1344-
raise NotImplementedError
1345-
return await self.send_command("set.miner.power_limit")
1344+
async def set_miner_power_limit(self, power: int) -> dict | None:
1345+
return await self.send_command("set.miner.power_limit", parameters=power)
13461346

13471347
async def set_miner_upfreq_speed(self, *args, **kwargs) -> dict | None:
13481348
raise NotImplementedError

0 commit comments

Comments
 (0)