From 696b922e2d24b8706896155673b3bfaedd3d2707 Mon Sep 17 00:00:00 2001 From: Wilfred Allyn Date: Sun, 15 Feb 2026 19:34:08 +0000 Subject: [PATCH] feat(luxos): implement _is_mining using CurtailMode from config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LuxOS miners had no _is_mining implementation, so MinerData.is_mining always defaulted to True — even when the miner was in curtail sleep mode with 0 hashrate and PSU off. The LuxOS config API returns a CurtailMode field: - 'Sleep': miner is in curtail sleep (boards off, PSU off) - 'WakeUp': miner is ramping up from sleep - None: miner is running normally _is_mining now returns False when CurtailMode is 'Sleep', True otherwise. Uses the existing rpc_config data (no additional API calls needed). --- pyasic/miners/backends/luxminer.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pyasic/miners/backends/luxminer.py b/pyasic/miners/backends/luxminer.py index 48dbc735..abc17b64 100644 --- a/pyasic/miners/backends/luxminer.py +++ b/pyasic/miners/backends/luxminer.py @@ -73,6 +73,9 @@ str(DataOptions.FAULT_LIGHT): DataFunction( "_get_fault_light", [RPCAPICommand("rpc_config", "config")] ), + str(DataOptions.IS_MINING): DataFunction( + "_is_mining", [RPCAPICommand("rpc_config", "config")] + ), } ) @@ -437,6 +440,21 @@ async def _get_fault_light(self, rpc_config: dict | None = None) -> bool | None: pass return None + async def _is_mining(self, rpc_config: dict | None = None) -> bool | None: + if rpc_config is None: + try: + rpc_config = await self.rpc.config() + except APIError: + pass + + if rpc_config is not None: + try: + curtail_mode = rpc_config["CONFIG"][0].get("CurtailMode") + return curtail_mode != "Sleep" + except (LookupError, IndexError): + pass + return None + async def _get_pools(self, rpc_pools: dict | None = None) -> list[PoolMetrics]: if rpc_pools is None: try: