feature: add mining presets for luxos (#262)

* feature: add mining mode preset for luxos

* bug: fix type hint
This commit is contained in:
wilfredallyn
2024-12-31 14:48:13 -05:00
committed by GitHub
parent 56536fd258
commit 66a8932ea3
4 changed files with 50 additions and 3 deletions

View File

@@ -286,7 +286,13 @@ class MinerConfig(BaseModel):
@classmethod
def from_luxos(
cls, rpc_tempctrl: dict, rpc_fans: dict, rpc_pools: dict, rpc_groups: dict
cls,
rpc_tempctrl: dict,
rpc_fans: dict,
rpc_pools: dict,
rpc_groups: dict,
rpc_config: dict,
rpc_profiles: dict,
) -> "MinerConfig":
return cls(
temperature=TemperatureConfig.from_luxos(rpc_tempctrl=rpc_tempctrl),
@@ -294,6 +300,9 @@ class MinerConfig(BaseModel):
rpc_tempctrl=rpc_tempctrl, rpc_fans=rpc_fans
),
pools=PoolConfig.from_luxos(rpc_pools=rpc_pools, rpc_groups=rpc_groups),
mining_mode=MiningModeConfig.from_luxos(
rpc_config=rpc_config, rpc_profiles=rpc_profiles
),
)
@classmethod

View File

@@ -367,6 +367,22 @@ class MiningModePreset(MinerConfigValue):
available_presets=[MiningPreset.from_vnish(p) for p in web_presets],
)
@classmethod
def from_luxos(
cls, rpc_config: dict, rpc_profiles: list[dict]
) -> "MiningModePreset":
active_preset = None
active_profile = rpc_config["CONFIG"][0]["Profile"]
for profile in rpc_profiles["PROFILES"]:
if profile["Profile Name"] == active_profile:
active_preset = profile
return cls(
active_preset=MiningPreset.from_luxos(active_preset),
available_presets=[
MiningPreset.from_luxos(p) for p in rpc_profiles["PROFILES"]
],
)
class ManualBoardSettings(MinerConfigValue):
freq: float
@@ -687,6 +703,10 @@ class MiningModeConfig(MinerConfigOption):
pass
return cls.default()
@classmethod
def from_luxos(cls, rpc_config: dict, rpc_profiles: dict):
return MiningModePreset.from_luxos(rpc_config, rpc_profiles)
MiningMode = TypeVar(
"MiningMode",

View File

@@ -6,7 +6,9 @@ class MiningPreset(MinerConfigValue):
power: int | None = None
hashrate: int | None = None
tuned: bool | None = None
modded_psu: bool = False
modded_psu: bool | None = None
frequency: int | None = None
voltage: float | None = None
def as_vnish(self) -> dict:
if self.name is not None:
@@ -32,3 +34,14 @@ class MiningPreset(MinerConfigValue):
tuned=tuned,
modded_psu=modded_psu,
)
@classmethod
def from_luxos(cls, profile: dict):
return cls(
name=profile["Profile Name"],
power=profile["Watts"],
hashrate=round(profile["Hashrate"]),
tuned=profile["IsTuned"],
frequency=profile["Frequency"],
voltage=profile["Voltage"],
)

View File

@@ -77,6 +77,7 @@ class LUXMiner(LuxOSFirmware):
rpc: LUXMinerRPCAPI
supports_shutdown = True
supports_presets = True
data_locations = LUXMINER_DATA_LOC
@@ -131,12 +132,16 @@ class LUXMiner(LuxOSFirmware):
return False
async def get_config(self) -> MinerConfig:
data = await self.rpc.multicommand("tempctrl", "fans", "pools", "groups")
data = await self.rpc.multicommand(
"tempctrl", "fans", "pools", "groups", "config", "profiles"
)
return MinerConfig.from_luxos(
rpc_tempctrl=data.get("tempctrl", [{}])[0],
rpc_fans=data.get("fans", [{}])[0],
rpc_pools=data.get("pools", [{}])[0],
rpc_groups=data.get("groups", [{}])[0],
rpc_config=data.get("config", [{}])[0],
rpc_profiles=data.get("profiles", [{}])[0],
)
async def upgrade_firmware(self) -> bool: