[gnuplot] Un petit script de temperature
Publié : ven. 17 janv. 2014, 19:00
Bonjour à tous.
Ne voulant pas de système comme munin ou autre pour monitorer la température, j'ai décidé de chercher comment créer deux scripts qui fonctionneraient de concert :
- Le premier pour récupérer les températures via cron et les stocker dans les fichiers texte
- Le deuxième pour lire ces températures par gnuplot et les afficher sur un jolie graphique comme celui la : http://minorstuff.files.wordpress.com/2 ... pu-hdd.png
Voici donc le premier script :
Quelques explications peut-être :
- Le fichier de log est stocké dans un fichier texte de votre convenance, pensez à changer le chemin suivant vos besoins.
- Chaque variable va correspondre à une valeur de température. J'ai une i5 et une carte mère asus P8Z77-V ainsi qu'un disque dur Western Digital et une carte graphique NVIDIA.
- Chaque valeur récupérée est ensuite stockée dans le fichier de log sous forme de ligne, à la fin, vous vous trouvez avec un fichier qui ressemble à cela :
Pour exécuter le script, il ne reste plus qu'a le mettre en cron dans la crontab de l'utilisateur :
Attendez un peu pour que le script puisse récupérer les valeurs. On peut alors générer le graphique! Voici le script :
Et voilà! Voici un exemple de ce que cela peut donner, il s'agit d'un fichier SVG à l'origine (que vous pouvez modifier dans le script de génération) mais pour être stocké sur le net, je l'ai converti en png (J'ai aussi utilisé ce script pour la vitesse des ventilateurs qui sont tous PWM) :

(Bon ok, au début je jouais à Metro Last Light, puis ensuite à estranged act 1, on remarque le Source Engine du second semble exiger plus de ressources compte-tenu de la température plus élevée).
N'hésitez pas à me donner vos remarque et/ou amélioration! De mon côté, un problème subsiste. Si vous éteignez votre ordinateur, les données ne sont pas enregistrées (c'est normal), mais quand vous le rallumez et que des données sont à nouveau enregistrées, lors de la génération, vous avez le dernier point et le nouveau point (depuis l'allumage du PC) qui sont relié par une longue ligne pas très esthétique. Si quelqu'un sait comment l'éviter...
Enfin, voici les sources :
http://talk.maemo.org/showthread.php?p=496931
http://www.jefftk.com/news/2011-06-20
http://blog.petitepomme.net/post/290538 ... ng-gnuplot
Ne voulant pas de système comme munin ou autre pour monitorer la température, j'ai décidé de chercher comment créer deux scripts qui fonctionneraient de concert :
- Le premier pour récupérer les températures via cron et les stocker dans les fichiers texte
- Le deuxième pour lire ces températures par gnuplot et les afficher sur un jolie graphique comme celui la : http://minorstuff.files.wordpress.com/2 ... pu-hdd.png
Voici donc le premier script :
Code : Tout sélectionner
# Pour nvidi-settings
export DISPLAY=:0.0
logfile=~/system-monitoring/log/temps.log
timestamp=$(date +%s)
# Récuperation des valeurs
tempGpu=$(nvidia-settings -t -q gpucoretemp)
tempHdd=$(nc localhost 7634 | cut -c34-35)
tempCpu=$(sensors |grep Physical | cut -c18-19)
tempMB=$(( $(cat /sys/devices/platform/nct6775.656/temp2_input) / 1000))
# Ajout des valeurs dans le fichier
echo "${timestamp} ${tempGpu} ${tempHdd} ${tempCpu} ${tempMB} " >> ${logfile}
- Le fichier de log est stocké dans un fichier texte de votre convenance, pensez à changer le chemin suivant vos besoins.
- Chaque variable va correspondre à une valeur de température. J'ai une i5 et une carte mère asus P8Z77-V ainsi qu'un disque dur Western Digital et une carte graphique NVIDIA.
- Chaque valeur récupérée est ensuite stockée dans le fichier de log sous forme de ligne, à la fin, vous vous trouvez avec un fichier qui ressemble à cela :
Code : Tout sélectionner
1389979741 28 27 39 30
1389979801 28 27 34 29
1389979861 28 27 34 29
1389979921 27 27 32 29
1389979981 29 27 32 29
1389980041 28 27 38 29
1389980101 28 27 32 28
1389980161 27 27 30 28
1389980221 27 27 31 28
1389980281 27 27 31 28
Code : Tout sélectionner
* * * * * /bin/bash /home/pierre/system-monitoring/temps.sh
Code : Tout sélectionner
# Nombre d'heures à afficher
HOURS=2
# Choix du timezone
TZ=2
# Calcul de la date de début
NOW=$(date +%s)
BEFORE=$((${NOW}-60*60*$HOURS+(${TZ}*3600)))
gnuplot -persist <<-EOP
#set terminal gif small size 800, 500 transparent
set terminal svg size 1200, 700 fname 'Verdana' fsize 10
set output "temps.svg"
set time
t0 = $((${TZ}*3600))
set xtics rotate
set xdata time
set timefmt "%s"
set format x "%H:%M le %d/%m"
set yrange ["15":"62"]
set xrang [$BEFORE-946684800:]
set grid
set title "Computer Temperature"
set ylabel "Degrees Celsius"
set xlabel "\n1 minute interval"
plot '/home/pierre/system-monitoring/log/temps.log' using (\$1+t0):2 title "GPU" with lines, '' using (\$1+t0):3 title "HDD" with lines, '' using (\$1+t0):4 title "CPU" with lines, '' using (\$1+t0):5 title "M/B" with lines
set key below
set output
EOP

(Bon ok, au début je jouais à Metro Last Light, puis ensuite à estranged act 1, on remarque le Source Engine du second semble exiger plus de ressources compte-tenu de la température plus élevée).
N'hésitez pas à me donner vos remarque et/ou amélioration! De mon côté, un problème subsiste. Si vous éteignez votre ordinateur, les données ne sont pas enregistrées (c'est normal), mais quand vous le rallumez et que des données sont à nouveau enregistrées, lors de la génération, vous avez le dernier point et le nouveau point (depuis l'allumage du PC) qui sont relié par une longue ligne pas très esthétique. Si quelqu'un sait comment l'éviter...
Enfin, voici les sources :
http://talk.maemo.org/showthread.php?p=496931
http://www.jefftk.com/news/2011-06-20
http://blog.petitepomme.net/post/290538 ... ng-gnuplot