Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
418c62b40d | ||
|
|
198a480c35 | ||
|
|
2d4bf4e847 | ||
|
|
774e3d1a62 | ||
|
|
ade3cd6fee | ||
|
|
28dc3ccb84 | ||
|
|
6ca8582ec3 |
@@ -83,7 +83,7 @@ class BOSMiner(BaseMiner):
|
|||||||
d = await client.post(url, json={"query": query})
|
d = await client.post(url, json={"query": query})
|
||||||
if d.status_code == 200:
|
if d.status_code == 200:
|
||||||
return d.json()
|
return d.json()
|
||||||
except httpx.ReadError:
|
except (httpx.ReadError, httpx.ReadTimeout):
|
||||||
return None
|
return None
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -484,7 +484,7 @@ class BOSMiner(BaseMiner):
|
|||||||
wattage_limit = tuner[0].get("PowerLimit")
|
wattage_limit = tuner[0].get("PowerLimit")
|
||||||
if wattage_limit:
|
if wattage_limit:
|
||||||
data.wattage_limit = wattage_limit
|
data.wattage_limit = wattage_limit
|
||||||
if wattage:
|
if wattage is not None:
|
||||||
data.wattage = wattage
|
data.wattage = wattage
|
||||||
|
|
||||||
chain_status = tuner[0].get("TunerChainStatus")
|
chain_status = tuner[0].get("TunerChainStatus")
|
||||||
@@ -609,7 +609,7 @@ class BOSMiner(BaseMiner):
|
|||||||
try:
|
try:
|
||||||
data.wattage = query_data["bosminer"]["info"]["workSolver"]["power"]["approxConsumptionW"]
|
data.wattage = query_data["bosminer"]["info"]["workSolver"]["power"]["approxConsumptionW"]
|
||||||
except (TypeError, KeyError, ValueError, IndexError):
|
except (TypeError, KeyError, ValueError, IndexError):
|
||||||
pass
|
data.wattage = 0
|
||||||
try:
|
try:
|
||||||
data.wattage_limit = query_data["bosminer"]["info"]["workSolver"]["power"]["limitW"]
|
data.wattage_limit = query_data["bosminer"]["info"]["workSolver"]["power"]["limitW"]
|
||||||
except (TypeError, KeyError, ValueError, IndexError):
|
except (TypeError, KeyError, ValueError, IndexError):
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ class BaseMiner(ABC):
|
|||||||
return object.__new__(cls)
|
return object.__new__(cls)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"{'' if not self.api_type else self.api_type} {'' if not self.model else self.model}: {str(self.ip)}"
|
return f"{'' if not self.api_type else self.api_type}{'' if not self.model else ' ' + self.model}: {str(self.ip)}"
|
||||||
|
|
||||||
def __lt__(self, other):
|
def __lt__(self, other):
|
||||||
return ipaddress.ip_address(self.ip) < ipaddress.ip_address(other.ip)
|
return ipaddress.ip_address(self.ip) < ipaddress.ip_address(other.ip)
|
||||||
|
|||||||
@@ -411,6 +411,8 @@ class MinerFactory(metaclass=Singleton):
|
|||||||
# miner refused connection on API port, we wont be able to get data this way
|
# miner refused connection on API port, we wont be able to get data this way
|
||||||
# try ssh
|
# try ssh
|
||||||
try:
|
try:
|
||||||
|
_model = await self.__get_model_from_graphql(ip)
|
||||||
|
if not _model:
|
||||||
_model = await self.__get_model_from_ssh(ip)
|
_model = await self.__get_model_from_ssh(ip)
|
||||||
if _model:
|
if _model:
|
||||||
model = _model
|
model = _model
|
||||||
@@ -432,15 +434,6 @@ class MinerFactory(metaclass=Singleton):
|
|||||||
|
|
||||||
# if we have devdetails, we can get model data from there
|
# if we have devdetails, we can get model data from there
|
||||||
if devdetails:
|
if devdetails:
|
||||||
try:
|
|
||||||
if devdetails[0]["STATUS"][0]["Msg"]:
|
|
||||||
model = await self.__get_model_from_graphql(ip)
|
|
||||||
if model:
|
|
||||||
api = "BOSMiner+"
|
|
||||||
return model, api, ver
|
|
||||||
except (KeyError, TypeError, ValueError, IndexError):
|
|
||||||
pass
|
|
||||||
|
|
||||||
for _devdetails_key in ["Model", "Driver"]:
|
for _devdetails_key in ["Model", "Driver"]:
|
||||||
try:
|
try:
|
||||||
model = devdetails["DEVDETAILS"][0][_devdetails_key].upper()
|
model = devdetails["DEVDETAILS"][0][_devdetails_key].upper()
|
||||||
@@ -448,12 +441,31 @@ class MinerFactory(metaclass=Singleton):
|
|||||||
break
|
break
|
||||||
except KeyError:
|
except KeyError:
|
||||||
continue
|
continue
|
||||||
|
try:
|
||||||
|
if devdetails[0]["STATUS"][0]["Msg"]:
|
||||||
|
model = await self.__get_model_from_graphql(ip)
|
||||||
|
if model:
|
||||||
|
api = "BOSMiner+"
|
||||||
|
except (KeyError, TypeError, ValueError, IndexError):
|
||||||
|
pass
|
||||||
|
|
||||||
if not model:
|
if not model:
|
||||||
# braiins OS bug check just in case
|
# braiins OS bug check just in case
|
||||||
if "s9" in devdetails["STATUS"][0]["Description"]:
|
if "s9" in devdetails["STATUS"][0]["Description"]:
|
||||||
model = "ANTMINER S9"
|
model = "ANTMINER S9"
|
||||||
if "s17" in version["STATUS"][0]["Description"]:
|
if "s17" in version["STATUS"][0]["Description"]:
|
||||||
model = "ANTMINER S17"
|
model = "ANTMINER S17"
|
||||||
|
if not api:
|
||||||
|
if "boser" in version["STATUS"][0]["Description"]:
|
||||||
|
api = "BOSMiner+"
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
_model = await self.__get_model_from_graphql(ip)
|
||||||
|
if _model:
|
||||||
|
model = _model
|
||||||
|
api = "BOSMiner+"
|
||||||
|
except (KeyError, TypeError, ValueError, IndexError):
|
||||||
|
pass
|
||||||
|
|
||||||
# if we have version we can get API type from here
|
# if we have version we can get API type from here
|
||||||
if version:
|
if version:
|
||||||
@@ -545,7 +557,6 @@ class MinerFactory(metaclass=Singleton):
|
|||||||
# don't need "Bitmain", just "ANTMINER XX" as model
|
# don't need "Bitmain", just "ANTMINER XX" as model
|
||||||
if "BITMAIN " in model:
|
if "BITMAIN " in model:
|
||||||
model = model.replace("BITMAIN ", "")
|
model = model.replace("BITMAIN ", "")
|
||||||
|
|
||||||
return model, api, ver
|
return model, api, ver
|
||||||
|
|
||||||
async def __get_devdetails_and_version(
|
async def __get_devdetails_and_version(
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "pyasic"
|
name = "pyasic"
|
||||||
version = "0.21.9"
|
version = "0.21.12"
|
||||||
description = "A set of modules for interfacing with many common types of ASIC bitcoin miners, using both their API and SSH."
|
description = "A set of modules for interfacing with many common types of ASIC bitcoin miners, using both their API and SSH."
|
||||||
authors = ["UpstreamData <brett@upstreamdata.ca>"]
|
authors = ["UpstreamData <brett@upstreamdata.ca>"]
|
||||||
repository = "https://github.com/UpstreamData/pyasic"
|
repository = "https://github.com/UpstreamData/pyasic"
|
||||||
|
|||||||
Reference in New Issue
Block a user