[Vorstellung] NoteBook FanControl (NBFC)

Hey :)
Ich habe ein Clevo N150SD (z.B. XMG A505) und würde gerne verhindern, dass der Lüfter manchmal im Office anspringt. Ich habe noch nicht wirklich herausgefunden wie das jetzt genau funktioniert. Kannst du mir helfen eine Konfigurationsdatei zu erstellen? :)
 
If someone would make a config file for Lenovo Y50 i would make a donation for 50€. I really need to control the fans and i´m willing pay even more, i just need to control the fans. Thank you
 
KingLuis942 schrieb:
Ich habe eben für das Acer VN7 591G (i7, 860M, 8GB, SSD+HDD) eine Config erstellt.
Anhang anzeigen 496732

Damit kann man beide Lüfter (links und rechts) regeln. Ich habe beide gleichmäßig eingestellt.

Funktioniert bei meinem VN7-791G leider nicht, schade.

Ich hatte das Lüfter-Problem für mich auch schon anders gelöst:

Der linke Lüfter sprang, Acer-geregelt, schon bei niedrigen Temperaturen an, lief daher oft; den habe ich mechanisch deaktiviert.

Jetzt springt der rechte Lüfter bei etwa 66° CPU-Temperatur an, und macht, was ich mir wünsche: kühlt das System schnell auf etwa 50° runter.

Dank Heatpipe wird meine CPU aber, im "Office-Betrieb", normalerweise kaum wärmer als 60°.
Von daher hat es sich gelohnt, für den Office-Betrieb ein Gamer-Notebook zu kaufen (nutze nur die CPU-integrierte Grafikfunktion).

NBFC nutze ich zur Zeit nur als Temperatur-Display, und um den rechten Lüfter ggf. manuell zu starten (das fkt. mit dem Profil des Aspire S3).
 
Beim VN7 791 ist wahrscheinlich die Regelung anders. Denn das 7xx müsste noch die Coolbust Funktion haben. Das 5xx hat das nicht.
 
Hi woher weiß ich welche Config ich wählen muss? Ich habe ein Notebook von Leonovo, ein Y500.
 
Hallo,

ich versuche im Moment für das Fujitsu Amilo xi 3670 eine Config zu erstellen und werde aus den Registern des Embedded Controller nicht so richtig schlau.
Vielleicht kann mal jemand rüber schauen und abschätzen, ob überhaupt eine Chance besteht, den Lüfter bei diesem Modell manuell zu steuern.

Mein Problem ist, dass im EC fast alle Werte nur 94 oder B8 sind und sich auch nicht verändern, wenn ich die CPU belaste oder die Lüftergeschwindigkeit geändert wird. Es gibt nur eine Handvoll Offsets, die sich manchmal ändern, aber anscheinend unabhängig von der CPU Temperatur oder Lüftergeschwindigkeit sind. Es bringt auch nichts, die sich ändernden Werte testweise zu überschreiben.
ec_amilo.PNG

Eine Sache ist mir allerdings aufgefallen. Das Notebook hat eine Silent Taste, die bei Aktivierung den Lüfter seltener laufen lässt und wahrscheinlich die CPU Frequenz begrenzt.
Ob diese Taste gedrückt ist, kann ich in RWEverything sehen, allerdings nicht in den EC Registern sondern im "ACPI Power Management IO Space". Wenn ich den Thread richtig verfolgt habe, kann NBFC diesen Bereich nicht überschreiben oder?
Links oben steht entweder 02 oder 06 je nachdem ob Silent gedrückt ist. Und die Werte der 3er Reihe mittig rechts ändern sich permanent, überschreiben dieser ändern aber auch nichts an der Lüftergeschwindigkeit.
acpiiospace.PNG


Durch zufälliges Ausprobieren kommt man da wohl nicht weiter, deshalb habe ich mir die DSDT genauer angeschaut. Es existiert eine ThermalZone mit einigen Standardmethoden, allerdings keine FAN Objekte. Bedeutet das, dass eine manuelle Steuerung nicht möglich ist? Ich sehe da nämlich nichts, was auf die richtigen Offsets hinweisen könnte.
Könnte die Methode TCHK wichtig sein?

Code:
    Scope (_TZ)
    {
        Mutex (TZ0, 0x00)
        ThermalZone (TZ00)
        {
            Name (THIN, One)
            Name (CNTR, Zero)
            Name (TERR, Zero)
            Method (_CRT, 0, Serialized)
            {
                Store (\_SB.PCI0.LPCB.PMRD (0xE8), Local0)
                Add (Local0, 0x0112, Local0)
                Multiply (Local0, 0x0A, Local0)
                Return (Local0)
            }
            Method (_TMP, 0, NotSerialized)
            {
                If (THIN)
                {
                    TCHK ()
                }
                If (TERR)
                {
                    Store (Zero, TERR)
                    Store (\_SB.PCI0.LPCB.PMRD (0xF3), Local0)
                    Add (Local0, 0x0112, Local0)
                    Multiply (Local0, 0x0A, Local0)
                    Return (Local0)
                }
                Else
                {
                    Store (\_SB.PCI0.LPCB.PMRD (0xE7), Local0)
                    If (LLess (Local0, 0x03))
                    {
                        \_SB.PCI0.LPCB.PMMW (0x043F, 0xAA)
                        \_SB.PCI0.LPCB.PMMW (0x01E8, Zero)
                        Return (0x0B72)
                    }
                    If (LGreater (Local0, 0x6D))
                    {
                        Add (CNTR, One, CNTR)
                        If (LNotEqual (CNTR, 0x03))
                        {
                            Return (0x0E2E)
                        }
                    }
                    Store (Zero, CNTR)
                    Multiply (Local0, 0x0A, Local0)
                    Add (Local0, 0x0AAA, Local0)
                    If (LGreater (Local0, 0x127A))
                    {
                        Return (0x0E2E)
                    }
                    Return (Local0)
                }
            }
            Name (SKEY, Zero)
            Method (TCHK, 0, NotSerialized)
            {
                Acquire (TZ0, 0xFFFF)
                Store (THRG, Local0)
                And (Local0, 0x04, SPDF)
                If (THIN)
                {
                    Store (Zero, THIN)
                }
                Store (\_SB.PCI0.LPCB.PMRD (0xAF), Local7)
                And (Local7, 0x04, Local7)
                If (LNotEqual (Local7, Zero))
                {
                    \_SB.PCI0.LPCB.PMMW (0x043F, 0xAA)
                    \_SB.PCI0.LPCB.PMMW (0x01E8, Zero)
                    Store (One, TERR)
                }
                Else
                {
                    Store (0x6B, SSMP)
                    Notify (TZ00, 0x81)
                }
                Notify (TZ00, 0x80)
                Notify (\_PR.CPU0, 0x80)
                Release (TZ0)
            }
            Method (_PSL, 0, Serialized)
            {
                Return (Package (0x02)
                {
                    \_PR.CPU0, 
                    \_PR.CPU1
                })
                If (MPEN)
                {
                    Return (Package (0x02)
                    {
                        \_PR.CPU0, 
                        \_PR.CPU1
                    })
                }
                Return (Package (0x01)
                {
                    \_PR.CPU0
                })
            }
            Method (_PSV, 0, Serialized)
            {
                Store (\_SB.PCI0.LPCB.PMRD (0xF4), Local0)
                Add (Local0, 0x0112, Local0)
                Multiply (Local0, 0x0A, Local0)
                Return (Local0)
            }
            Method (_TC1, 0, Serialized)
            {
                Return (Zero)
            }
            Method (_TC2, 0, Serialized)
            {
                Return (0x0A)
            }
            Method (_TSP, 0, Serialized)
            {
                Return (0x32)
            }
        }
    }


Weiterhin habe ich eine Stelle mit der OperationRegion "Embedded Control" gefunden, allerdings nicht im Scope Thermal Zone, sondern unter Device PCI0/ Device LPCB/ Device KBEC und da die Methode _REG.
Dort sind mehrere Offsets definiert, aber es sieht nicht so aus, als wenn das irgendetwas mit der Lüftersteuerung zu tun hat?
Kann es sein, dass der Embedded Controller bei diesem Modell nicht die Aufgabe der Lüftersteuerung übernimmt, sondern die Logik irgendwo anders steckt, wo man nicht ohne weiteres rankommt?

Code:
                    Method (_REG, 2, NotSerialized)
                    {
                    }
                    OperationRegion (ERAM, EmbeddedControl, Zero, 0x0100)
                    Field (ERAM, ByteAcc, NoLock, Preserve)
                    {
                        ECTM,   8, 
                        SCIC,   8, 
                        SCIP,   8, 
                        Offset (0x04), 
                        CMCM,   8, 
                        CMD1,   8, 
                        CMD2,   8, 
                        CMD3,   8, 
                        Offset (0x18), 
                        SMPR,   8, 
                        SMST,   8, 
                        SMAD,   8, 
                        SMCM,   8, 
                        SMD0,   264, 
                        SMAA,   8, 
                        Offset (0x49), 
                        P55S,   8, 
                        Offset (0x4E), 
                            ,   5, 
                        P55,    1, 
                        Offset (0x50), 
                        P60S,   8, 
                        P61S,   8, 
                        P62S,   8, 
                        P63S,   8, 
                        P64S,   8, 
                        P65S,   8, 
                        P66S,   8, 
                        P67S,   8, 
                        Offset (0x78), 
                        P60,    1, 
                        P61,    1, 
                        P62,    1, 
                        P63,    1, 
                        P64,    1, 
                        P65,    1, 
                        P66,    1, 
                        P67,    1, 
                        Offset (0x80), 
                        TMST,   8, 
                        Offset (0x83), 
                        TMVL,   8, 
                        TMLW,   8, 
                        TMHG,   8, 
                        TMTK,   8, 
                        TMCT,   8, 
                        T1ST,   8, 
                        Offset (0x8B), 
                        T1VL,   8, 
                        T1LW,   8, 
                        T1HG,   8, 
                        T1TK,   8, 
                        T1CT,   8, 
                        T2ST,   8, 
                        Offset (0x93), 
                        T2VL,   8, 
                        T2LW,   8, 
                        T2HG,   8, 
                        T2TK,   8, 
                        T2CT,   8
                    }



Grüße, Hendrik
 
Hallo,

ich habe ein Dell XPS17, L702X.
Ich versuche schon seit einiger Zeit die automatische Lüftersteuerung zu umgehen.
Nun bin ich auf das Program NBFC gestoßen.

Leider bekomme ich das überhaupt nicht hin.
Könntet Ihr mir bitte dabei helfen ?

Hier einige Infos:

x60 = Lüftersteuerung - Spalte

96 = 40 Auto und 00 Manuell , 01 langsam, 02 schnell

99 = Lüftergeschwindigkeit 01,02,03,04

Dabei ergeben sich folgende zusammenhängende Zahlen:

(98)=(99)=(100)
65=01=65
54=02=54
48=03=48
3F=04=3F

Ich hoffe das alles ist nicht all zu verwirrend, ich kann es nicht anders erklären :confused_alt:

Ich habe auch bereits versucht ein Config anzulegen jedoch ohne Erfolg.

MFG
 
Zuletzt bearbeitet:
Habe das Tool mit meinem Medion Akoya P6815 getestet.
Es ändert sich leider nur ein Register bei Veränderung der Lüftergeschwindigkeit. Es ist Register 236. Die einstellbaren Werte sind 01-04. Habe zwei Configs erstellt. 1. Mit 236 als Read und Write Register. 2. Mit 236 als Write und 237 (welches immer auf 01 steht) als Read Register. Der Lüfter lässt sich steuern, allerdings immer nur für 1,2 Sekunden. Dann ändert sich der Wert wieder von selbst, dann springt das Tool wieder ein usw. Die Reaktionszeit auf 250ms zu verringern hat leider auch nichts gebracht. Falls jemand ne Idee hat: Immer her damit!

Anbei die Screenshots von 3 der 4 Stufen.
Die grün Markierten Register ändern sich auch bei konstanter Lüftergeschwindigkeit, werden also für die Temperatur zuständig sein.
 

Anhänge

  • Medion Akoya P6815.png
    Medion Akoya P6815.png
    27,4 KB · Aufrufe: 502
Zuletzt bearbeitet:
Hi, I would like to report problems with latest version (1.3.4) on my HP 6465b. The program sometimes goes crazy after resuming laptop from sleep, like reporting 99 °C temperature and spinning fan for 100 %, even though heatsink is cold. Also temperature does not go down. Other times (again after resuming from sleep) the NFC service stops working (the box in program window is unchecked, when I re-check it, it automatically unchecks again), only reboot helps.

Version 1.0.0.0 was fine. I reverted to 1.1.1.19 and see how it works.
 
Moessie900 schrieb:
is there something for the acer v nitro black edition ? we really need this!
I own a Nitro VN7-791G-582W; I am not sure about differences to the BlackEdition.

As I wrote above (#1063) in German I found a solution for keeping my VN7 calm, I try to repeat it in English:
- the left fan was nearly always running; the right fan only starts, if the system gets hot;
- in NBFC the config "Aspire S3" was partly usable, it can only control the right fan;
- so I disabled the left fan manually.

Now I have a system that is usually (Office, e-mails and browser) really calm (no fan running) with a CPU-temperature around 60°C, thanks to the heatpipe system (and disabled NVIDIA GPU).
If the systems gets hotter, the right fan quickly cools it down from about 66°C to about 50°C.

I use NBFC with the config "Aspire S3" now only to display the temperature and to eventually manually start the right fan.
 
Hallo, weis jemand wie man die Stufen ändern kann?
Hab leider hier nichts gefunden oder überlesen.
Möchte 5%oder 10% Stufen von 0- 100% haben, damit ist es quasi Stufenlosen?
 
magic111 schrieb:
Hallo, weis jemand wie man die Stufen ändern kann?
Hab leider hier nichts gefunden oder überlesen.
Möchte 5%oder 10% Stufen von 0- 100% haben, damit ist es quasi Stufenlosen?
Was für Stufen meinst du? In NBFC kann man die Soll-Geschwindigkeit des Lüfters im Prinzip stufenlos einstellen.

Manche Notebook-Lüfter "kennen" aber nur (wenige) Stufen, bei einem Dell ganz extrem erlebt, da gibt es nur 0%, 50% und 100%.
Daran kann man mit NBFC soweit ich weiß nichts ändern.
 
Hab ein Asus G751JY
hat nur 0 , 33 66 und glaube 100%
Möchte aber mehr Stufen so alles 5-10%.
Weis aber nicht wie man das erweitern kann.
 
Hello,
I'm setting this up on my Lenovo E520. I've successfully configured it in Windows, but my goal is to set it up in Linux.

When I input
Code:
mono nbfc.exe start
it gives me
Code:
Could not find file "/sys/class/hwmon/hwmon1/name".
and I'm stuck.
I've seen that such "name" file is located at "/sys/class/hwmon/hwmon1/device/", though. Inside the file there's a single word, "coretemp".
I'm unable to copy/paste the file, nor I can create a new text file in that directory, I've also tried from an elevated terminal, to no avail.

Any hint? i guess I'm really close to making it work.
Thanks.
 
Zuletzt bearbeitet:
In /sys/class/hwmon/hwmon1/device/ there should be some temperature inputs which look like temp1_input, temp2_input, etc.

Check those files for valid temperature readings. Then create a file in /etc/NbfcService/StagWare.Plugins.FSTemperatureMonitor.sources which looks like this:
Code:
/sys/class/hwmon/hwmon1/device/temp1_input;0.001
/sys/class/hwmon/hwmon1/device/temp2_input;0.001

Add only the temperature inputs which actually provide valid readings.
0.001 is the factor by which the temperature readings should be multiplied before calculating the average temperature of all temperature sources.
 
It worked! :)
I followed your advice, then I started the service, set the daemon to auto fan control mode and the fan spinned up as expected.

Now, sorry for being dumb but how am I supposed to set it to manual control mode? I've tried
Code:
mono nbfc.exe set --speed 120
but it doesn't seem to override auto control mode. The status reports "Auto control enabled: True".

However, it works indeed. I'm going to fine-tune my config file, then I'll send it to you. Your NBFC is a great piece of software for Lenovo users on Linux. Thanks! :)

Update: I'm experimenting with auto/manual control mode and if I input "mono nbfc.exe set --speed 0" the status reports "Auto control enabled: False", but the fan speed actually keeps at maximum (i.e., 100).

Update 2: The status reports "Temperature: 45700", but shouldn't it report 45700*0.001=45.7? This would explain why the fan speed keeps at maximum, no matter the manual values I input in terminal and the thresholds I set in the config file. I also see "Critical mode enabled: True" in the status.
This is my /etc/NbfcService/StagWare.Plugins.FSTemperatureMonitor.sources content:
Code:
/sys/class/hwmon/hwmon1/device/temp1_input;0.001
/sys/class/hwmon/hwmon1/device/temp2_input;0.001
/sys/class/hwmon/hwmon1/device/temp3_input;0.001
/sys/class/hwmon/hwmon1/device/temp4_input;0.001
/sys/class/hwmon/hwmon1/device/temp5_input;0.001
All those tempX_input contain valid values, around 45000.
 
Zuletzt bearbeitet:
1. 120% is not a valid speed. If you set a fan speed < 0 or > 100, NBFC sets the fan speed to 'auto'
2. If the temperature is too high, NBFC switches into critical mode and locks the fan speed at 100%.
3. Depending on your system's culture settings, '.' may not be interpreted as a decimal point but as a thousands separator, so 0.001 will actually be interpreted as 1.

I fixed this and also improved the temperature sensors detection on Linux. Just checkout and build the latest commit from github. It should work with your .sources file.
 
1. Sorry, I forgot the values are pecentages.
2. Right.
3. That's the point. I'm Italian, I switched "." with "," in StagWare.Plugins.FSTemperatureMonitor.sources and now it works! :)

I'll need to tune my thresholds in Windows, because the GUI applet is far more convenient than the command line. I'll let you have the config file then.

Is the development of a system tray applet for Linux scheduled? It would be awesome. Thanks.
 
Zurück
Oben