HWiNFO can't see fans on newer Dell machines?

Hello,

I have a Dell Precision 7770 laptop with i9-12950HX CPU and nVidia RTX 4500 GPU. For some reason I can't see any fans in this laptop with HWiNFO (or anything else for that matter), which I know is a common issue with Dells. On the main HWiNFO screen, they are listed under the "SMBIOS DMI" as two "Cooling Device" entries, but they don't show up in the sensor list.

I think someone posted about this earlier and mentioned a fix, but not sure:


I attached the debug report in case it is of any value.
 

Attachments

Does that DellFanManagement work for you?
Hi Martin,

My apologies if I didn't post my reply so you could see it. As mentioned above, that app does work. HWiNFO 7.30 still doesn't seem to see the EC fan control module, so no fans are showing in the sensor list.
 
SilverAzide, I have a Dell XPS 15 9570 which is on a i7-8750h CPU. I don't see any fans for HWiNFO either, can you do a screenshot of "SMBIOS DMI" where the "Cooling Device" entries show up as I can't even find those.
 
I'm looking into this new method, but implementation in HWiNFO wouldn't be trivial so I'm checking for the best way how to do that...
The DellFanManagement application seems to have an option for logging, so it would be useful if you could create such log and post it here.
Unfortunately I don't have such system so I can't try this and test myself.
 
I'm looking into this new method, but implementation in HWiNFO wouldn't be trivial so I'm checking for the best way how to do that...
The DellFanManagement application seems to have an option for logging, so it would be useful if you could create such log and post it here.
Unfortunately I don't have such system so I can't try this and test myself.
I can't figure out how to get it to log anything, sorry! The code that logs appears to be left over code for an older command-line version of the tool that no longer exists. :(
 
Thanks SilverAzide, yours seems to have way more things listed under SMIBIOS DMI than I do as I don't have the Processor, L1 Cache, L2 Cache, L3 Cache, Bios Language, Group Associations, Portable Battery, Cooling Device, Temperature Probe, System Power Supply from my brief comparison...

1663805238864.png
 
Last edited:
Hi @Martin, I just noticed this thread. I am author of Dell Fan Management and I would be happy to pass along any information to help with this implementation. I did a lot of slinking around Dell's libsmbios C code (for Linux SMBIOS support), a lot of BIOS token/variable dumps, and some reverse-engineered Dell Power Manager code to figure this out.

I think any Dell system from 2018+ (maybe older), desktops included, supports the same WMI interface for reading the fan speeds. Starting in 2021 (Tiger Lake systems) they removed the old interface that HWiNFO and other tools that can deal with Dell fans were using, so WMI is the only way to go now that I am aware of.

Regarding logging, I haven't fully built that out in Dell Fan Management but if you run it from the command line, you will get some text log entries dumped out there. (This is a sort of hobby / side project for me. I care a lot of about fan control so I have gotten it to a point where it is workable for my purposes, but I haven't been able to find time to finish a fully fleshed out release.)
 
Last edited:
Hi @Martin, I just noticed this thread. I am author of Dell Fan Management and I would be happy to pass along any information to help with this implementation. I did a lot of slinking around Dell's libsmbios C code (for Linux SMBIOS support), a lot of BIOS token/variable dumps, and some reverse-engineered Dell Power Manager code to figure this out.

I think any Dell system from 2018+ (maybe older), desktops included, supports the same WMI interface for reading the fan speeds. Starting in 2021 (Tiger Lake systems) they removed the old interface that HWiNFO and other tools that can deal with Dell fans were using, so WMI is the only way to go now that I am aware of.

Regarding logging, I haven't fully built that out in Dell Fan Management but if you run it from the command line, you will get some text log entries dumped out there. (This is a sort of hobby / side project for me. I care a lot of about fan control so I have gotten it to a point where it is workable for my purposes, but I haven't been able to find time to finish a fully fleshed out release.)

Thank you very much for you offer, I really appreciate this!
I was already looking at the repo and the WMI method seems rather simple, even though the WMI interface is not the best choice in terms of performance, but it looks like there's no other way.
My biggest problem is that I have to translate this into plain C++ and that's where things get funny as I have to work with COM interface (which I don't like for several reasons :D). Moreover, I don't have such DELL machine at my disposal to test it. Do you maybe have C/C++ code showing how to use this method?
 
I don't have any C++ code, unfortunately, I'm very much a .NET guy :-\
I can point you specifically to the WMI code (that you have probably found already) here, lines 393-450. It's basically a matter of locating the ACPI WMI object and then invoking a method against it (the parameters are basically a byte array, and Dell has a specific format for commands which I have recreated as "structs" in C#). To get the fan speeds you need to call GetTokenCurrentValue (line 156) with the token 0xF600 for fan 1 and 0xF610 for fan 2.

Microsoft has some sample code for doing a WMI call (which you've probably also looked at) which seems to have a lot more setup/cleanup than you have to do in C#.
I wonder if it would be reasonable to set up a simple .NET library and call that from C++. (That might add dependencies that you don't want. Looks like it would also involve wrapping it with COM stuff.)

To some degree I can see that this is a matter of "how much work do I want to do" / benefit analysis and maybe it doesn't make sense to put too much effort into it.

Anyway, I'd be happy to test stuff for you but I can see that it would be a bit of a "stab in the dark" if you don't have a system around when doing the dev work...
If it would be helpful, I can also facilitate access to a laptop that supports the WMI interface. (SSH tunnel + RDP. We could take that to PM.)
 
Thanks! Actually I know how to execute WMI queries in C++ via COM, my problem is that I don't know how to translate those C# commands into WMI queries.
Would you be able to use the wmic console and figure out how these commands could be executed there? Probably the first step would be to locate the ACPI WMI object using some query and then execute the right commands with buffers.
Also is there some command, kind of presence check that would tell if this DELL interface is supported? The old SMI interface had cmd 0xFEA3 returning a unique signature "DELLDIAG" for example.
 
I've done some PowerShell mucking around this area before, but my comfort level with the syntax isn't the greatest.

> Get-WmiObject -Namespace root/wmi -Class BFn
...This gets us to the ACPI WMI object.
1665505699284.png

> Get-WmiObject -Namespace root/wmi -List | select __Path -Expand Methods | select Origin, Name, __Path
This one lists all of the methods in the root/wmi namespace with the class that they are attached to. The BFn class has a method named "DoBFn". In my limited experience, the presence of this method is the indicator that the system supports this WMI interface.
1665506093293.png

The "DoBFn" is the method that needs to be called. It has a single parameter called "Data" which takes the byte array buffer that represents the command.
The layout looks like this: https://github.com/AaronKelley/DellFanManagement/blob/develop/DellSmbiosSmiLib/DellSmi/SmiObject.cs
"Class" and "Selector" are both shorts and I have some of the possible values listed here and here, with links to where I got them from (Linux code).

I've never tried to make a call to the DoBFn method outside of C# but I'll play with that and see what I come up with.
 
Update: I resumed work on this and making some progress :) Hopefully there will soon be something to test ;)
 
Hi, I have a Dell XPS 15 9510 and I'm looking for a way to monitor what RPMs my fans are at. I'm not super interested in having the ability to change the RPMs(but that would be cool as well).

I found this forum post looking around the internet.

Is there any way I can help HWiNFO? Any info I can provide? I'd love to get this functionality and I'm more then willing to try and help out.
 
Hi, I have a Dell XPS 15 9510 and I'm looking for a way to monitor what RPMs my fans are at.
To my knowledge there are only two ways to do this right now.
  • Dell Fan Management, a tool written by me for managing Dell laptop fans. I have largely abandoned work on it because Dell changed how fan control works starting with their 2021 systems, so manual control is either impossible or no one has figured it out yet. If someone figures this out, I will pick up work on it again. However, I did figure out reading the fan speed RPMs so you can see the current values in this app.
  • You can also read the fan speed using Dell Command | Monitor and PowerShell commands.
 
I have made some progress here but stopped struggling passing the correct BDat object (encapsulating an array in a variant). In C++ this is quite tough and the documentation is not clear..
Debugging this and moving on will be probably quite tedious and require many test runs...
 
To my knowledge there are only two ways to do this right now.
  • Dell Fan Management, a tool written by me for managing Dell laptop fans. I have largely abandoned work on it because Dell changed how fan control works starting with their 2021 systems, so manual control is either impossible or no one has figured it out yet. If someone figures this out, I will pick up work on it again. However, I did figure out reading the fan speed RPMs so you can see the current values in this app.
  • You can also read the fan speed using Dell Command | Monitor and PowerShell commands.
Thanks for the info. I'll have to go check those utilities out.

I have made some progress here but stopped struggling passing the correct BDat object (encapsulating an array in a variant). In C++ this is quite tough and the documentation is not clear..
Debugging this and moving on will be probably quite tedious and require many test runs...
Ah, unfortunately I don't know a lick of c/c++ but I'm a hobbyist programmer and would be happy to try and help by testing debug builds or anything else.
 
I have made some progress here but stopped struggling passing the correct BDat object (encapsulating an array in a variant). In C++ this is quite tough and the documentation is not clear..
Debugging this and moving on will be probably quite tedious and require many test runs...
Thanks for the effort! I would also be happy to help to test builds for this on my latitude 5531 :)
 
Back
Top