Un écran de supervision fait maison

Cela fait depuis plusieurs années que je rêvais de faire de la domotique, j'ai commencé mais il me fallait un écran de supervision, je vous en parle!

Hardware

Tout d'abord, sur quel matériel tourne cette écran de supervision? C'est sur un Raspberry Pi 4 model B avec 2Go de RAM branché à un écran d'occassion de marque BenQ.

Sur ce Raspberry Pi, il y a un dongle SONOFF Zigbee en USB et une sonde de température DS18B20.

Software

Mais alors, maintenant qu'on sait ce qu'il y a physiquement, qu'est-ce qu'il y a dedans? Une page PHP qui est ouverte en mode kiosque sur chromium.

Du PHP? Donc du web dynamique? OUI! Enfaite, la page charge des "modules" qui correspondent chacun à un fichier PHP qui s'occupe d'une fonctionnalité affichée sur l'écran de supervision.

Mais quels sont les modules et comment communiquent-ils avec l'écran?

Module echo

Le module echo permet, via Node-Red, d'appeller tous mes VPS afin de vérifier qu'ils répondent sur les internets et l'afficher avec des petites pastilles vertes ou rouges!

Comment ça sur la photo y a une pastille grise? Oui c'est parce que le raspberry pi (DWL1) est off donc on va pas l'embêter pour rien...

En gros, Node-Red fait des requêtes HTTP en GET sur chaque serveur qui ont une page de réponse simple.

Module birthdates

Le module birthdates (dates d'anniversaires pour les francophones) permet d'avoir la liste des anniversaires et des âges de nos amis (ou de la famille) et du coup se passer de Facebook (ça sert à autre chose?).

C'est simplement un appel à une base de données mySQL.

Module agenda

Le module qui se trouve en bas de l'écran affiche les prochains rendez-vous mais n'est pas encore très connecté... enfin si, ça communique avec une base de données mySQL, mais c'est tout.

Module température

Un des modules les plus intéressant qui communique avec la sonde DS18B20. Node-Red appelle un script Python qui récupère et enregistre (mais les archives sont pas encore utilisées) la température de la sonde.

Ensuite Node-Red écrit sur l'écran la température avec l'heure du relevé.

Module MQTT

Le module le plus récent que j'ai ajouté. C'est donc le dongle SONOFF Zigbee qui capte les périphériques Zigbee en MQTT et qui permet, via le serveur Mosquitto, d'informer les changements à... Node-Red!

Mais comme actuellement, je n'ai qu'une télécommande (la fameuse TRÅDFRI) Zigbee, j'utilise Node-Red pour communiquer autrement avec le reste de ma domotique.

Par exemple, lorsque je sélectionne les flèches gauche et droite de la télécommande, cela incrémente un compteur dans Node-Red qui permet d'afficher une icône sur l'écran pour savoir quel élément est sélectionner.

Ensuite, selon l'élément sélectionné (actuellement, l'écran, la réinitialisation de la couleur de la lampe du bureau, le on/off de la lampe du bureau) les actions varient, comme mettre l'écran en mode nuit.

Quel base?

Mais tout ça, ça fonctionne comment? Et bien c'est des bouts de code ajoutés les uns après les autres au fil des ajouts et des modifications.

Donc, on a une page PHP pour l'interface qui fait tourner une "clock" javascript qui, chaque seconde, chaque heure, chaque jour, execute des chargements sur les modules php primaires (ceux connectés à SQL) et qui actualise l'horloge.

En parallèle, depuis l'installation du MQTT, Node-Red actualise également régulièrement les modules "echo", "température" et "MQTT" de son côté.

A terme, l'idée est que Node-Red gère tout l'affichage personnalisé de l'écran, ce qui veut dire, une mise à jour prochaine de l'écran et donc un nouvel article!