Skip to content
This repository was archived by the owner on Jul 6, 2026. It is now read-only.

Commit 66c9b36

Browse files
committed
feature: add serial number for antminers
1 parent 5f0e1da commit 66c9b36

5 files changed

Lines changed: 33 additions & 0 deletions

File tree

pyasic/data/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ class MinerData(BaseModel):
8383

8484
# about
8585
device_info: DeviceInfo | None = None
86+
serial_number: str | None = None
8687
mac: str | None = None
8788
api_ver: str | None = None
8889
fw_ver: str | None = None

pyasic/miners/backends/antminer.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@
3939

4040
ANTMINER_MODERN_DATA_LOC = DataLocations(
4141
**{
42+
str(DataOptions.SERIAL_NUMBER): DataFunction(
43+
"_get_serial_number",
44+
[WebAPICommand("web_get_system_info", "get_system_info")],
45+
),
4246
str(DataOptions.MAC): DataFunction(
4347
"_get_mac",
4448
[WebAPICommand("web_get_system_info", "get_system_info")],
@@ -360,6 +364,21 @@ async def _get_expected_hashrate(
360364
except LookupError:
361365
pass
362366

367+
async def _get_serial_number(
368+
self, web_get_system_info: dict = None
369+
) -> Optional[str]:
370+
if web_get_system_info is None:
371+
try:
372+
web_get_system_info = await self.web.get_system_info()
373+
except APIError:
374+
pass
375+
376+
if web_get_system_info is not None:
377+
try:
378+
return web_get_system_info["serinum"]
379+
except LookupError:
380+
pass
381+
363382
async def set_static_ip(
364383
self,
365384
ip: str,

pyasic/miners/base.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,14 @@ async def upgrade_firmware(
209209
### DATA GATHERING FUNCTIONS (get_{some_data}) ###
210210
##################################################
211211

212+
async def get_serial_number(self) -> Optional[str]:
213+
"""Get the serial number of the miner and return it as a string.
214+
215+
Returns:
216+
A string representing the serial number of the miner.
217+
"""
218+
return await self._get_serial_number()
219+
212220
async def get_mac(self) -> Optional[str]:
213221
"""Get the MAC address of the miner and return it as a string.
214222
@@ -379,6 +387,9 @@ async def get_pools(self) -> List[PoolMetrics]:
379387
"""
380388
return await self._get_pools()
381389

390+
async def _get_serial_number(self) -> Optional[str]:
391+
pass
392+
382393
async def _get_mac(self) -> Optional[str]:
383394
pass
384395

pyasic/miners/data.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121

2222
class DataOptions(Enum):
23+
SERIAL_NUMBER = "serial_number"
2324
MAC = "mac"
2425
API_VERSION = "api_ver"
2526
FW_VERSION = "fw_ver"

tests/miners_tests/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ def test_miner_data_map_keys(self):
9292
"hashrate",
9393
"hostname",
9494
"is_mining",
95+
"serial_number",
9596
"mac",
9697
"expected_hashrate",
9798
"uptime",

0 commit comments

Comments
 (0)