System monitor - hardveresen

írta: Adamyno, 6 éve

Picit tovább gondoltam a NAS okosítást (azzal majd lesz valami).

Néha nem árt tudni a számítógép állapotát, viszont nem mindig van rá lehetőség, illetve nem mindig kényelmes ablakot váltani, hogy ránézzünk a system monitorra nem beszélve arról, hogy nem igazán van egyetlen olyan program ami mindent mutat, amit tudni szeretnénk. Kivéve persze a jó öreg Conky-t, de ehhez is az asztalra kell ugrani.

Windowsról meg aztán ne is beszéljünk.

Ja, igen.. ha valakinek nem lenne egyértelmű: linux desktop rendszerről beszélünk, azon belül is leginkább ubuntu vagy annak valamilyen variánsa. Egy jó ideje Mint-et használok, nem tervezem a váltást.

Szóval az ötlet adott volt, valahogy látni kellene a rendszer állapotát. Ilyenekre gondolok, mint CPU kihasználtság, hőmérséklet, gpu-val ugyanez, feszültség értékek, ram és swap használat, foglalt/szabad hely a lemezen, aktuális lemezkihasználtság, lemez hőmérséklet, hálózati statisztika, stb...

Ahhoz, hogy mindezt megtudjuk, léteznek jellemzően aprócska célprogramok konzolos felületen, csak mindegyikből ki kell szűrni a szükséges adatokat, összegezni és egyszerre kiírni a megfelelő helyre. Ez a hely esetünkben egy bármilyen fizikai LCD, TFT, Oled vagy bármi egyéb kijelző. Meghajtáshoz arduino nano-t fogok használni.

Miért a nano?
Mert van benne usb/serial chip és 5V-al működik, a helyigénye egész kicsi. Eleinte gondolkodtam valamilyen hálózatos (akár webes felületen konfigolható) eszközön is de annyi féle hardver és szoftver van, hogy ezt elvetettem. Nehéz lenne egy olyan egységes hardvert csinálni, ami a legtöbb rendszerrel kompatibilis. No meg annak is kell áram. Lehetne variálni akkuval de nagyobb, drágább lesz és egyszer úgyis lemerül. Ezért döntöttem az USB mellett. Ha van egy kijelzőm, az asztali gépbe akár könnyedén be is építhető, csak az egyik 5,25"-os takaró műanyagot kivágom, belülről ráragasztom a kijelzőt és az alkatrészeket. Jellemzően minden alaplapon van nem használt usb kivezetés, erre rákötve megvan az áram és a kommunikáció is egyben. Ha nem lenne ilyenünk, egy hátsó usb portról egész észrevétlenül be lehet vezetni a kábelt a gépbe.
Szerencsére szabvány soros portként ismeri fel a gép az eszközt, ezért innentől kezdve a kommunikáció szintén viszonylag könnyű. Írok egy scriptet, ami összeszedi a megfelelő adatokat és formázva kiküldi a soros portra (esetleg a monitorra is, ez már részlet kérdés), majd az arduino feldolgozza és megjeleníti a kijelzőn a kívánt formában.

Ennek még egy előnye van: notebookkal is működik, sőt, szinte bármilyen linuxos eszközön, amin van soros vagy USB port, de ennyire most nem mélyedek bele, PC-re csinálom. Meg talán RPi-re, mert van azon egy szerverem. Szóval ha külső eszköz lesz belőle, akkor meg egy egész kicsi műanyag házba beépíthető, mint pl. ez. De nyomtatni is lehet hozzá 3D nyomtatóval. Más kérdés, hogy szerintem nem éri meg. Kijelzőnek először egy 2x16 karakteres LCD-re gondoltam mert olcsó és egyszerű, mint a faék, de szívás van a kurzor vezérlésével és nagyon kevés infó fér ki rá, ráadásul csak karakteres formában (néhány egyedi karaktert lehet definiálni és akkor úgy tűnik, mintha grafikus lenne, de nagyon korlátozottak a lehetőségeink). Szóval ezt elvetettem.
Van egy ehhez hasonló OLED kijelzőm, csak 1.54"-os és teljesen kék. Ez jól mutat a gépházban, pontosan akkora, hogy épp bele illik a takaró műanyagba és világít a sötétben. Gondoltam még a nokia 5110 kijelzőre is, viszont ennek kisebb a felbontása (előzőnek 128x64, ennek pedig 84x48) viszont olcsó és áramot szinte semmit nem fogyaszt, ha esetleg számít a fogyasztás. Lehet, hogy majd ha csinálok elemes wifis eszközt, akkor ebből lesz. De van ennél jobb monokróm is, ugyanekkora a kijelző csak nagyobb területet hasznosít és nagyobb a felbontása is (96x68) ennek a kijelzőnek. Az ára hasonló. Természetesen ezeken kívül van mindenféle méretben, színes is, monokróm is, technológiákban, árban eltérőek.

Szerintem én jelen esetben az OLED-et fogom választani, majd ez a napokban kiderül ha eljutottam odáig.

Elkezdtem megírni a scriptet, egyelőre ott tartok, hogy ez a kimenet (konzol képernyőre):

cpu: 2% 39°C
ram: 39%
swap: 0%
net KB/s:
in -> 0.06 0.06 <- out
disk used: 9%

Maga a script pedig így néz ki:
#!/bin/bash
declare -i USED=0
USED=$(top -b -n2 | grep '%Cpu(s):' |tail -n 1 |awk '{print $2}' |sed 's/,[^,]*$//')
echo cpu: $USED% $(sensors | grep -oP 'Package.*?\+\K[0-9]+')°C

echo ram: $(free | grep Mem | awk '{print $3/$2 * 100.0}' |sed 's/.[^.]*$//')%
echo swap: $(cat /proc/swaps | tail -n 1 |awk '{print $4/$3 * 100.0}')%
echo net KB/s:
echo "in -> "$(ifstat -i enp2s0 1 1 |tail -n 1)" <- out"
echo disk used: $(df | grep '/dev/sda2' |awk '{print $5}')

A script valószínűleg akkor fog elkészülni, ha már tudom mennyi helyem lesz a kijelzőn. Írok majd egy teszt programot arduinora, hogy lássam hogyan és mennyi inó fér ki a kijelzőre és majd ahhoz igazítom a scriptet. Utána gyerekjáték lesz befejezni az eszközt.

Szerintem egyébként windowsra sem lehetetlen megírni powershellben valami hasonlót, majd utána nézek ha ez elkészült. Addig ha valakinek van bármilyen ötlete, az jöhet :)

Ha pedig valami univerzálisat és könnyedén konfigurálhatót szeretnék, akkor kellene egy keret program, ami kezeli a szenzor adatokat és egységes formában továbbítja a mikrokontroller felé. Javában szerintem nem nagyon lehet ilyen mélyen belemászni az OS-be, pedig az platformfüggetlen. Esetleg a C++, de azzal meg 500km hosszú lenne a kód. Ez a rész valószínűleg már az unokámra marad :DDD

Viszont ha elkészül az eredeti verzió, ahhoz is bőven lehet találni a neten anyagot. Igazából elég azt tudni, hogy az arduino milyen adatot vár és a bash scriptet úgy rakja össze mindenki magának, ahogy tetszik. A jó oldala a dolognak, ha mondjuk arduinoban erősebb a tudásod de bash-elésben kevésbé, akkor írsz egy olyan szkriptet amit tudsz és akkor a mikrokontroller rendezi a beérkező adatokat. Teljesen rugalmas a dolog.

A következő napokban majd folytatom, ahogy időm engedi. Lehet, hogy majd lesz videó is, bár most várom az új gépem, amibe még majd kell venni RAM-ot a vágáshoz, szóval szerintem max képek lesznek egyelőre ha már lesz olyan része, amit érdemes nézegetni.