From 3473a3bfd45eca537f161719a6c3fa845ae9d546 Mon Sep 17 00:00:00 2001 From: Blacktempel <6657796+Blacktempel@users.noreply.github.com> Date: Fri, 20 Feb 2026 12:20:06 +0100 Subject: [PATCH] Add Control sensor for WVP2. (#2234) * Add Control sensor for WVP2. * Rename control sensor & assign control properly. --- .../Hardware/PowerMonitor/WireViewPro2.cs | 57 +++++++++++++------ 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/LibreHardwareMonitorLib/Hardware/PowerMonitor/WireViewPro2.cs b/LibreHardwareMonitorLib/Hardware/PowerMonitor/WireViewPro2.cs index b5da949..94f5632 100644 --- a/LibreHardwareMonitorLib/Hardware/PowerMonitor/WireViewPro2.cs +++ b/LibreHardwareMonitorLib/Hardware/PowerMonitor/WireViewPro2.cs @@ -337,12 +337,16 @@ public sealed class WireViewPro2 : Hardware, IPowerMonitor AddSensor("Total Power", 30, SensorType.Power, dd => (float)dd.SumPowerW); //Fan - var fan = AddSensor("Fan", 40, SensorType.Fan, dd => CalculateFanSpeed(dd)); - var fanControl = new Control(fan, _settings, 0, 100); + var fan = AddSensor("Fan", 40, SensorType.Fan, CalculateFanSpeed); + var ctrl = new Control(fan, _settings, 0, 100); - fan.Control = fanControl; - fanControl.ControlModeChanged += OnFanControlModeChanged; - fanControl.SoftwareControlValueChanged += OnSoftwareControlValueChanged; + fan.Control = ctrl; + ctrl.ControlModeChanged += OnFanControlModeChanged; + ctrl.SoftwareControlValueChanged += OnSoftwareControlValueChanged; + + //Control + var fanControl = AddSensor($"{Name} ({_portName})", 50, SensorType.Control, GetFanSpeedInPercent); + fanControl.Control = ctrl; } private WireViewPro2Sensor AddSensor(string name, int index, SensorType sensorType, GetWireViewPro2SensorValue getValue) @@ -427,14 +431,10 @@ public sealed class WireViewPro2 : Hardware, IPowerMonitor WriteConfig(deviceData.Config); } - /// - /// Fan speed for this device is an approximation based on the curve configuration and current temperatures.
- /// The device itself does not report actual fan speed. - ///
- private float CalculateFanSpeed(DeviceData dd) + private float GetFanSpeedInPercent(DeviceData dd) { var fanConfig = dd.Config.FanConfig; - double targetRpm; + float fanSpeedInPercent; switch (fanConfig.Mode) { @@ -445,23 +445,44 @@ public sealed class WireViewPro2 : Hardware, IPowerMonitor if (tempMax <= tempMin || currentTemperature <= tempMin) { - targetRpm = fanConfig.DutyMin; + fanSpeedInPercent = fanConfig.DutyMin; } else if (currentTemperature >= tempMax) { - targetRpm = fanConfig.DutyMax; + fanSpeedInPercent = fanConfig.DutyMax; } else { var temp = (currentTemperature - tempMin) / (tempMax - tempMin); - var fanSpeedInPercent = fanConfig.DutyMin + temp * (fanConfig.DutyMax - fanConfig.DutyMin); - targetRpm = fanSpeedInPercent; + fanSpeedInPercent = (float)(fanConfig.DutyMin + temp * (fanConfig.DutyMax - fanConfig.DutyMin)); } - - targetRpm = targetRpm == 0 ? 0 : targetRpm / 100.0 * MaxFanRPM; break; case FanMode.FanModeFixed: - targetRpm = fanConfig.DutyMin == 0 ? 0 : fanConfig.DutyMin / 100.0 * MaxFanRPM; + fanSpeedInPercent = fanConfig.DutyMin; + break; + default: + return -1; + } + + return fanSpeedInPercent; + } + + /// + /// Fan speed for this device is an approximation based on the curve configuration and current temperatures.
+ /// The device itself does not report actual fan speed. + ///
+ private float CalculateFanSpeed(DeviceData dd) + { + var fanConfig = dd.Config.FanConfig; + double targetRpm; + + var fanSpeedInPercent = GetFanSpeedInPercent(dd); + + switch (fanConfig.Mode) + { + case FanMode.FanModeCurve: + case FanMode.FanModeFixed: + targetRpm = fanSpeedInPercent == 0 ? 0 : fanSpeedInPercent / 100.0f * MaxFanRPM; break; default: return -1;