Jump to content

FanControl, my take on a SpeedFan replacement

Plugin system

 

Currently experimenting with a plugin system. Had a branch that I used myself for a while that worked with Dell or Alienware laptops, but didn't want to pollute the main program with all of its dependencies. I prototyped a quick plugin system to inject sensors and controls into fan control.

 

The plugin system is not yet live, but here's a preview of what a plugin looks like.

 

https://github.com/Rem0o/FanControl.DellPlugin

Link to comment
Share on other sites

Link to post
Share on other sites

On 3/9/2021 at 5:52 PM, Rem0o said:

Plugin system

 

Currently experimenting with a plugin system. Had a branch that I used myself for a while that worked with Dell or Alienware laptops, but didn't want to pollute the main program with all of its dependencies. I prototyped a quick plugin system to inject sensors and controls into fan control.

 

The plugin system is not yet live, but here's a preview of what a plugin looks like.

 

https://github.com/Rem0o/FanControl.DellPlugin

Ohh interesting.

 

Could this ultimately be used with the Redistributable HWInfo Plugin and Shared memory function, to inject HWInfo sensor values into FanControl? I use that to display HWInfo sensor information in RainMeter and finally being able to use Fan Control instead of ArgusMonitor to control my fans (using the HW Monitor sensor inputs) would be great!

Link to comment
Share on other sites

Link to post
Share on other sites

3 hours ago, Ja50nK said:

Ohh interesting.

 

Could this ultimately be used with the Redistributable HWInfo Plugin and Shared memory function, to inject HWInfo sensor values into FanControl? I use that to display HWInfo sensor information in RainMeter and finally being able to use Fan Control instead of ArgusMonitor to control my fans (using the HW Monitor sensor inputs) would be great!

Precisely. You can write your own sensors following the given interface. How you update/fetch the values is up to you.

Just reference FanControl.Plugins.dll into your own project and name your assembly Fancontrol.[Your plugin name here].dll. Then simply create a class which implement IPlugin, and throw that dll into the Plugins folder of fancontrol.

Link to comment
Share on other sites

Link to post
Share on other sites

On 3/7/2021 at 9:48 PM, Rem0o said:

Start % and stop % does exactly that.   Just set start % to the "boost" you need, and stop the lowest % it can maintain while spinning.

Are you sure?
I tried to set the start = 80%, the cooler stays until the power rises to 80%

78% - standing, 79% - standing, 80% - starts to rotate by 80%

 

it would be great if there was a kickstarter function. you put 0% -> 40%, the cooler starts at 80% and then smoothly drops to 40%

Link to comment
Share on other sites

Link to post
Share on other sites

24 minutes ago, lonely_myp said:

Are you sure?
I tried to set the start = 80%, the cooler stays until the power rises to 80%

78% - standing, 79% - standing, 80% - starts to rotate by 80%

 

it would be great if there was a kickstarter function. you put 0% -> 40%, the cooler starts at 80% and then smoothly drops to 40%

You got to set the stop %  also.

 

Try this: 
Start 80%,

Stop 30%

Step up/down to 5% each

Then set the fan speed to 40%.

Link to comment
Share on other sites

Link to post
Share on other sites

16 minutes ago, Bitter said:

Wooooaaaahhhhh How'd that happen?

Well with the plugin system in place, I happened to find some code that could read the sensors while HWInfo is running. Since this is a very common request, "HWInfo supports this", "HWInfo supports that", figured making a plugin of HWInfo in FanControl would make a lot of sense. Since it's a plugin, it doesn't pollute the main program and it took less than an hour to implement. So there you go.

Link to comment
Share on other sites

Link to post
Share on other sites

thats a damn nice project you have going here, and i hope i can use it in the future once speedfan becomes incompatible with new hardware or software.

 

i wanted to take a look at it but it doesnt start correctly.

the process launches and makes a log file but doesnt show the main window. running a not-quite-up-to-date w7 (thanks for being annoying and removing functionality, ms) with .net framework 4.8 it asked for.

 

log file below, maybe you see an easy solution (besides updating/re-installing w7 or going w10....which i kinda want to keep pushing back until i buy new hardware).

log.txt

Link to comment
Share on other sites

Link to post
Share on other sites

Hey Rem0o, I've been using your app for a while, and I have to say, I'm amazed at how well it works and how powerful it is, all while being so simple.

 

That said, I believe I've found a bug with the one-way hysteresis feature that was added in V51.

On 10/8/2020 at 10:03 AM, Rem0o said:

Update 51

 

Decided to give the option of one-way (down only) or two-way hysteresis:

https://github.com/Rem0o/FanControl.Releases/releases/tag/V51

 

image.png.104800cbdb0cee4299c6482b88feeb4d.png

 

With one-way hysteresis enabled, the fan controller only drops the fan speed when the hysteresis threshold is reached. The problem happens when you reach the bottom of the fan curve. When the temperature reaches a point which corresponds to the lowest fan speed, the controller always drops to that speed, even if the actual hysteresis threshold hasn't been reached yet. For example, when this sensor heats up to 37 C, it will output a fan speed of 44%. It can go down to 36 C, and the fan speed will stay the same, but once it reaches 35 C, the fan speed will drop to 30%, even though the hysteresis threshold should be 34 C.

 

example.png.7214fbdb17312ec19e93bb2540752d37.png

 

This means that, when you're right around the bottom of the fan curve, the hysteresis just continuously resets at the bottom, and oscillates between the bottom 2 degrees on the curve. It's particularly noticeable on curves with low temperature resolution (relative to the total temperature range) like the one in my example, which might be used for case temp, or water temp, etc.

Link to comment
Share on other sites

Link to post
Share on other sites

8 hours ago, Kitsunemimi said:

Hey Rem0o, I've been using your app for a while, and I have to say, I'm amazed at how well it works and how powerful it is, all while being so simple.

 

That said, I believe I've found a bug with the one-way hysteresis feature that was added in V51.

 

With one-way hysteresis enabled, the fan controller only drops the fan speed when the hysteresis threshold is reached. The problem happens when you reach the bottom of the fan curve. When the temperature reaches a point which corresponds to the lowest fan speed, the controller always drops to that speed, even if the actual hysteresis threshold hasn't been reached yet. For example, when this sensor heats up to 37 C, it will output a fan speed of 44%. It can go down to 36 C, and the fan speed will stay the same, but once it reaches 35 C, the fan speed will drop to 30%, even though the hysteresis threshold should be 34 C.

 

example.png.7214fbdb17312ec19e93bb2540752d37.png

 

This means that, when you're right around the bottom of the fan curve, the hysteresis just continuously resets at the bottom, and oscillates between the bottom 2 degrees on the curve. It's particularly noticeable on curves with low temperature resolution (relative to the total temperature range) like the one in my example, which might be used for case temp, or water temp, etc.

Well that's a design choice, as if there is hysteresis at the limit, it also introduce other kinds of problem. I would recommend just changing to two-way, or set your minimum point lower, like 30 deg/25%.

Link to comment
Share on other sites

Link to post
Share on other sites

Hi,

 

Got this working (nearly) the way I want it but have a question. I have two accounts on Windows: admin and standard, and no matter what I try I cannot get Fan Control to load automatically in the standard account.

 

Firstly, you have to run this as an administrator in the standard account or else they sensors will not appear.

Secondly, I have tried every conceivable way of using the task scheduler to run it with highest privileges but it will only run it hidden and after about 1 min it crashes windows and reboots itself. I am presuming it is trying to write to a protect folder when it is running as a service and causes the crash. (I know it is hidden as I can see it as a service and the fan are reacting as they should).

Also, I have tried putting it into different and shared folders and I have tried giving privileges to different folder, but to no avail.  

 

Any light you can shed on this how this might be solved would be very much appreciated.

 

It is a fantastic program and I will continue to use it even if I have to enter a password each time I log in.

 

Cheers.

 

Link to comment
Share on other sites

Link to post
Share on other sites

Absolute legend! Just the app I needed to control my water cooled PC fans. 

Keep up the good work. Paypal donation sent. 

Link to comment
Share on other sites

Link to post
Share on other sites

Had to register to say THANK YOU, tried SpeedFan some time ago without much success, changed cases and my fan controller on the LianLi Mesh 2 Performance isn't working, couldn't troubleshoot and fix it, downloaded Fan Control and was done in a few seconds, very easy to work with with a great minimalistic interface, just made 2 presets to switch as needed, 100% all fans and 30% for dead silent when using the computer at night. Will definitely recommend this to more people.

Link to comment
Share on other sites

Link to post
Share on other sites

Nice. Was googling for some sort of modern version and Google led me here. Nice work!

PLEASE QUOTE ME IF YOU ARE REPLYING TO ME

Desktop Build: Ryzen 7 2700X @ 4.0GHz, AsRock Fatal1ty X370 Professional Gaming, 48GB Corsair DDR4 @ 3000MHz, RX5700 XT 8GB Sapphire Nitro+, Benq XL2730 1440p 144Hz FS

Retro Build: Intel Pentium III @ 500 MHz, Dell Optiplex G1 Full AT Tower, 768MB SDRAM @ 133MHz, Integrated Graphics, Generic 1024x768 60Hz Monitor


 

Link to comment
Share on other sites

Link to post
Share on other sites

tinkered around with it, seems really good, will give it a go once i redo my build. i currently have all my case fans running at 100% along with my tower cooler fans at 100 percent, i already purchased some pwm fans to redo this once i get some time. software is very decent.

Link to comment
Share on other sites

Link to post
Share on other sites

Hi @Rem0o, thanks for the frequent updates, it's amazing.

 

When I saw the HWInfo plugin support I was thrilled, however I can't get it to work. I have HWiNFO64 v7.00-4400 with Shared Memory enabled, Fan Control is up to date (V73).

 

In my Plugins folder I have :

602203333_2021-03-2812_24_51-Plugins.jpg.cf1b3b4a6823b7f71f5fa9725c97c131.jpg

 

However, nothing changes in the main UI, no trace of new sensors. Is there something I'm missing ?

 

Thanks!

 

EDIT : found it! The log file mentioned this (sorry it's in french, for Rémi it should be ok I guess?) :

Quote

FanControl.HWInfo.dll' ---> System.NotSupportedException: Tentative de chargement d'un assembly à partir d'un emplacement réseau qui aurait entraîné l'utilisation de l'assembly en mode Bac à sable (sandbox) dans les versions antérieures du .NET Framework. Cette version du .NET Framework n'activant pas la stratégie CAS par défaut, ce chargement peut être dangereux. Si ce chargement n'est pas destiné à utiliser l'assembly en mode Bac à sable (sandbox), activez le commutateur loadFromRemoteSources. Pour plus d'informations, consultez http://go.microsoft.com/fwlink/?LinkId=155569.

After some research, it's a matter of unblocking the FanControl.HWInfo.dll in the Plugins folder by right clicking the file > Properties > Unblock (at the bottom, next to Security: This file came from another computer).

 

EDIT 2 : I have also unblocked FanControl.Plugins.dll in the Plugins folder, as it seems it was also blocked, but without any effect as it's already here in the main folder (why have it twice BTW ?).

There is one message remaining in the log when I launch the software :

28/03/2021 12:57:34: System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
   à FanControl.Domain.PluginService.<LoadPlugins>d__3.MoveNext()
   à FanControl.Domain.ComputerAccessLayer.Initialize(Nullable`1 disableStorage)

 

Link to comment
Share on other sites

Link to post
Share on other sites

On 3/28/2021 at 6:27 AM, tenuis said:

 

 

EDIT 2 : I have also unblocked FanControl.Plugins.dll in the Plugins folder, as it seems it was also blocked, but without any effect as it's already here in the main folder (why have it twice BTW ?).

There is one message remaining in the log when I launch the software :


28/03/2021 12:57:34: System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
   à FanControl.Domain.PluginService.<LoadPlugins>d__3.MoveNext()
   à FanControl.Domain.ComputerAccessLayer.Initialize(Nullable`1 disableStorage)

 

No need to add it twice. You can remove it from the plugin folder and keep it in the root.

Link to comment
Share on other sites

Link to post
Share on other sites

This App is exactly what I've been looking for, and I can't wait to get started setting up my fan profiles, but before I start I have a couple questions:

FanControl is showing me 3 Fan/Control Cards, that don't actually exist on my hardware I believe, is there any way to figure out where the data is coming from, maybe I do have some fan headers I don't know about and maybe disable them in the software so it doesn't cause any issues? (I think they might be aRGB-Headers being misinterpreted by the software)
 

I would like to add some finer Fan controls to my case (my mainboard only has 3 headers for case fans, I would like to control up to 6 fans individually, right now I have to daisy-chain all the front ones), are there any aftermarket Fan Hubs/Controllers known to work with the FanControl software that I can add to my case? Or any Ideas, which ones would most likely work?

Link to comment
Share on other sites

Link to post
Share on other sites

1 hour ago, Alvin853 said:

This App is exactly what I've been looking for, and I can't wait to get started setting up my fan profiles, but before I start I have a couple questions:

FanControl is showing me 3 Fan/Control Cards, that don't actually exist on my hardware I believe, is there any way to figure out where the data is coming from, maybe I do have some fan headers I don't know about and maybe disable them in the software so it doesn't cause any issues? (I think they might be aRGB-Headers being misinterpreted by the software)
 

I would like to add some finer Fan controls to my case (my mainboard only has 3 headers for case fans, I would like to control up to 6 fans individually, right now I have to daisy-chain all the front ones), are there any aftermarket Fan Hubs/Controllers known to work with the FanControl software that I can add to my case? Or any Ideas, which ones would most likely work?

The chip that manages fans on your board probably has 6 channels, but only 3 are used (mATX/ITX ?). As for extending your controls, you could try a Y-splitter, as I have no experience with any fan controller working with LibreHardwareMonitor as of now.  Though if a specific fan controller is know to have open APIs available online, support could be added easily.

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×