Odczyt danych z czujników
Ostatnia zmiana: 2019-07-22 18:07

System OpenWrt używany może być na wielu różnych urządzeniach w różnej konfiguracji sprzętowej. Niektóre z nich posiadają wbudowane czujniki czy sensory dzięki którym można poznać stan urządzenia. Wykorzystywane są one do różnych celu takich jak kontrola systemu chłodzenia (wentylatory) czy korekcji temperaturowej (obniżenie częstotliwości procesora czy mocy nadawania). Aby odczytać sensory najprościej skorzystać z programu sensors z pakietu lm-sensors:


    # opkg update
    # opkg install lm-sensors
    # sensors

Choć zapewne dobrze będzie wiedzieć jak ręcznie można odczytać dostępne czujniki. Nie wszystkie modele routerów zawierają czujniki. Jeżeli sterownik czujnika pochodzi z kernela, jest duże prawdopodobieństwo że będzie obsługiwany w "standardowy" sposób.

Czujniki temperatury

Najczęściej temperatury podawane są z dokładnością do jednego stopnia Celsjusza, choć fizyczny odczyt jest z dokładnością 1/1000 stopnia. Dane z czujników można odczytać poleceniem:


    # cat /sys/class/hwmon/hwmon*/temp*_input

W zależności od ilości czujników, liczna katalogów hwmon może być różna. W zależności od możliwości czujnika, liczba plików z temperaturami (temp1_input, temp2_input itd) może być różna. Aby poznać typy dostępnych czujników można wydać polecenie


    # cat /sys/class/hwmon/hwmon*/name

    

Wbudowane w SOC/procesor

Wbudowane czujniki temperatury posiadają procesory Intela i AMD (x86), niektóre urządzenia architektury Lantiq oraz nowe Linksysy serii WRT1200/1900/3200/32X. Czujniki ma także SoC Qualcomma IPQ806x, jednakże temperatury należy szukać w innym miejscu:


    # cat /sys/class/thermal/thermal_zone*/temp


Wbudowane w inne układy

  • układy radiowe Wi-Fi
Współczesne układy radiowe AC Qualcomma obsługiwane przez sterownik ath10k posiadają wbudowany czujnik temperatury służący do thermal throttlingu, czyli do zmniejszania mocy nadawania w przypadku przegrzewania się układów. Odczyt temperatury możliwy jest po kompilacji sterownika ath10k z odpowiednią włączoną opcją. Odczyt temperatury układów Wi-Fi możliwe jest także dla sterownika mwlwifi obecnego w niektórych nowszych routerach Linksysa.

  • układy pamięci
Odczyt temperatury układów pamięci RAM umożliwiają nowsze routery Linksysa

  • modemy GSM
Niektóre modemy GSM także umożliwiają odczyt temperatury. Niestety nie jest to ujednolicona opcja i zależy od konkretnego modelu modemu. Temperaturę zwykle można odczytać wysyłając odpowiednie polecenie AT do modemu:
- dla Huawei (nie hilink), na USB lub minipcie: AT^CHIPTEMP
- dla Quectel: AT+QTEMP
- dla Sierra Wireless: AT!GSTATUS?

  • dyski HDD/SDD
Temperaturę można także odczytać z niektórych dysków HDD czy SSD wykorzystując dane ze SMART (odczyt po instalacji pakietu smartmontools)

  • zewnętrzne czujniki temperatury
Niektóre urządzenia posiadają zewnętrzne czujniki temperatury podłączone np. do magistrali I2C. Odczyt temperatury zależy wówczas od typu czujnika. Np. dla urządzeń jjPlus JA76PF czy JWAP003 (moduł LM75) wygląda następująco:


    # cat /sys/devices/platform/i2c-gpio.0/i2c-0/0-0048/temp1_input


Częstotliwość procesora

Chwilowa częstotliwość taktowania możliwa jest do odczytu dla procesorów Intel i AMD (x86) oraz Qualcomm IPQ806x:


    # cat /sys/bus/cpu/devices/cpu*/cpufreq/cpuinfo_cur_freq

lub


    # cat /sys/bus/cpu/devices/cpu*/cpufreq/scaling_cur_freq

Wynik należy podzielić przez 1000 jeżeli chcemy otrzymać taktowanie w MHz.

Zużycie mocy

Dla płyt głównych wyposażonych w procesor AMD (np. PCEngines APU2/APU3) możliwe jest odczytanie chwilowego zużycie mocy:


    # cat /sys/class/hwmon/hwmon*/power1_average

Wynik należy podzielić przez 1000000 jeżeli chcemy otrzymać zużycie mocy w watach (W).