feature: add mining presets for luxos (#262)
* feature: add mining mode preset for luxos * bug: fix type hint
This commit is contained in:
@@ -286,7 +286,13 @@ class MinerConfig(BaseModel):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_luxos(
|
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":
|
) -> "MinerConfig":
|
||||||
return cls(
|
return cls(
|
||||||
temperature=TemperatureConfig.from_luxos(rpc_tempctrl=rpc_tempctrl),
|
temperature=TemperatureConfig.from_luxos(rpc_tempctrl=rpc_tempctrl),
|
||||||
@@ -294,6 +300,9 @@ class MinerConfig(BaseModel):
|
|||||||
rpc_tempctrl=rpc_tempctrl, rpc_fans=rpc_fans
|
rpc_tempctrl=rpc_tempctrl, rpc_fans=rpc_fans
|
||||||
),
|
),
|
||||||
pools=PoolConfig.from_luxos(rpc_pools=rpc_pools, rpc_groups=rpc_groups),
|
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
|
@classmethod
|
||||||
|
|||||||
@@ -367,6 +367,22 @@ class MiningModePreset(MinerConfigValue):
|
|||||||
available_presets=[MiningPreset.from_vnish(p) for p in web_presets],
|
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):
|
class ManualBoardSettings(MinerConfigValue):
|
||||||
freq: float
|
freq: float
|
||||||
@@ -687,6 +703,10 @@ class MiningModeConfig(MinerConfigOption):
|
|||||||
pass
|
pass
|
||||||
return cls.default()
|
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 = TypeVar(
|
||||||
"MiningMode",
|
"MiningMode",
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ class MiningPreset(MinerConfigValue):
|
|||||||
power: int | None = None
|
power: int | None = None
|
||||||
hashrate: int | None = None
|
hashrate: int | None = None
|
||||||
tuned: bool | 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:
|
def as_vnish(self) -> dict:
|
||||||
if self.name is not None:
|
if self.name is not None:
|
||||||
@@ -32,3 +34,14 @@ class MiningPreset(MinerConfigValue):
|
|||||||
tuned=tuned,
|
tuned=tuned,
|
||||||
modded_psu=modded_psu,
|
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"],
|
||||||
|
)
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ class LUXMiner(LuxOSFirmware):
|
|||||||
rpc: LUXMinerRPCAPI
|
rpc: LUXMinerRPCAPI
|
||||||
|
|
||||||
supports_shutdown = True
|
supports_shutdown = True
|
||||||
|
supports_presets = True
|
||||||
|
|
||||||
data_locations = LUXMINER_DATA_LOC
|
data_locations = LUXMINER_DATA_LOC
|
||||||
|
|
||||||
@@ -131,12 +132,16 @@ class LUXMiner(LuxOSFirmware):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
async def get_config(self) -> MinerConfig:
|
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(
|
return MinerConfig.from_luxos(
|
||||||
rpc_tempctrl=data.get("tempctrl", [{}])[0],
|
rpc_tempctrl=data.get("tempctrl", [{}])[0],
|
||||||
rpc_fans=data.get("fans", [{}])[0],
|
rpc_fans=data.get("fans", [{}])[0],
|
||||||
rpc_pools=data.get("pools", [{}])[0],
|
rpc_pools=data.get("pools", [{}])[0],
|
||||||
rpc_groups=data.get("groups", [{}])[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:
|
async def upgrade_firmware(self) -> bool:
|
||||||
|
|||||||
Reference in New Issue
Block a user