Capteurs de température dans les salles de Tetaneutral.net

Depuis quelques jours, des courbes de température des 3 salles associatives de Tetaneutral (Myrys & TLS00) sont visibles sur un graphique ici : https://temper.aplu.fr/ et les données peuvent être téléchargées en CSV.
Cela vient compléter le capteur de température et d'humidité déjà présent à TLS00 depuis plusieurs années et qui est géré par Matthieu : https://herrb.eu/uthum

Les capteurs

Sur la partie technique, ces capteurs de type TEMPer sont intégrés dans des clefs USB, ces clefs USB sont vues comme des claviers par l'OS.

Elles fonctionnent donc "sans driver", le fabricant partant du principe que n'importe quel OS aura un driver pour gérer un clavier USB en natif.

Ensuite, le principe pour lire les données est d'utiliser un hack qui fonctionne sous Windows mais pas sous Linux (et sûrement pareil pour *BSD). En effet, pour lire les données, il suffit d'ouvrir Excel et de rester appuyer sur la touche "Ver maj" (Caps to Excel).

Sur les claviers, il y a un voyant indiquant l'état du verrouillage numérique et verrouillage majuscule. Ce voyant est géré entièrement par l'OS qui, lorsqu'il reçoit le signal correspondant d'un clavier, envoie un signal sur l'ensemble des claviers pour allumer la led associée. Ce n'est pas le clavier qui gère cet état, tous les claviers envoient simplement une indication de "touche enfoncée" "touche relâchée" (peu importe les touches).

Windows, lorsque l'on reste appuyer sur une de ces fameuses touches de verrouillage, envoie de manière répétitive l'indication au clavier d'allumer ce voyant (en fait Windows réagit de la même manière que lorsque l'on reste appuyer sur une autre touche, il fait de la répétition). Sous Linux ce n'est pas le cas, l'OS sait qu'il a déjà envoyé le signal et n'envoie donc pas le signal en permanence.

La clef USB détecte donc la présence de ce signal pour allumer le voyant lorsqu'il est envoyé plusieurs fois en de suite, le firmware dedans s'active et envoie les mêmes signaux qu'un clavier enverrait pour écrire du texte et vient donc taper, entre autres, la température.

À savoir : ça utilise encore quelques astuces d'Excel (qui fonctionnent aussi avec LibreOffice) pour "saisir" la date (par exemple si vous faites "ctrl+point- virgule") tout comme l'utilisation de la touche "tabulation" pour se déplacer d'une colonne à l'autre ou "entrée" pour passer d'une ligne à l'autre.

Bien sûr la clef n'a pas connaissance du type de clavier qui est configuré (QWERTY, AZERTY, etc) et partira du principe que le clavier est un US QWERTY.

Ces explications sont tirées de cette page wiki : https://github.com/edorfaus/keytemper/wiki/Direct-to-Excel (en anglais).

La bonne chose pour Linux est donc la présence de ce projet : https://github.com/edorfaus/TEMPered qui est donc capable d'envoyer la séquence permettant d'activer la clef USB et de lire le retour pour en extraire les informations qui nous intéressent, à savoir la température.

Voici donc pour la partie clef USB.

L'affichage sur un site web

Pour la partie graphique et extraire des données en CSV, cela se fait en deux étapes.

  1. Un petit script exécuté à intervalle régulier vient lancer la commande permettant de lire la température, ajoute la date et envoie ça sur mon serveur ;
  2. Côté serveur, les CSV reçus sont concaténés pour être mis à disposition du script php qui générera la page avec le javascript requis pour afficher les graphiques.

À noter que toute cette partie a été faite initialement il y a plus de 7 ans à "la-rache" et n'a quasiment pas évolué depuis, donc s’il y a des personnes qui souhaitent améliorer la partie rendu, ne pas hésiter à me contacter qu'on en discute :)

Un peu de Docker

Le projet permettant de lire les capteurs fonctionne bien sous Debian car les librairies sont disponibles mais pas sous Fedora.

On peut donc utiliser le Dockerfile (ou l'image directement) présente ici : https://hub.docker.com/r/aplu/tempered  pour utiliser une image Docker avec Debian.

En lancera ensuite la commande suivante pour récupérer la température (en partant du principe que la clef sera vue sur hidraw1 (le nom peut changer, vous trouverez le nom en executant la commande dmesg).

docker run -it --device=/dev/hidraw1 aplu/tempered 

Vous trouverez sur mon git ici https://gitlab.com/mulx/TEMPered/ l'ensemble des fichiers avec un docker-compose permettant de faire fonctionner ça de manière automatique avec docker.

Merci à Id2ndR pour la partie Docker :)

Haut de page