Odp: Wgranie OpenWRT do NSA310
cat /etc/init.d/hwmon_fancontrol
zobaczysz jak progi temperaturowe są ustawiane. A tak w ogóle - odepnij ten bzdurny wentylator i naklej radiator na SoC. Też tak będzie działało a nie będzie trzeszczał.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
eko.one.pl → Sprzęt / Hardware → Wgranie OpenWRT do NSA310
Strony Poprzednia 1 … 4 5 6 7 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
cat /etc/init.d/hwmon_fancontrol
zobaczysz jak progi temperaturowe są ustawiane. A tak w ogóle - odepnij ten bzdurny wentylator i naklej radiator na SoC. Też tak będzie działało a nie będzie trzeszczał.
a jak go nakleić, czego używasz do tego?
https://www.gotronik.pl/klej-termoprzew … p-659.html
Nie że ten konkretny, ale są po prostu kleje termoprzewodzące.
Ja kupiłem do tego celu na AliExpress radiator do dysku SSD.m2. ma 5,5 mm wysokości oraz wymiary 70x22 mm.
Chyba powinien być ok, a Ty jak duży radiator użyłeś do tego SoC w NSA310? bo tam miejsca zbyt wiele to nie ma.
I co wyłaczyłeś wtedy całkowicie wentylator?
Pierwszy lepszy który miałem pod ręką. I tak, fizycznie wydłubałem wentylator z obudowy.
W pliku sa takie wartości:
zyxel,nsa310b)
40 path_to_hwmon='/sys/devices/platform/ocp@f1000000/f1011000.i2c/i2c-0/0-002e/hwmon/hwmon0'
41 # use the max. value of (temp1) OR (temp2) OR (temp3) as an input
42 # for the PWM of the cooling fan
43 echo 123 > "$path_to_hwmon/pwm1_auto_channels"
44 # Temperature sensor #1 placed on mainboard
45 echo 30000 > "$path_to_hwmon/temp1_auto_temp_min"
46 echo 49600 > "$path_to_hwmon/temp1_auto_temp_max"
47 # Temperature sensor #2 placed on mainboard
48 # range: 0 to 127000 in steps of 1000 [millicelsius]
49 echo 30000 > "$path_to_hwmon/temp2_auto_temp_min"
50 # range: 0 to 127000 in steps of ???? [millicelsius]
51 echo 49600 > "$path_to_hwmon/temp2_auto_temp_max"
52 # Temperature sensor #3 placed close to a chipset
53 # range: 0 to 60000 in steps of 1000 [millicelsius]
54 echo 23000 > "$path_to_hwmon/temp3_auto_temp_min"
55 # pre-defined steps: 103000, 122000, 143300, 170000 in [millicelsius]
56 echo 103000 > "$path_to_hwmon/temp3_auto_temp_max"
57 ;;
58 esac
czym to się zmienia i jak?
Ale pytanie zadałeś....
edytorem tekstowym (vi, nano) i na takie wartości jakie potrzebujesz. *_min określa poziom od którego wiatraczek startuje i obecnie jest on sterowany wypadkową trzech czujników temeratury. Pozmianij je sobie na jakieś inne i zobacz czy ci to będzie odpowiadało.
Ale kłopot w tym, że ja nie rozumiem tej składni pliku. Mało to czytelne jest dla mnie.
czy zamiana z 30000 na np. 35000 spowoduję że najniższe obroty wzrosną, takiego efektu szukam.
Zanim Ci odpowiem - zmień wartości, zrestartuj skrypt i zobacz co będzie? Nie zepsuje ci to zyxela, więc po prostu sprawdź eksperymentalnie?
zrobiłem 35000 35000 i 28000 i nie terkocze tak. Czy liczbę obrotów wentylatora to da się jakoś ocenić, odczytać?
Zainstaluj lm-sensors i polecenie sensors
jednak coś nie tak, a Ty jakbyś regulował minimalne obroty? którą wartością.
Wentylatorem steruje pwm, domyślnie zalezny od temperatur. Zobacz czy możesz ręcznie sterować tym pwm (wpisy jakieśw /sys/devices/platform/ocp@f1000000/f1011000.i2c/i2c-0/0-002e/hwmon/hwmon0/pwm* )
zatrudniłem ChatGPT:
zyxel,nsa310b)
40 path_to_hwmon='/sys/devices/platform/ocp@f1000000/f1011000.i2c/i2c-0/0-002e/hwmon/hwmon0'
41 # use the max. value of (temp1) OR (temp2) OR (temp3) as an input
42 # for the PWM of the cooling fan
43 echo 123 > "$path_to_hwmon/pwm1_auto_channels"
44 # Temperature sensor #1 placed on mainboard
45 echo 30000 > "$path_to_hwmon/temp1_auto_temp_min"
46 echo 49600 > "$path_to_hwmon/temp1_auto_temp_max"
47 # Temperature sensor #2 placed on mainboard
48 # range: 0 to 127000 in steps of 1000 [millicelsius]
49 echo 30000 > "$path_to_hwmon/temp2_auto_temp_min"
50 # range: 0 to 127000 in steps of ???? [millicelsius]
51 echo 49600 > "$path_to_hwmon/temp2_auto_temp_max"
52 # Temperature sensor #3 placed close to a chipset
53 # range: 0 to 60000 in steps of 1000 [millicelsius]
54 echo 23000 > "$path_to_hwmon/temp3_auto_temp_min"
55 # pre-defined steps: 103000, 122000, 143300, 170000 in [millicelsius]
56 echo 103000 > "$path_to_hwmon/temp3_auto_temp_max"
57 ;;
58 esac
ChatGPT powiedział:
To fragment skryptu konfiguracyjnego dla chłodzenia w serwerze NAS Zyxel NSA310B. Wygląda na to, że konfiguruje automatyczne sterowanie wentylatorem na podstawie odczytów temperatury z kilku czujników.
Co robi ten kod?
Określa ścieżkę do interfejsu sprzętowego (hwmon), gdzie znajdują się dane z czujników temperatury.
Ustawia tryb sterowania wentylatorem – echo 123 > "$path_to_hwmon/pwm1_auto_channels", co oznacza, że wentylator będzie sterowany na podstawie najwyższej temperatury spośród trzech czujników (temp1, temp2, temp3).
Konfiguruje zakresy temperatur:
temp1 (czujnik na płycie głównej):
Minimalna temperatura dla działania wentylatora: 30°C (30000 millicelsjuszy)
Maksymalna temperatura: 49,6°C (49600 millicelsjuszy)
temp2 (drugi czujnik na płycie głównej):
Zakres taki sam jak temp1.
temp3 (czujnik blisko chipsetu):
Minimalna temperatura: 23°C (23000 millicelsjuszy)
Maksymalna temperatura: 103°C (103000 millicelsjuszy) (czyli pewnie graniczna wartość krytyczna dla układu).
Co można poprawić lub dostosować?
Sprawdzenie faktycznych zakresów temperatur chipsetu – 103°C to bardzo wysoka wartość.
Dostosowanie temperatur minimalnych – jeśli wentylator działa głośno, można podnieść wartości *_auto_temp_min.
Dodanie logowania – np. zapis aktualnych temperatur i ustawień do pliku logów.
Może komuś cos to pomoże:
I jeszcze:
Zapytałem:
jak włączyć automatyczne sterowanie pwm1
ChatGPT:
Jeśli chcesz włączyć automatyczne sterowanie PWM1 w Zyxel NSA310 z OpenWRT, musisz sprawdzić, czy system obsługuje sterowanie wentylatorem i czy odpowiednie pliki w /sys/class/hwmon/ istnieją.
1. Sprawdzenie dostępnych sensorów i PWM
Najpierw sprawdź, czy Twój system ma czujniki temperatury i obsługuje sterowanie wentylatorem:
ls -l /sys/class/hwmon/
Jeśli widzisz katalog hwmon0, sprawdź, co to za sprzęt:
cat /sys/class/hwmon/hwmon0/name
Jeśli masz więcej katalogów (hwmon1, hwmon2), sprawdź wszystkie.
Potem sprawdź, czy jest obsługa PWM:
ls -l /sys/class/hwmon/hwmon0/ | grep pwm
Jeśli są pliki pwm1, pwm1_enable, to znaczy, że system wspiera sterowanie wentylatorem.
2. Włączenie automatycznego sterowania PWM
Jeśli masz plik pwm1_enable, spróbuj włączyć automatyczne sterowanie:
echo 1 > /sys/class/hwmon/hwmon0/pwm1_enable
Sprawdź, czy działa:
cat /sys/class/hwmon/hwmon0/pwm1_enable
Jeśli wynik to 1, oznacza, że wentylator powinien teraz działać automatycznie.
3. Ustawienie temperatur dla wentylatora
Jeśli system obsługuje sterowanie temperaturą, ustaw minimalne i maksymalne temperatury dla czujników:
echo 30000 > /sys/class/hwmon/hwmon0/temp1_auto_temp_min
echo 50000 > /sys/class/hwmon/hwmon0/temp1_auto_temp_max
Sprawdź dostępne czujniki:
ls /sys/class/hwmon/hwmon0/ | grep temp
Dostosuj wartości według nazw plików (temp2_auto_temp_min, temp3_auto_temp_min, itd.).
4. Zapisanie ustawień na stałe
Zmiany w /sys/class/hwmon/ znikają po restarcie, więc dodaj je do /etc/rc.local:
echo "echo 1 > /sys/class/hwmon/hwmon0/pwm1_enable" >> /etc/rc.local
echo "echo 30000 > /sys/class/hwmon/hwmon0/temp1_auto_temp_min" >> /etc/rc.local
echo "echo 50000 > /sys/class/hwmon/hwmon0/temp1_auto_temp_max" >> /etc/rc.local
Zapisz plik i uruchom ponownie OpenWRT:
reboot
Co jeśli pwm1_enable nie istnieje?
Jeśli plik pwm1_enable nie istnieje, sterownik może nie obsługiwać automatycznego sterowania. Wtedy trzeba:
Sprawdzić, czy masz odpowiedni moduł jądra (np. pwm_fan).
lsmod | grep pwm
Jeśli nie ma pwm_fan, spróbuj załadować moduł:
modprobe pwm_fan
Niezłe narzędzie, myślę że może być czasami przydatne
Natrafiłem na problem, nie startuje automatycznie sterowanie pwm1.
zrobiłem skrypt /etc/rc.local:
1 # Put your custom commands here that should be executed once
2 # the system init finished. By default this file does nothing.
3
4 # Czekaj na załadowanie hwmon
5
6 while [ ! -f /sys/class/hwmon/hwmon0/pwm1_enable ]; do
7 sleep 5
8 done
9
10 # Włącz sterowanie PWM
11 echo 1 > /sys/class/hwmon/hwmon0/pwm1_enable
12 echo 40 > /sys/class/hwmon/hwmon0/pwm1
13
14 # Ustaw temperatury sterowania (jeśli obsługiwane)
15 echo 30000 > /sys/class/hwmon/hwmon0/temp1_auto_temp_min
16 echo 50000 > /sys/class/hwmon/hwmon0/temp1_auto_temp_max
17
18
19 exit 0
Ale nie uruchamia się sterowanie obrotami, ale jak wywołam /etc/rc.lokal ręcznie to rusza.
Cezary możesz masz jakiś pomysł czemu to nie chcę ruszać automatycznie.
chmod 755 /etc/rc.local ?
nadal nie działa, po resecie jest tak:
root@Zyxel_NSA310:~# sensors
lm85-i2c-0-2e
Adapter: mv64xxx_i2c adapter
in0: 1.78 V (min = +0.00 V, max = +3.32 V)
in1: 1.07 V (min = +0.00 V, max = +2.99 V)
in2: 3.20 V (min = +0.00 V, max = +4.38 V)
in3: 5.05 V (min = +0.00 V, max = +6.64 V)
in4: 12.19 V (min = +0.00 V, max = +15.94 V)
fan1: 3508 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
temp1: +36.0°C (low = -127.0°C, high = +127.0°C)
temp2: +40.0°C (low = -127.0°C, high = +127.0°C)
temp3: +43.0°C (low = -127.0°C, high = +127.0°C)
cpu0_vid: +0.000 V
root@Zyxel_NSA310:~# cat /sys/class/hwmon/hwmon0/pwm1_enable
2
root@Zyxel_NSA310:~#
2 oznacza że PWM nie działa, jak go ręczenie włączę to ma wartość 1 i obroty spadają
Wstaw sobie co drugą linię logger "1", logger "2" i zobaczysz w logach co i gdzie sie uruchamia.
Dobra okazało się, że ChatGPT mnie wprowadził w błąd. Ale zrobiłem taki sprytny rc.local. Może się komuś przyda:
1 # Put your custom commands here that should be executed once
2 # the system init finished. By default this file does nothing.
3
4
5 echo "$(date) - rc.local uruchomiony" >> /tmp/rc_local.log
6
7 logger "rc.local: Uruchamianie skryptu PWM"
8
9
10 # Czekaj na załadowanie hwmon
11 while [ ! -f /sys/class/hwmon/hwmon0/pwm1_enable ]; do
12 sleep 5
13 done
14 logger "rc.local: hwmon dostępny"
15
16 # Przeładowanie sterownika i2c-dev
17 logger "rc.local: Przeładowuję sterownik i2c-dev"
18 modprobe -r i2c-dev
19 sleep 2
20 modprobe i2c-dev
21 logger "rc.local: Sterownik i2c-dev załadowany ponownie"
22
23 # Sprawdzenie, czy plik pwm1_enable istnieje
24 if [ -f /sys/class/hwmon/hwmon0/pwm1_enable ]; then
25 logger "rc.local: Plik pwm1_enable istnieje, ustawiam wartości"
26
27 # Włącz sterowanie PWM
28 echo 1 > /sys/class/hwmon/hwmon0/pwm1_enable
29 echo 40 > /sys/class/hwmon/hwmon0/pwm1
30
31 # Ustaw temperatury sterowania (jeśli obsługiwane)
32 echo 30000 > /sys/class/hwmon/hwmon0/temp1_auto_temp_min
33 echo 50000 > /sys/class/hwmon/hwmon0/temp1_auto_temp_max
34 logger "rc.local: Ustawienia PWM zapisane"
35 else
36 logger "rc.local: BŁĄD - Plik pwm1_enable NIE istnieje!"
37 fi
38
39 exit 0
i teraz jak to działa:
root@Zyxel_NSA310:~# logread | grep rc.local
Mon Mar 10 10:29:29 2025 user.notice root: rc.local: Uruchamianie skryptu PWM
Mon Mar 10 10:29:29 2025 user.notice root: rc.local: hwmon dostępny
Mon Mar 10 10:29:29 2025 user.notice root: rc.local: Przeładowuję sterownik i2c-dev
Mon Mar 10 10:29:31 2025 user.notice root: rc.local: Sterownik i2c-dev załadowany ponownie
Mon Mar 10 10:29:31 2025 user.notice root: rc.local: Plik pwm1_enable istnieje, ustawiam wartości
Mon Mar 10 10:29:31 2025 user.notice root: rc.local: Ustawienia PWM zapisane
root@Zyxel_NSA310:~# cat /sys/class/hwmon/hwmon0/pwm1_enable
2
root@Zyxel_NSA310:~# ^C
root@Zyxel_NSA310:~# sensors
lm85-i2c-0-2e
Adapter: mv64xxx_i2c adapter
in0: 1.78 V (min = +0.00 V, max = +3.32 V)
in1: 1.07 V (min = +0.00 V, max = +2.99 V)
in2: 3.20 V (min = +0.00 V, max = +4.38 V)
in3: 5.05 V (min = +0.00 V, max = +6.64 V)
in4: 12.19 V (min = +0.00 V, max = +15.94 V)
fan1: 3848 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
temp1: +38.0°C (low = -127.0°C, high = +127.0°C)
temp2: +42.0°C (low = -127.0°C, high = +127.0°C)
temp3: +45.0°C (low = -127.0°C, high = +127.0°C)
cpu0_vid: +0.000 V
root@Zyxel_NSA310:~# cat /sys/class/hwmon/hwmon0/pwm1_enable
2
root@Zyxel_NSA310:~# cat /sys/class/hwmon/hwmon0/pwm1
204
root@Zyxel_NSA310:~# cat /sys/class/hwmon/hwmon0/temp1_auto_temp_max
50000
root@Zyxel_NSA310:~# cat /sys/class/hwmon/hwmon0/temp1_auto_temp_min
30000
root@Zyxel_NSA310:~# sensors
lm85-i2c-0-2e
Adapter: mv64xxx_i2c adapter
in0: 1.78 V (min = +0.00 V, max = +3.32 V)
in1: 1.08 V (min = +0.00 V, max = +2.99 V)
in2: 3.20 V (min = +0.00 V, max = +4.38 V)
in3: 5.05 V (min = +0.00 V, max = +6.64 V)
in4: 12.19 V (min = +0.00 V, max = +15.94 V)
fan1: 3805 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
temp1: +38.0°C (low = -127.0°C, high = +127.0°C)
temp2: +42.0°C (low = -127.0°C, high = +127.0°C)
temp3: +44.0°C (low = -127.0°C, high = +127.0°C)
cpu0_vid: +0.000 V
lm85-i2c-0-2e
Adapter: mv64xxx_i2c adapter
in0: 1.80 V (min = +0.00 V, max = +3.32 V)
in1: 1.08 V (min = +0.00 V, max = +2.99 V)
in2: 3.18 V (min = +0.00 V, max = +4.38 V)
in3: 5.08 V (min = +0.00 V, max = +6.64 V)
in4: 12.19 V (min = +0.00 V, max = +15.94 V)
fan1: 0 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
temp1: +40.0°C (low = -127.0°C, high = +127.0°C)
temp2: +45.0°C (low = -127.0°C, high = +127.0°C)
temp3: +47.0°C (low = -127.0°C, high = +127.0°C)
cpu0_vid: +0.000 VTen wentylator można spokojnie rozłączyć, chyba z 10 lat NAS pracuje u mnie z wyłączonym wentylatorem ![]()
założyłem radiatory na CPU i pamięci, czekam aż klej wyschnie.
A wentylator ustawię ręcznie na 1800 obrotów / minute i taki układ potestuje.
jakie temperatury masz na dysku? w nsa325 dwa exosy 20TB do 50* dochodziły...
Celem było pozbycie sie terkotania wentylatora:
Ostatecznie zrobiłem tak:
1. założyłem radiatory na Soc i pamięci
2. zrobiłem plik rc.local w konfiguracji która wymusza tryb automatyczny ale z ograniczniem obrotów maksymalnych wentylatora do "190" tj. ok. 3400 obr/min i jest idealnie.
plik rc.local - wygląda tak, może się komuś przyda:
root@Zyxel_NSA310:/etc# cat rc.local
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
echo "$(date) - rc.local uruchomiony" >> /tmp/rc_local.log
logger "rc.local: Uruchamianie skryptu PWM"
# Czekaj na załadowanie hwmon
while [ ! -f /sys/class/hwmon/hwmon0/pwm1_enable ]; do
sleep 5
done
logger "rc.local: hwmon dostępny"
# Przeładowanie sterownika i2c-dev
logger "rc.local: Przeładowuję sterownik i2c-dev"
modprobe -r i2c-dev
sleep 2
modprobe i2c-dev
logger "rc.local: Sterownik i2c-dev załadowany ponownie"
# Sprawdzenie, czy plik pwm1_enable istnieje
if [ -f /sys/class/hwmon/hwmon0/pwm1_enable ]; then
logger "rc.local: Plik pwm1_enable istnieje, ustawiam wartości"
# Włącz sterowanie Automatyczne PWM - z ograniczeniem maks. obrotów
echo 2 > /sys/class/hwmon/hwmon0/pwm1_enable
echo 123 > /sys/class/hwmon/hwmon0/pwm1_auto_channels
echo 190 > /sys/class/hwmon/hwmon0/pwm1
# Ustaw temperatury sterowania (jeśli obsługiwane)
echo 30000 > /sys/class/hwmon/hwmon0/temp1_auto_temp_min
echo 50000 > /sys/class/hwmon/hwmon0/temp1_auto_temp_max
logger "rc.local: Ustawienia PWM zapisane"
else
logger "rc.local: BŁĄD - Plik pwm1_enable NIE istnieje!"
fi
exit 0
Ważna Uwaga:
skrypt ma kontrolne logowanie oraz przeładowuje sterownik.
Strony Poprzednia 1 … 4 5 6 7 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
eko.one.pl → Sprzęt / Hardware → Wgranie OpenWRT do NSA310
Forum oparte o PunBB, wspierane przez Informer Technologies, Inc