Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
74b4aeb44a | ||
|
|
9c7ab5ac57 | ||
|
|
65ecf1fea2 | ||
|
|
44142c658b | ||
|
|
25a205ce6c | ||
|
|
25094084cf | ||
|
|
4eac601153 | ||
|
|
f0d8d66b9b |
@@ -68,20 +68,23 @@ class BOSMiner(BaseMiner):
|
||||
|
||||
async def send_graphql_query(self, query) -> Union[dict, None]:
|
||||
url = f"http://{self.ip}/graphql"
|
||||
async with httpx.AsyncClient() as client:
|
||||
_auth = await client.post(
|
||||
url,
|
||||
json={
|
||||
"query": 'mutation{auth{login(username:"'
|
||||
+ self.uname
|
||||
+ '", password:"'
|
||||
+ self.pwd
|
||||
+ '"){__typename}}}'
|
||||
},
|
||||
)
|
||||
d = await client.post(url, json={"query": query})
|
||||
if d.status_code == 200:
|
||||
return d.json()
|
||||
try:
|
||||
async with httpx.AsyncClient() as client:
|
||||
_auth = await client.post(
|
||||
url,
|
||||
json={
|
||||
"query": 'mutation{auth{login(username:"'
|
||||
+ self.uname
|
||||
+ '", password:"'
|
||||
+ self.pwd
|
||||
+ '"){__typename}}}'
|
||||
},
|
||||
)
|
||||
d = await client.post(url, json={"query": query})
|
||||
if d.status_code == 200:
|
||||
return d.json()
|
||||
except httpx.ReadError:
|
||||
return None
|
||||
return None
|
||||
|
||||
async def fault_light_on(self) -> bool:
|
||||
|
||||
@@ -337,7 +337,6 @@ class MinerFactory(metaclass=Singleton):
|
||||
break
|
||||
except asyncio.TimeoutError:
|
||||
logging.warning(f"{ip}: Get Miner Timed Out")
|
||||
|
||||
miner = self._select_miner_from_classes(ip, model, api, ver)
|
||||
|
||||
# save the miner to the cache at its IP if its not unknown
|
||||
@@ -433,11 +432,14 @@ class MinerFactory(metaclass=Singleton):
|
||||
|
||||
# if we have devdetails, we can get model data from there
|
||||
if devdetails:
|
||||
if devdetails == {"Msg": "Disconnected"}:
|
||||
model = await self.__get_model_from_graphql(ip)
|
||||
if model:
|
||||
api = "BOSMiner+"
|
||||
return model, api, ver
|
||||
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"]:
|
||||
try:
|
||||
@@ -455,6 +457,14 @@ class MinerFactory(metaclass=Singleton):
|
||||
|
||||
# if we have version we can get API type from here
|
||||
if version:
|
||||
try:
|
||||
if version[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
|
||||
if "VERSION" in version:
|
||||
api_types = ["BMMiner", "CGMiner", "BTMiner"]
|
||||
# check basic API types, BOSMiner needs a special check
|
||||
@@ -470,6 +480,8 @@ class MinerFactory(metaclass=Singleton):
|
||||
api = "BOSMiner+"
|
||||
if "BOSminer+" in version["VERSION"][0]:
|
||||
api = "BOSMiner+"
|
||||
if any("BOSer" in string for string in version["VERSION"][0]):
|
||||
api = "BOSMiner+"
|
||||
|
||||
# check for avalonminers
|
||||
for _version_key in ["PROD", "MODEL"]:
|
||||
@@ -548,7 +560,7 @@ class MinerFactory(metaclass=Singleton):
|
||||
if not validation[0]:
|
||||
try:
|
||||
if data["version"][0]["STATUS"][0]["Msg"] == "Disconnected":
|
||||
return {"Msg": "Disconnected"}, None
|
||||
return data["devdetails"], data["version"]
|
||||
except KeyError:
|
||||
pass
|
||||
raise APIError(validation[1])
|
||||
@@ -605,7 +617,7 @@ class MinerFactory(metaclass=Singleton):
|
||||
async with httpx.AsyncClient() as client:
|
||||
d = await client.post(url, json={"query": "{bosminer {info{modelName}}}"})
|
||||
if d.status_code == 200:
|
||||
model = d.json()["data"]["bosminer"]["info"]["modelName"].upper()
|
||||
model = (d.json()["data"]["bosminer"]["info"]["modelName"]).upper()
|
||||
return model
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[tool.poetry]
|
||||
name = "pyasic"
|
||||
version = "0.21.5"
|
||||
version = "0.21.9"
|
||||
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>"]
|
||||
repository = "https://github.com/UpstreamData/pyasic"
|
||||
|
||||
Reference in New Issue
Block a user