diff --git a/pyasic/miners/backends/vnish.py b/pyasic/miners/backends/vnish.py index fad65426..c7df4c81 100644 --- a/pyasic/miners/backends/vnish.py +++ b/pyasic/miners/backends/vnish.py @@ -14,6 +14,7 @@ # limitations under the License. - # ------------------------------------------------------------------------------ +import logging from typing import Optional from pyasic import MinerConfig @@ -272,3 +273,19 @@ class VNish(VNishFirmware, BMMiner): return self.config self.config = MinerConfig.from_vnish(web_settings, web_presets) return self.config + + async def set_power_limit(self, wattage: int) -> bool: + # Can only set power limit to tuned preset + try: + await self.web.set_power_limit(wattage) + updated_settings = await self.web.settings() + except APIError: + raise + except Exception as e: + logging.warning(f"{self} - Failed to set power limit: {e}") + return False + + if int(updated_settings["miner"]["overclock"]["preset"]) == wattage: + return True + else: + return False diff --git a/pyasic/web/vnish.py b/pyasic/web/vnish.py index 3333633e..1850ede6 100644 --- a/pyasic/web/vnish.py +++ b/pyasic/web/vnish.py @@ -138,6 +138,15 @@ class VNishWebAPI(BaseWebAPI): async def settings(self) -> dict: return await self.send_command("settings") + async def set_power_limit(self, wattage: int) -> bool: + # Can only set power limit to tuned preset + settings = await self.settings() + settings["miner"]["overclock"]["preset"] = str(wattage) + new_settings = {"miner": {"overclock": settings["miner"]["overclock"]}} + + # response will always be {"restart_required":false,"reboot_required":false} even if unsuccessful + return await self.send_command("settings", privileged=True, **new_settings) + async def autotune_presets(self) -> dict: return await self.send_command("autotune/presets")