feature: add BTMinerV3 control support

This commit is contained in:
Brett Rowan
2025-08-14 11:39:31 -06:00
parent aa9f3b2c45
commit 6418c2e102
2 changed files with 89 additions and 10 deletions

View File

@@ -829,6 +829,85 @@ class BTMinerV3(StockFirmware):
supports_autotuning = True
supports_power_modes = True
async def fault_light_off(self) -> bool:
try:
data = await self.rpc.set_system_led()
except APIError:
return False
if data:
if "code" in data.keys():
if data["code"] == 0:
self.light = False
return True
return False
async def fault_light_on(self) -> bool:
try:
data = await self.rpc.set_system_led(
leds=[
{
{"color": "red", "period": 60, "duration": 20, "start": 0},
}
],
)
except APIError:
return False
if data:
if "code" in data.keys():
if data["code"] == 0:
self.light = True
return True
return False
async def reboot(self) -> bool:
try:
data = await self.rpc.set_system_reboot()
except APIError:
return False
if data.get("msg"):
if data["msg"] == "ok":
return True
return False
async def restart_backend(self) -> bool:
try:
data = await self.rpc.set_miner_service("restart")
except APIError:
return False
if data.get("msg"):
if data["msg"] == "ok":
return True
return False
async def stop_mining(self) -> bool:
try:
data = await self.rpc.set_miner_service("stop")
except APIError:
return False
if data.get("msg"):
if data["msg"] == "ok":
return True
return False
async def resume_mining(self) -> bool:
try:
data = await self.rpc.set_miner_service("start")
except APIError:
return False
if data.get("msg"):
if data["msg"] == "ok":
return True
return False
async def set_power_limit(self, wattage: int) -> bool:
try:
await self.rpc.set_miner_power_limit(wattage)
except Exception as e:
logging.warning(f"{self} set_power_limit: {e}")
return False
else:
return True
async def _get_mac(self, rpc_get_device_info: dict = None) -> str | None:
if rpc_get_device_info is None:
try:

View File

@@ -1256,8 +1256,7 @@ class BTMinerV3RPCAPI(BaseMinerRPCAPI):
async def get_fan_setting(self) -> dict | None:
return await self.send_command("get.fan.setting")
async def set_system_reboot(self, *args, **kwargs) -> dict | None:
raise NotImplementedError
async def set_system_reboot(self) -> dict | None:
return await self.send_command("set.system.reboot")
async def set_system_factory_reset(self, *args, **kwargs) -> dict | None:
@@ -1272,8 +1271,11 @@ class BTMinerV3RPCAPI(BaseMinerRPCAPI):
raise NotImplementedError
return await self.send_command("set.system.net_config")
async def set_system_led(self, *args, **kwargs) -> dict | None:
return await self.send_command("set.system.led", "auto")
async def set_system_led(self, leds: list | None = None) -> dict | None:
if leds is None:
return await self.send_command("set.system.led", parameters="auto")
else:
return await self.send_command("set.system.led", parameters=leds)
async def set_system_time_randomized(self, *args, **kwargs) -> dict | None:
raise NotImplementedError
@@ -1303,9 +1305,8 @@ class BTMinerV3RPCAPI(BaseMinerRPCAPI):
raise NotImplementedError
return await self.send_command("set.system.ntp_server")
async def set_miner_service(self, *args, **kwargs) -> dict | None:
raise NotImplementedError
return await self.send_command("set.miner.service")
async def set_miner_service(self, value: str) -> dict | None:
return await self.send_command("set.miner.service", parameters=value)
async def set_miner_power_mode(self, *args, **kwargs) -> dict | None:
raise NotImplementedError
@@ -1340,9 +1341,8 @@ class BTMinerV3RPCAPI(BaseMinerRPCAPI):
"set.miner.report", parameters={"gap": frequency}
)
async def set_miner_power_limit(self, *args, **kwargs) -> dict | None:
raise NotImplementedError
return await self.send_command("set.miner.power_limit")
async def set_miner_power_limit(self, power: int) -> dict | None:
return await self.send_command("set.miner.power_limit", parameters=power)
async def set_miner_upfreq_speed(self, *args, **kwargs) -> dict | None:
raise NotImplementedError