diff --git a/pyasic/miners/backends/vnish.py b/pyasic/miners/backends/vnish.py index 148f43ab..68da3265 100644 --- a/pyasic/miners/backends/vnish.py +++ b/pyasic/miners/backends/vnish.py @@ -310,16 +310,24 @@ async def _get_errors( # type: ignore[override] async def get_config(self) -> MinerConfig: try: web_settings = await self.web.settings() - web_presets_dict = await self.web.autotune_presets() - web_presets = ( - web_presets_dict.get("presets", []) if web_presets_dict else [] + web_presets_response = await self.web.autotune_presets() + if isinstance(web_presets_response, dict): + web_presets = web_presets_response.get("presets", []) + elif isinstance(web_presets_response, list): + web_presets = web_presets_response + else: + web_presets = [] + _perf_summary_raw = await self.web.perf_summary() + web_perf_summary = ( + _perf_summary_raw if isinstance(_perf_summary_raw, dict) else {} + ) + self.config = MinerConfig.from_vnish( + web_settings, web_presets, web_perf_summary ) - web_perf_summary = (await self.web.perf_summary()) or {} except APIError: return self.config or MinerConfig() - self.config = MinerConfig.from_vnish( - web_settings, web_presets, web_perf_summary - ) + except Exception: + return self.config or MinerConfig() return self.config async def set_power_limit(self, wattage: int) -> bool: diff --git a/pyasic/miners/factory.py b/pyasic/miners/factory.py index ee7378aa..69819ed3 100644 --- a/pyasic/miners/factory.py +++ b/pyasic/miners/factory.py @@ -936,7 +936,7 @@ def _parse_web_type(web_text: str, web_resp: httpx.Response) -> MinerTypes | Non return None async def _get_miner_socket(self, ip: str) -> MinerTypes | None: - commands = ["version", "devdetails"] + commands = ["version", "devdetails", "stats"] tasks = [asyncio.create_task(self._socket_ping(ip, cmd)) for cmd in commands] data = await concurrent_get_first_result( @@ -1014,6 +1014,8 @@ def _parse_socket_type(data: str) -> MinerTypes | None: return MinerTypes.MARATHON if "RWGLR" in upper_data: return MinerTypes.MSKMINER + if "VNISH" in upper_data: + return MinerTypes.VNISH if "ANTMINER" in upper_data and "DEVDETAILS" not in upper_data: return MinerTypes.ANTMINER if ( @@ -1028,8 +1030,6 @@ def _parse_socket_type(data: str) -> MinerTypes | None: return MinerTypes.AVALONMINER if "GCMINER" in upper_data or "FLUXOS" in upper_data: return MinerTypes.AURADINE - if "VNISH" in upper_data: - return MinerTypes.VNISH return None async def send_web_command(