Skip to content

Commit b8ae238

Browse files
Fix incorrect computation of active_preset for Antminer VNish. See #338. (#339)
* Fix incorrect computation of active_preset for Antminer VNish. See #338. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * #338 renamed perf_summary to web_perf_summary for clarity and consistency. New API call is done in backward compatibility manner. Data is also retrieved safely * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 2920639 commit b8ae238

File tree

5 files changed

+32
-12
lines changed

5 files changed

+32
-12
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Welcome to `pyasic`! `pyasic` uses an asynchronous method of communicating with
2323
## Installation
2424

2525
It is recommended to install `pyasic` in a [virtual environment](https://realpython.com/python-virtual-environments-a-primer/#what-other-popular-options-exist-aside-from-venv) to isolate it from the rest of your system. Options include:
26-
- [pypoetry](https://python-poetry.org/): the reccommended way, since pyasic already uses it by default
26+
- [pypoetry](https://python-poetry.org/): the reccommended way, since pyasic already uses it by default. Use version 2.0+
2727

2828
```
2929
poetry install

pyasic/config/__init__.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,13 +283,17 @@ def from_epic(cls, web_conf: dict) -> "MinerConfig":
283283
)
284284

285285
@classmethod
286-
def from_vnish(cls, web_settings: dict, web_presets: list[dict]) -> "MinerConfig":
286+
def from_vnish(
287+
cls, web_settings: dict, web_presets: list[dict], web_perf_summary: dict
288+
) -> "MinerConfig":
287289
"""Constructs a MinerConfig object from web settings for VNish miners."""
288290
return cls(
289291
pools=PoolConfig.from_vnish(web_settings),
290292
fan_mode=FanModeConfig.from_vnish(web_settings),
291293
temperature=TemperatureConfig.from_vnish(web_settings),
292-
mining_mode=MiningModeConfig.from_vnish(web_settings, web_presets),
294+
mining_mode=MiningModeConfig.from_vnish(
295+
web_settings, web_presets, web_perf_summary
296+
),
293297
)
294298

295299
@classmethod

pyasic/config/mining/__init__.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -412,12 +412,18 @@ def as_vnish(self) -> dict:
412412

413413
@classmethod
414414
def from_vnish(
415-
cls, web_overclock_settings: dict, web_presets: list[dict]
415+
cls,
416+
web_overclock_settings: dict,
417+
web_presets: list[dict],
418+
web_perf_summary: dict,
416419
) -> "MiningModePreset":
417-
active_preset = None
418-
for preset in web_presets:
419-
if preset["name"] == web_overclock_settings["preset"]:
420-
active_preset = preset
420+
active_preset = web_perf_summary.get("current_preset")
421+
422+
if active_preset is None:
423+
for preset in web_presets:
424+
if preset["name"] == web_overclock_settings["preset"]:
425+
active_preset = preset
426+
421427
return cls(
422428
active_preset=MiningPreset.from_vnish(active_preset),
423429
available_presets=[MiningPreset.from_vnish(p) for p in web_presets],
@@ -703,7 +709,9 @@ def from_bosminer(cls, toml_conf: dict):
703709
return cls.default()
704710

705711
@classmethod
706-
def from_vnish(cls, web_settings: dict, web_presets: list[dict]):
712+
def from_vnish(
713+
cls, web_settings: dict, web_presets: list[dict], web_perf_summary: dict
714+
):
707715
try:
708716
mode_settings = web_settings["miner"]["overclock"]
709717
except KeyError:
@@ -712,7 +720,9 @@ def from_vnish(cls, web_settings: dict, web_presets: list[dict]):
712720
if mode_settings["preset"] == "disabled":
713721
return MiningModeManual.from_vnish(mode_settings)
714722
else:
715-
return MiningModePreset.from_vnish(mode_settings, web_presets)
723+
return MiningModePreset.from_vnish(
724+
mode_settings, web_presets, web_perf_summary
725+
)
716726

717727
@classmethod
718728
def from_boser(cls, grpc_miner_conf: dict):

pyasic/miners/backends/vnish.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,9 +293,12 @@ async def get_config(self) -> MinerConfig:
293293
try:
294294
web_settings = await self.web.settings()
295295
web_presets = await self.web.autotune_presets()
296+
web_perf_summary = (await self.web.perf_summary()) or {}
296297
except APIError:
297298
return self.config
298-
self.config = MinerConfig.from_vnish(web_settings, web_presets)
299+
self.config = MinerConfig.from_vnish(
300+
web_settings, web_presets, web_perf_summary
301+
)
299302
return self.config
300303

301304
async def set_power_limit(self, wattage: int) -> bool:

pyasic/web/vnish.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ async def send_command(
5858
allow_warning: bool = True,
5959
privileged: bool = False,
6060
**parameters: Any,
61-
) -> dict:
61+
) -> dict | None:
6262
post = privileged or not parameters == {}
6363
if self.token is None:
6464
await self.auth()
@@ -126,6 +126,9 @@ async def info(self) -> dict:
126126
async def summary(self) -> dict:
127127
return await self.send_command("summary")
128128

129+
async def perf_summary(self) -> dict:
130+
return await self.send_command("perf-summary")
131+
129132
async def chips(self) -> dict:
130133
return await self.send_command("chips")
131134

0 commit comments

Comments
 (0)