Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions asic-rs-core/src/data/collector.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ pub enum DataField {
/// Current power consumption in watts.
#[cfg_attr(feature = "python", pydantic(value = "Wattage"))]
Wattage,
/// manual tuning percent of full power (100 = unthrottled).
#[cfg_attr(feature = "python", pydantic(value = "TuningPercent"))]
TuningPercent,
/// Configured tuning target (power or hashrate).
#[cfg_attr(feature = "python", pydantic(value = "TuningTarget"))]
TuningTarget,
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-core/src/data/miner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,8 @@ pub struct MinerData {
/// The current power consumption of the miner
#[serde(serialize_with = "serialize_power")]
pub wattage: Option<Power>,
/// The current manual tuning percent of full power (100 = unthrottled), where supported
pub tuning_percent: Option<u8>,
/// The current tuning target of the miner, such as power target or hashrate target
pub tuning_target: Option<TuningTarget>,
/// The current tuning target adjusted by scaling settings, when available.
Expand Down
43 changes: 42 additions & 1 deletion asic-rs-core/src/traits/miner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,22 @@ impl<
}

pub trait HasMinerControl:
SetFaultLight + SetPowerLimit + Restart + Resume + Pause + ChangePassword + FactoryReset + ReadLogs
SetFaultLight
+ SetPowerLimit
+ SetTuningPercent
+ Restart
+ Resume
+ Pause
+ ChangePassword
+ FactoryReset
+ ReadLogs
{
}

impl<
T: SetFaultLight
+ SetPowerLimit
+ SetTuningPercent
+ Restart
+ Resume
+ Pause
Expand Down Expand Up @@ -132,6 +141,7 @@ pub trait GetMinerData:
+ GetPsuFans
+ GetFluidTemperature
+ GetWattage
+ GetTuningPercent
+ GetTuningTarget
+ GetScaledTuningTarget
+ GetTuningCapabilities
Expand Down Expand Up @@ -191,6 +201,7 @@ impl<
+ GetPsuFans
+ GetFluidTemperature
+ GetWattage
+ GetTuningPercent
+ GetTuningTarget
+ GetScaledTuningTarget
+ GetTuningCapabilities
Expand Down Expand Up @@ -228,6 +239,7 @@ impl<
let hashrate = self.parse_hashrate(&data);
let expected_hashrate = self.parse_expected_hashrate(&data);
let wattage = self.parse_wattage(&data);
let tuning_percent = self.parse_tuning_percent(&data);
let tuning_target = self.parse_tuning_target(&data);
let scaled_tuning_target = self.parse_scaled_tuning_target(&data);
let tuning_capabilities = self.parse_tuning_capabilities(&data);
Expand Down Expand Up @@ -319,6 +331,7 @@ impl<

// Power information
wattage,
tuning_percent,
tuning_target,
scaled_tuning_target,
tuning_capabilities,
Expand Down Expand Up @@ -628,6 +641,21 @@ pub trait GetWattage: CollectData {
}
}

// Tuning Percent
#[async_trait]
pub trait GetTuningPercent: CollectData {
#[tracing::instrument(level = "debug")]
async fn get_tuning_percent(&self) -> Option<u8> {
let mut collector = self.get_collector();
let data = collector.collect(&[DataField::TuningPercent]).await;
self.parse_tuning_percent(&data)
}
#[allow(unused_variables)]
fn parse_tuning_percent(&self, data: &HashMap<DataField, Value>) -> Option<u8> {
None
}
}

// Tuning Target
#[async_trait]
pub trait GetTuningTarget: CollectData {
Expand Down Expand Up @@ -772,6 +800,19 @@ pub trait SetPowerLimit {
fn supports_set_power_limit(&self) -> bool;
}

#[async_trait]
pub trait SetTuningPercent {
/// Set a manual tuning percent of full power (100 = unthrottled).
#[allow(unused_variables)]
async fn set_tuning_percent(&self, percent: u8) -> anyhow::Result<bool> {
anyhow::bail!("Setting throttle is not supported on this platform");
}
/// Defaults to `false`; backends that support throttling override this.
fn supports_set_tuning_percent(&self) -> bool {
false
}
}

#[async_trait]
pub trait Restart {
async fn restart(&self) -> anyhow::Result<bool> {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/antminer/src/backends/v2020/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1238,6 +1238,8 @@ impl SupportsFanConfig for AntMinerV2020 {
}

impl SupportsTemperatureConfig for AntMinerV2020 {}
impl GetTuningPercent for AntMinerV2020 {}
impl SetTuningPercent for AntMinerV2020 {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/antminer/src/backends/v2023_07/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1172,6 +1172,8 @@ impl SupportsFanConfig for AntMinerV202307 {
}

impl SupportsTemperatureConfig for AntMinerV202307 {}
impl GetTuningPercent for AntMinerV202307 {}
impl SetTuningPercent for AntMinerV202307 {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/auradine/src/backends/v1/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1433,6 +1433,8 @@ impl SupportsFanConfig for AuradineV1 {
}

impl SupportsTemperatureConfig for AuradineV1 {}
impl GetTuningPercent for AuradineV1 {}
impl SetTuningPercent for AuradineV1 {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/avalonminer/src/backends/avalon_a/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -767,6 +767,8 @@ impl SupportsFanConfig for AvalonAMiner {
}

impl SupportsTemperatureConfig for AvalonAMiner {}
impl GetTuningPercent for AvalonAMiner {}
impl SetTuningPercent for AvalonAMiner {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/avalonminer/src/backends/avalon_q/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -711,6 +711,8 @@ impl SupportsFanConfig for AvalonQMiner {
}

impl SupportsTemperatureConfig for AvalonQMiner {}
impl GetTuningPercent for AvalonQMiner {}
impl SetTuningPercent for AvalonQMiner {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/bitaxe/src/backends/v2_0_0/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -582,6 +582,8 @@ impl SupportsFanConfig for Bitaxe200 {
}

impl SupportsTemperatureConfig for Bitaxe200 {}
impl GetTuningPercent for Bitaxe200 {}
impl SetTuningPercent for Bitaxe200 {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/bitaxe/src/backends/v2_9_0/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -566,3 +566,5 @@ impl SupportsFanConfig for Bitaxe290 {
}

impl SupportsTemperatureConfig for Bitaxe290 {}
impl GetTuningPercent for Bitaxe290 {}
impl SetTuningPercent for Bitaxe290 {}
2 changes: 2 additions & 0 deletions asic-rs-firmwares/braiins/src/backends/v21_09/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -997,6 +997,8 @@ impl SupportsFanConfig for BraiinsV2109 {
}

impl SupportsTemperatureConfig for BraiinsV2109 {}
impl GetTuningPercent for BraiinsV2109 {}
impl SetTuningPercent for BraiinsV2109 {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/braiins/src/backends/v25_03/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -996,6 +996,8 @@ impl SupportsFanConfig for BraiinsV2503 {
}

impl SupportsTemperatureConfig for BraiinsV2503 {}
impl GetTuningPercent for BraiinsV2503 {}
impl SetTuningPercent for BraiinsV2503 {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/braiins/src/backends/v25_05/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1001,6 +1001,8 @@ impl SupportsFanConfig for BraiinsV2505 {
}

impl SupportsTemperatureConfig for BraiinsV2505 {}
impl GetTuningPercent for BraiinsV2505 {}
impl SetTuningPercent for BraiinsV2505 {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/braiins/src/backends/v25_07/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -871,6 +871,8 @@ impl SupportsFanConfig for BraiinsV2507 {
}

impl SupportsTemperatureConfig for BraiinsV2507 {}
impl GetTuningPercent for BraiinsV2507 {}
impl SetTuningPercent for BraiinsV2507 {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/braiins/src/backends/v26_04/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -888,6 +888,8 @@ impl SupportsFanConfig for BraiinsV2604 {
}

impl SupportsTemperatureConfig for BraiinsV2604 {}
impl GetTuningPercent for BraiinsV2604 {}
impl SetTuningPercent for BraiinsV2604 {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/epic/src/backends/v1/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1574,6 +1574,8 @@ impl HasAuth for PowerPlayV1 {
}

impl SupportsTemperatureConfig for PowerPlayV1 {}
impl GetTuningPercent for PowerPlayV1 {}
impl SetTuningPercent for PowerPlayV1 {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/futurebit/src/backends/v2/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -805,6 +805,8 @@ impl HasDefaultAuth for ApolloV2 {
}

impl SupportsTemperatureConfig for ApolloV2 {}
impl GetTuningPercent for ApolloV2 {}
impl SetTuningPercent for ApolloV2 {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/luxminer/src/backends/v1/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1204,6 +1204,8 @@ impl SupportsFanConfig for LuxMinerV1 {
}

impl SupportsTemperatureConfig for LuxMinerV1 {}
impl GetTuningPercent for LuxMinerV1 {}
impl SetTuningPercent for LuxMinerV1 {}
#[cfg(test)]
mod tests {
use std::sync::{Arc, Mutex};
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/marathon/src/backends/v1/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1160,6 +1160,8 @@ impl SupportsFanConfig for MaraV1 {
}

impl SupportsTemperatureConfig for MaraV1 {}
impl GetTuningPercent for MaraV1 {}
impl SetTuningPercent for MaraV1 {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/nerdaxe/src/backends/v1/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -568,3 +568,5 @@ impl SupportsFanConfig for NerdAxeV1 {
}

impl SupportsTemperatureConfig for NerdAxeV1 {}
impl GetTuningPercent for NerdAxeV1 {}
impl SetTuningPercent for NerdAxeV1 {}
2 changes: 2 additions & 0 deletions asic-rs-firmwares/proto/src/backends/v1/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1007,6 +1007,8 @@ impl HasAuth for ProtoV1 {
}

impl SupportsTemperatureConfig for ProtoV1 {}
impl GetTuningPercent for ProtoV1 {}
impl SetTuningPercent for ProtoV1 {}

#[cfg(test)]
mod tests {
Expand Down
2 changes: 2 additions & 0 deletions asic-rs-firmwares/sealminer/src/backends/v2025/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -842,6 +842,8 @@ impl HasDefaultAuth for SealMinerV2025 {
}

impl SupportsTemperatureConfig for SealMinerV2025 {}
impl GetTuningPercent for SealMinerV2025 {}
impl SetTuningPercent for SealMinerV2025 {}

#[cfg(test)]
mod tests {
Expand Down
12 changes: 10 additions & 2 deletions asic-rs-firmwares/vnish/src/backends/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,23 @@ use asic_rs_core::traits::{
miner::{Miner, MinerConstructor},
model::MinerModel,
};
use semver::Version;
pub use v1_2_0::VnishV120;
pub use v1_3_0::VnishV130;

pub mod v1_2_0;
pub mod v1_3_0;

pub struct Vnish;

impl MinerConstructor for Vnish {
#[allow(clippy::new_ret_no_self)]
fn new(ip: IpAddr, model: impl MinerModel, _: Option<semver::Version>) -> Box<dyn Miner> {
Box::new(VnishV120::new(ip, model))
fn new(ip: IpAddr, model: impl MinerModel, version: Option<semver::Version>) -> Box<dyn Miner> {
match version {
// Manual throttle (`tuning_percent`) was introduced in the 1.3.x line;
// assumed cutoff 1.3.0 (1.3.4 verified live, 1.2.x API has no endpoint).
Some(ref v) if *v >= Version::new(1, 3, 0) => Box::new(VnishV130::new(ip, model)),
_ => Box::new(VnishV120::new(ip, model)),
}
}
}
7 changes: 7 additions & 0 deletions asic-rs-firmwares/vnish/src/backends/v1_2_0/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,9 @@ impl GetWattage for VnishV120 {
}
}

// VNish 1.2.x has no manual throttle endpoint; tuning_percent lands in v1_3_0.
impl GetTuningPercent for VnishV120 {}

impl GetTuningTarget for VnishV120 {}

impl GetScaledTuningTarget for VnishV120 {}
Expand Down Expand Up @@ -843,6 +846,10 @@ impl SetPowerLimit for VnishV120 {
}
}

// VNish 1.2.x has no manual throttle endpoint; tuning_percent lands in v1_3_0.
#[async_trait]
impl SetTuningPercent for VnishV120 {}

#[async_trait]
impl SupportsPoolsConfig for VnishV120 {
async fn get_pools_config(&self) -> anyhow::Result<Vec<PoolGroupConfig>> {
Expand Down
Loading