set up import config and config to convert between general config and bos config
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import time
|
import time
|
||||||
import yaml
|
import yaml
|
||||||
|
import toml
|
||||||
|
|
||||||
|
|
||||||
async def bos_config_convert(config: dict):
|
async def bos_config_convert(config: dict):
|
||||||
@@ -19,7 +20,7 @@ async def bos_config_convert(config: dict):
|
|||||||
if "target_temp" in config[opt].keys():
|
if "target_temp" in config[opt].keys():
|
||||||
out_config["temperature"]["target"] = config[opt]["target_temp"]
|
out_config["temperature"]["target"] = config[opt]["target_temp"]
|
||||||
else:
|
else:
|
||||||
out_config["temperature"]["mode"] = 70.0
|
out_config["temperature"]["target"] = 70.0
|
||||||
|
|
||||||
if "hot_temp" in config[opt].keys():
|
if "hot_temp" in config[opt].keys():
|
||||||
out_config["temperature"]["hot"] = config[opt]["hot_temp"]
|
out_config["temperature"]["hot"] = config[opt]["hot_temp"]
|
||||||
@@ -36,7 +37,7 @@ async def bos_config_convert(config: dict):
|
|||||||
out_config["fans"]["min_fans"] = config[opt]["min_fans"]
|
out_config["fans"]["min_fans"] = config[opt]["min_fans"]
|
||||||
else:
|
else:
|
||||||
out_config["fans"]["min_fans"] = 1
|
out_config["fans"]["min_fans"] = 1
|
||||||
if "min_fans" in config[opt].keys():
|
if "speed" in config[opt].keys():
|
||||||
out_config["fans"]["speed"] = config[opt]["speed"]
|
out_config["fans"]["speed"] = config[opt]["speed"]
|
||||||
else:
|
else:
|
||||||
out_config["fans"]["speed"] = 100
|
out_config["fans"]["speed"] = 100
|
||||||
@@ -95,75 +96,73 @@ async def bos_config_convert(config: dict):
|
|||||||
return yaml.dump(out_config, sort_keys=False)
|
return yaml.dump(out_config, sort_keys=False)
|
||||||
|
|
||||||
|
|
||||||
def general_config_convert_bos(yaml_config):
|
async def general_config_convert_bos(yaml_config):
|
||||||
config = yaml.load(yaml_config, Loader=yaml.Loader)
|
config = yaml.load(yaml_config, Loader=yaml.SafeLoader)
|
||||||
out_config = {}
|
out_config = {}
|
||||||
for opt in config:
|
for opt in config:
|
||||||
if opt == "format":
|
if opt == "format":
|
||||||
out_config["format"] = config[opt]
|
out_config["format"] = config[opt]
|
||||||
out_config["format"]["generator"] = 'upstream_config_util'
|
out_config["format"]["generator"] = 'upstream_config_util'
|
||||||
out_config["format"]["timestamp"] = int(time.time())
|
out_config["format"]["timestamp"] = int(time.time())
|
||||||
elif opt == "temp_control":
|
elif opt == "temperature":
|
||||||
out_config["temperature"] = {}
|
out_config["temp_control"] = {}
|
||||||
if "mode" in config[opt].keys():
|
if "mode" in config[opt].keys():
|
||||||
out_config["temperature"]["mode"] = config[opt]["mode"]
|
out_config["temp_control"]["mode"] = config[opt]["mode"]
|
||||||
else:
|
else:
|
||||||
out_config["temperature"]["mode"] = "auto"
|
out_config["temp_control"]["mode"] = "auto"
|
||||||
|
|
||||||
if "target_temp" in config[opt].keys():
|
if "target" in config[opt].keys():
|
||||||
out_config["temperature"]["target"] = config[opt]["target_temp"]
|
out_config["temp_control"]["target_temp"] = config[opt]["target"]
|
||||||
else:
|
else:
|
||||||
out_config["temperature"]["mode"] = 70.0
|
out_config["temp_control"]["target_temp"] = 70.0
|
||||||
|
|
||||||
if "hot_temp" in config[opt].keys():
|
if "hot" in config[opt].keys():
|
||||||
out_config["temperature"]["hot"] = config[opt]["hot_temp"]
|
out_config["temp_control"]["hot_temp"] = config[opt]["hot"]
|
||||||
else:
|
else:
|
||||||
out_config["temperature"]["hot"] = 80.0
|
out_config["temp_control"]["hot_temp"] = 80.0
|
||||||
|
|
||||||
if "dangerous_temp" in config[opt].keys():
|
if "danger" in config[opt].keys():
|
||||||
out_config["temperature"]["danger"] = config[opt]["dangerous_temp"]
|
out_config["temp_control"]["dangerous_temp"] = config[opt]["danger"]
|
||||||
else:
|
else:
|
||||||
out_config["temperature"]["danger"] = 90.0
|
out_config["temp_control"]["dangerous_temp"] = 90.0
|
||||||
elif opt == "fan_control":
|
elif opt == "fans":
|
||||||
out_config["fans"] = {}
|
out_config["fan_control"] = {}
|
||||||
if "min_fans" in config[opt].keys():
|
if "min_fans" in config[opt].keys():
|
||||||
out_config["fans"]["min_fans"] = config[opt]["min_fans"]
|
out_config["fan_control"]["min_fans"] = config[opt]["min_fans"]
|
||||||
else:
|
else:
|
||||||
out_config["fans"]["min_fans"] = 1
|
out_config["fan_control"]["min_fans"] = 1
|
||||||
if "min_fans" in config[opt].keys():
|
if "speed" in config[opt].keys():
|
||||||
out_config["fans"]["speed"] = config[opt]["speed"]
|
out_config["fan_control"]["speed"] = config[opt]["speed"]
|
||||||
else:
|
else:
|
||||||
out_config["fans"]["speed"] = 100
|
out_config["fan_control"]["speed"] = 100
|
||||||
elif opt == "group":
|
elif opt == "pool_groups":
|
||||||
out_config["pool_groups"] = [{} for _item in range(len(config[opt]))]
|
out_config["group"] = [{} for _item in range(len(config[opt]))]
|
||||||
for idx in range(len(config[opt])):
|
for idx in range(len(config[opt])):
|
||||||
out_config["pool_groups"][idx]["pools"] = []
|
out_config["group"][idx]["pools"] = []
|
||||||
out_config["pool_groups"][idx] = {}
|
out_config["group"][idx] = {}
|
||||||
if "name" in config[opt][idx].keys():
|
if "group_name" in config[opt][idx].keys():
|
||||||
out_config["pool_groups"][idx]["group_name"] = config[opt][idx]["name"]
|
out_config["group"][idx]["name"] = config[opt][idx]["group_name"]
|
||||||
else:
|
else:
|
||||||
out_config["pool_groups"][idx]["group_name"] = f"group_{idx}"
|
out_config["group"][idx]["name"] = f"group_{idx}"
|
||||||
if "quota" in config[opt][idx].keys():
|
if "quota" in config[opt][idx].keys():
|
||||||
out_config["pool_groups"][idx]["quota"] = config[opt][idx]["quota"]
|
out_config["group"][idx]["quota"] = config[opt][idx]["quota"]
|
||||||
else:
|
else:
|
||||||
out_config["pool_groups"][idx]["quota"] = 1
|
out_config["group"][idx]["quota"] = 1
|
||||||
out_config["pool_groups"][idx]["pools"] = [{} for _item in range(len(config[opt][idx]["pool"]))]
|
out_config["group"][idx]["pool"] = [{} for _item in range(len(config[opt][idx]["pools"]))]
|
||||||
for pool_idx in range(len(config[opt][idx]["pool"])):
|
for pool_idx in range(len(config[opt][idx]["pools"])):
|
||||||
out_config["pool_groups"][idx]["pools"][pool_idx]["url"] = config[opt][idx]["pool"][pool_idx]["url"]
|
out_config["group"][idx]["pool"][pool_idx]["url"] = config[opt][idx]["pools"][pool_idx]["url"]
|
||||||
out_config["pool_groups"][idx]["pools"][pool_idx]["username"] = config[opt][idx]["pool"][pool_idx][
|
out_config["group"][idx]["pool"][pool_idx]["user"] = config[opt][idx]["pools"][pool_idx]["username"]
|
||||||
"user"]
|
out_config["group"][idx]["pool"][pool_idx]["password"] = config[opt][idx]["pools"][pool_idx]["password"]
|
||||||
out_config["pool_groups"][idx]["pools"][pool_idx]["password"] = config[opt][idx]["pool"][pool_idx][
|
|
||||||
"password"]
|
|
||||||
elif opt == "autotuning":
|
elif opt == "autotuning":
|
||||||
out_config["autotuning"] = {}
|
out_config["autotuning"] = {}
|
||||||
if "enabled" in config[opt].keys():
|
if "enabled" in config[opt].keys():
|
||||||
out_config["autotuning"]["enabled"] = config[opt]["enabled"]
|
out_config["autotuning"]["enabled"] = config[opt]["enabled"]
|
||||||
else:
|
else:
|
||||||
out_config["autotuning"]["enabled"] = True
|
out_config["autotuning"]["enabled"] = True
|
||||||
if "psu_power_limit" in config[opt].keys():
|
if "wattage" in config[opt].keys():
|
||||||
out_config["autotuning"]["wattage"] = config[opt]["psu_power_limit"]
|
out_config["autotuning"]["psu_power_limit"] = config[opt]["wattage"]
|
||||||
else:
|
else:
|
||||||
out_config["autotuning"]["wattage"] = 900
|
out_config["autotuning"]["psu_power_limit"] = 900
|
||||||
elif opt == "power_scaling":
|
elif opt == "power_scaling":
|
||||||
out_config["power_scaling"] = {}
|
out_config["power_scaling"] = {}
|
||||||
if "enabled" in config[opt].keys():
|
if "enabled" in config[opt].keys():
|
||||||
@@ -186,4 +185,4 @@ def general_config_convert_bos(yaml_config):
|
|||||||
out_config["power_scaling"]["shutdown_duration"] = config[opt]["shutdown_duration"]
|
out_config["power_scaling"]["shutdown_duration"] = config[opt]["shutdown_duration"]
|
||||||
else:
|
else:
|
||||||
out_config["power_scaling"]["shutdown_duration"] = 3.0
|
out_config["power_scaling"]["shutdown_duration"] = 3.0
|
||||||
return yaml.dump(out_config, sort_keys=False)
|
return toml.dumps(out_config)
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ from operator import itemgetter
|
|||||||
import PySimpleGUI as sg
|
import PySimpleGUI as sg
|
||||||
import aiofiles
|
import aiofiles
|
||||||
import toml
|
import toml
|
||||||
|
import yaml
|
||||||
|
|
||||||
from miners.miner_factory import MinerFactory
|
from miners.miner_factory import MinerFactory
|
||||||
from network import MinerNetwork
|
from network import MinerNetwork
|
||||||
@@ -83,7 +84,7 @@ async def import_config(ip):
|
|||||||
miner = await miner_factory.get_miner(ipaddress.ip_address(*ip))
|
miner = await miner_factory.get_miner(ipaddress.ip_address(*ip))
|
||||||
await miner.get_config()
|
await miner.get_config()
|
||||||
config = miner.config
|
config = miner.config
|
||||||
await update_ui_with_data("config", toml.dumps(config))
|
await update_ui_with_data("config", str(config))
|
||||||
await update_ui_with_data("status", "")
|
await update_ui_with_data("status", "")
|
||||||
|
|
||||||
|
|
||||||
@@ -108,8 +109,6 @@ async def import_iplist(file_location):
|
|||||||
|
|
||||||
async def send_config(ips: list, config):
|
async def send_config(ips: list, config):
|
||||||
await update_ui_with_data("status", "Configuring")
|
await update_ui_with_data("status", "Configuring")
|
||||||
config['format']['generator'] = 'upstream_config_util'
|
|
||||||
config['format']['timestamp'] = int(time.time())
|
|
||||||
tasks = []
|
tasks = []
|
||||||
for ip in ips:
|
for ip in ips:
|
||||||
tasks.append(miner_factory.get_miner(ip))
|
tasks.append(miner_factory.get_miner(ip))
|
||||||
@@ -128,7 +127,7 @@ async def import_config_file(file_location):
|
|||||||
else:
|
else:
|
||||||
async with aiofiles.open(file_location, mode='r') as file:
|
async with aiofiles.open(file_location, mode='r') as file:
|
||||||
config = await file.read()
|
config = await file.read()
|
||||||
await update_ui_with_data("config", str(config))
|
await update_ui_with_data("config", config)
|
||||||
await update_ui_with_data("status", "")
|
await update_ui_with_data("status", "")
|
||||||
|
|
||||||
|
|
||||||
@@ -291,7 +290,7 @@ async def ui():
|
|||||||
if event == "import_iplist":
|
if event == "import_iplist":
|
||||||
asyncio.create_task(import_iplist(value["file_iplist"]))
|
asyncio.create_task(import_iplist(value["file_iplist"]))
|
||||||
if event == "send_config":
|
if event == "send_config":
|
||||||
asyncio.create_task(send_config(value['ip_list'], toml.loads(value['config'])))
|
asyncio.create_task(send_config(value['ip_list'], value['config']))
|
||||||
if event == "import_file_config":
|
if event == "import_file_config":
|
||||||
asyncio.create_task(import_config_file(value['file_config']))
|
asyncio.create_task(import_config_file(value['file_config']))
|
||||||
if event == "export_file_config":
|
if event == "export_file_config":
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ from miners import BaseMiner
|
|||||||
from API.bosminer import BOSMinerAPI
|
from API.bosminer import BOSMinerAPI
|
||||||
import asyncssh
|
import asyncssh
|
||||||
import toml
|
import toml
|
||||||
import time
|
from config.bos import bos_config_convert, general_config_convert_bos
|
||||||
|
|
||||||
|
|
||||||
class BOSminer(BaseMiner):
|
class BOSminer(BaseMiner):
|
||||||
def __init__(self, ip: str) -> None:
|
def __init__(self, ip: str) -> None:
|
||||||
@@ -62,15 +61,16 @@ class BOSminer(BaseMiner):
|
|||||||
async with conn.start_sftp_client() as sftp:
|
async with conn.start_sftp_client() as sftp:
|
||||||
async with sftp.open('/etc/bosminer.toml') as file:
|
async with sftp.open('/etc/bosminer.toml') as file:
|
||||||
toml_data = toml.loads(await file.read())
|
toml_data = toml.loads(await file.read())
|
||||||
self.config = toml_data
|
cfg = await bos_config_convert(toml_data)
|
||||||
|
self.config = cfg
|
||||||
|
|
||||||
async def get_hostname(self) -> str:
|
async def get_hostname(self) -> str:
|
||||||
async with (await self._get_ssh_connection()) as conn:
|
async with (await self._get_ssh_connection()) as conn:
|
||||||
data = await conn.run('cat /proc/sys/kernel/hostname')
|
data = await conn.run('cat /proc/sys/kernel/hostname')
|
||||||
return data.stdout.strip()
|
return data.stdout.strip()
|
||||||
|
|
||||||
async def send_config(self, config: dict) -> None:
|
async def send_config(self, yaml_config) -> None:
|
||||||
toml_conf = toml.dumps(config)
|
toml_conf = await general_config_convert_bos(yaml_config)
|
||||||
async with (await self._get_ssh_connection()) as conn:
|
async with (await self._get_ssh_connection()) as conn:
|
||||||
async with conn.start_sftp_client() as sftp:
|
async with conn.start_sftp_client() as sftp:
|
||||||
async with sftp.open('/etc/bosminer.toml', 'w+') as file:
|
async with sftp.open('/etc/bosminer.toml', 'w+') as file:
|
||||||
|
|||||||
Reference in New Issue
Block a user