Compare commits

..

10 Commits

Author SHA1 Message Date
Brett Rowan
beae79ddec version: bump version number. 2024-08-25 10:36:32 -06:00
Brett Rowan
f02e10ab3d bug: fix token not needing to be passed to upgrade wm firmware. 2024-08-25 10:36:11 -06:00
Brett Rowan
d0b9dff476 version: bump version number. 2024-08-25 09:28:46 -06:00
Brett Rowan
501e290839 bug: fix a bug where whatsminers could raise a cascading TimeoutError. 2024-08-25 09:28:27 -06:00
Brett Rowan
a0daf37f80 bug: fix some miners not having matching params due to inheritance. 2024-08-25 09:28:17 -06:00
Brett Rowan
8111b1ff4b refactor: simplify some bad code in scan_network_generator 2024-08-25 09:13:02 -06:00
Brett Rowan
754087afd6 Merge pull request #195 from Ytemiloluwa/CGMiner
feat: Add _get_pools method for CGMiner (StockFirmware)
2024-08-23 14:57:35 -06:00
ytemiloluwa
5e16b6092c backends: add _get_pools for CGMiner 2024-08-24 00:51:10 +04:00
Brett Rowan
f124f5422a Merge pull request #194 from jameshilliard/remove-struct 2024-08-22 17:55:52 -06:00
James Hilliard
1e5d1a2528 Cleanup unused struct import 2024-08-22 17:53:54 -06:00
8 changed files with 58 additions and 16 deletions

View File

@@ -427,6 +427,10 @@ ANTMINER_OLD_DATA_LOC = DataLocations(
"_get_uptime",
[RPCAPICommand("rpc_stats", "stats")],
),
str(DataOptions.POOLS): DataFunction(
"_get_pools",
[RPCAPICommand("rpc_pools", "pools")],
),
}
)

View File

@@ -68,6 +68,10 @@ AVALON_DATA_LOC = DataLocations(
"_get_uptime",
[RPCAPICommand("rpc_stats", "stats")],
),
str(DataOptions.POOLS): DataFunction(
"_get_pools",
[RPCAPICommand("rpc_pools", "pools")],
),
}
)

View File

@@ -655,13 +655,12 @@ class BTMiner(StockFirmware):
except LookupError:
pass
async def upgrade_firmware(self, file: Path, token: str):
async def upgrade_firmware(self, file: Path):
"""
Upgrade the firmware of the Whatsminer device.
Args:
file (Path): The local file path of the firmware to be uploaded.
token (str): The authentication token for the firmware upgrade.
Returns:
str: Confirmation message after upgrading the firmware.

View File

@@ -14,7 +14,7 @@
# limitations under the License. -
# ------------------------------------------------------------------------------
from typing import Optional
from typing import Optional, List
from pyasic.config import MinerConfig
from pyasic.data import AlgoHashRate, HashUnit
@@ -22,6 +22,7 @@ from pyasic.errors import APIError
from pyasic.miners.data import DataFunction, DataLocations, DataOptions, RPCAPICommand
from pyasic.miners.device.firmware import StockFirmware
from pyasic.rpc.cgminer import CGMinerRPCAPI
from pyasic.data.pools import PoolMetrics, PoolUrl
CGMINER_DATA_LOC = DataLocations(
**{
@@ -53,6 +54,10 @@ CGMINER_DATA_LOC = DataLocations(
"_get_uptime",
[RPCAPICommand("rpc_stats", "stats")],
),
str(DataOptions.POOLS): DataFunction(
"_get_pools",
[RPCAPICommand("rpc_pools", "pools")],
),
}
)
@@ -136,3 +141,33 @@ class CGMiner(StockFirmware):
return int(rpc_stats["STATS"][1]["Elapsed"])
except LookupError:
pass
async def _get_pools(self, rpc_pools: dict = None) -> List[PoolMetrics]:
if rpc_pools is None:
try:
rpc_pools = await self.rpc.pools()
except APIError:
pass
pools_data = []
if rpc_pools is not None:
try:
pools = rpc_pools.get("POOLS", [])
for pool_info in pools:
url = pool_info.get("URL")
pool_url = PoolUrl.from_str(url) if url else None
pool_data = PoolMetrics(
accepted=pool_info.get("Accepted"),
rejected=pool_info.get("Rejected"),
get_failures=pool_info.get("Get Failures"),
remote_failures=pool_info.get("Remote Failures"),
active=pool_info.get("Stratum Active"),
alive=pool_info.get("Status") == "Alive",
url=pool_url,
user=pool_info.get("User"),
index=pool_info.get("POOL"),
)
pools_data.append(pool_data)
except LookupError:
pass
return pools_data

View File

@@ -144,12 +144,9 @@ class MinerNetwork:
Returns:
An asynchronous generator containing found miners.
"""
# get the current event loop
loop = asyncio.get_event_loop()
# create a list of scan tasks
miners = asyncio.as_completed(
[loop.create_task(self.ping_and_get_miner(host)) for host in self.hosts]
[asyncio.create_task(self.ping_and_get_miner(host)) for host in self.hosts]
)
for miner in miners:
try:

View File

@@ -215,14 +215,18 @@ If you are sure you want to use this command please use API.send_command("{comma
return b"{}"
# send the command
data_task = asyncio.create_task(self._read_bytes(reader, timeout=timeout))
logging.debug(f"{self} - ([Hidden] Send Bytes) - Writing")
writer.write(data)
logging.debug(f"{self} - ([Hidden] Send Bytes) - Draining")
await writer.drain()
try:
data_task = asyncio.create_task(self._read_bytes(reader, timeout=timeout))
logging.debug(f"{self} - ([Hidden] Send Bytes) - Writing")
writer.write(data)
logging.debug(f"{self} - ([Hidden] Send Bytes) - Draining")
await writer.drain()
await data_task
ret_data = data_task.result()
await data_task
ret_data = data_task.result()
except TimeoutError:
logging.warning(f"{self} - ([Hidden] Send Bytes) - Read timeout expired.")
return b"{}"
# close the connection
logging.debug(f"{self} - ([Hidden] Send Bytes) - Closing")

View File

@@ -13,7 +13,6 @@
# See the License for the specific language governing permissions and -
# limitations under the License. -
# ------------------------------------------------------------------------------
import struct
from ssl import SSLContext
from typing import Any, Union

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "pyasic"
version = "0.59.4"
version = "0.59.6"
description = "A simplified and standardized interface for Bitcoin ASICs."
authors = ["UpstreamData <brett@upstreamdata.ca>"]
repository = "https://github.com/UpstreamData/pyasic"