Sysdroid Unicorn HAT HD
Monitoring Raspberry pi avec une matrice 256 leds de Pimoroni. Dans ce tutoriel on va oublier le fer à souder et utiliser cette fabuleuse matrice de 256 leds proposée au format HAT par Pimoroni: la Unicorn HAT HD. Il s’agit d’une autre version de mon sysdroid qui consiste à monitorer l’occupation des CPUS, de la RAM, de l’espace disque, ainsi que la température du CPU en temps réel, en occupant le moins de ressource possible pour ne pas perturber le Raspberry pi.
La Unicorn HAT HD
Commençons par présenter la bête: c’est une carte au format HAT doté d’une matrice de 16*16 leds RGB. Pimoroni fourni une bibliothèque Python qui permet de la gérer très simplement. Des programmes démonstratifs sont fournis: voilà une démo particulièrement spectaculaire qui annonce les possibilités de cette matrice !
Dans ce tutoriel nous n’aurons besoin que de cette matrice, livrée avec un diffuseur du plus bel effet à visser sur la matrice, d’installer la bibliothèque en suivant le guide d’installation, puis de récupérer sur ma page Github les programmes python3 qui vont monitorer le système et afficher le résultat sur la matrice.
programmes python3
En premier lieu je conseille d’exécuter le programme uhhd_test.py: il va simultanément allumer toutes les leds en rouge, puis vert, puis bleu avec 2 secondes d’attente, et recommencer jusqu’à appui sur CTRL-C. Ça a l’air idiot ce test mais pas tant que ça… car il permet d’identifier une éventuelle led morte qui se voit tout de suite avec ce programme. Dans ce cas: faites une photo, et contactez le support après vente ils sont très réactif, c’est du vécu !
Deux programmes python3 permettent l’exécution du sysdroid sur la matrice Unicorn HAT HD:
sysdroid_main.py: c’est le programme principal à exécuter. Il est composé de deux classes
- classe ReadSys qui hérite du mutli-threading: elle va lire toutes les secondes les informations systèmes telles que occupation CPU, RAM, Disque, et température CPU et stocker le résultat. Comme c’est un thread, elle est exécutée en tâche de fond.
- classe Sysdroid, qui hérite aussi du mutli-threading. Elle va lire les informations préparées par une instance de ReadSys et afficher les informations sur la matrice sous forme de barres de niveau verticales, et texte.
- classe Application: c’est l’application principale qui va instancier un Sysdroid et le faire démarrer en tâche de fond, et ne rien faire d’autre pour ne pas saturer les processeurs.
Vous pouvez utiliser plusieurs paramètres utiles: le délais de rafraîchissement (par défaut toutes les secondes) et un indicateur de rotation pour orienter l’affichage à 0°, 90°, 180° ou 270° : tout autre angle de rotation sera rapproché à un multiple de 90° le plus près. Cet angle de rotation permet d’orienter l’affichage en fonction de l’orientation du Raspberry pi: super pratique !
sysdroid_uhhd.py: il est composé de deux classes qui vont gérer les affichages souhaités sur la matrice en exploitant la bibliothèque Python fournie par Pimoroni.
- classe Msg: elle permet d’afficher des caractères à partir de font définie en 5*3 pixels. C’est ce qui va me permettre d’afficher la température du CPU.
- classe Sysdroid_uhhd: elle va contenir toutes les méthodes qui permettent d’afficher les titres P - R - D pour Processeur - RAM - DISK et lisser leur couleur en fonction du niveau d’occupation de ces derniers. Elle permet aussi d’afficher des barres de niveau sur 5 pixels qui changent de couleur et de luminosité en fonction du niveau (couleur lissée du vert au rouge en fonction du niveau qui varie de 0% à 100%). Une petite animation de démarrage et d’extinction est aussi ajoutée.
Quand on exécute ce programme dans une console en tâche de fond “python3 sysdroid_main.py &”, et qu’on regarde ce qu’il coûte en ressource via une commande “top”: à peine 1.5% d’un CPU ! donc paris gagné: ce programme n’est pas du tout gourmand. On peut d’ailleurs voir que pas mal de processeurs sont totalement au repos puisque la première led verte ne s’allume même pas.
Le programme utilise la bibliothèque psutil pour récupérer les informations systèmes. Si cette erreur apparaît lors de l’exécution (et du coup rien ne se passe) :
ModuleNotFoundError: No module named ‘psutil’
elle se règle très simplement avec cette commande qui va installer la bibliothèque manquante:
sudo pip3 install psutil
Démonstration du sysdroid Unicorn HAT HD en action, avec un coup de stress CPU qui fait monter en flèche l’occupation des 4 CPUs et de la température. Mon disque est volontairement saturé à 85% pour cette démo.
Voilà c’est le HAT que j’utilise désormais sur mon Raspberry pi3b+ qui me sert de serveur NAS (je ne le démarre que quand je veux lancer une synchronisation/sauvegarde de mes données).