Thingz : faire remonter la température d’une pièce dans Piwik
Une carte Arduino classique ne possède en général qu’une connexion via USB pour transmettre des données à un ordinateur. En fait, la console de base d’Arduino ne permet que de déboguer, mais avec un peu de malice vous pourrez en tirer quelque chose. Dans notre cas de figure, l’idée est de se servir du bloc température de notre carte Arduino pour l’envoyer à une solution de web analytics. Pour ce faire, il va falloir utiliser sur notre ordinateur un langage de programmation qui permettra d’interpréter les données transmises par le câble USB : nous allons utiliser Python. La première étape va consister à installer un module Python du nom de pySerial.
Installer pySerial facilement
J’ai trouvé ce tuto super simple, vrai de vrai, pour les utilisateurs de Linux :
Installer pySerial.
Une fois cela fait, vous aurez un programme permettant de faire dialoguer Arduino et Python.
Communiquer avec Arduino en Python
Une fois le programme installé, nous allons pouvoir mettre en place un petit script pour voir si tout cela fonctionne correctement et monter en compétence. Naturellement, cela implique que Python soit installé sur votre ordinateur.
Dans un premier temps, mettez en place le tuto suivant pour faire afficher un Hello World depuis votre Arduino : tuto Hello World Thingz.
Une fois celui-ci installé, votre Arduino va émettre un message de type « Hello World ».
Maintenant, nous allons mettre en place un script Python pour arriver à lire depuis le port USB ce qu’émet l’Arduino. Le voici :
import serial
arduino = serial.Serial(‘/dev/ttyACM0’, 9600)
while True:
data = arduino.readline()[:-2] #the last bit gets rid of the new-line chars
if data:
print data
Comme vous pouvez le constater, la première ligne importe le module que nous avons installé au début de cet article. La deuxième va écouter le port sur lequel est branchée l’Arduino (pour le trouver, allez dans Outils puis Port série de l’interface graphique de votre Arduino). Le reste permet de dire que s’il y a de la data qui sort, alors il faut l’afficher. Résultat :
OK, nous venons de voir que cela marche. Nous allons donc pouvoir supprimer ce script et le remplacer par un script permettant de récupérer la température (naturellement, pour ce faire, vous mettrez en place le bloc température de Thingz sur la board) :
#include « Temperature.h »
Temperature temp;
void setup()
{
Serial.begin(9600);
}
void loop()
{
temp.temperature();
attendre(10000);
Serial.println(temp.temperature());
}
Comme vous pouvez le voir, notre code n’a rien d’extraordinaire. Dans la console, nous pouvons remarquer qu’il y a des bugs (mais bon, n’étant pas développeur, je ne peux pas faire de miracles ; mon but est avant tout de vous montrer les possibilités en termes d’analytics) :
Comme vous pouvez le constater, il fait 25 degrés dans mon petit appartement.
OK, maintenant nous allons faire le nécessaire pour envoyer cette donnée de température à la solution de web analytics.
Envoyer une requête HTTP à Piwik via Python
Piwik propose différents types de tracking. Le plus simple à appréhender est celui du tracking image, qui fonctionne de façon similaire au Measurement Protocol de Google Analytics. Ci-dessous, le script Python qui permet d’envoyer une requête HTTP :
import serial, httplib
arduino = serial.Serial(‘/dev/ttyACM0’, 9600)
while True:
data = arduino.readline()[:-2] #the last bit gets rid of the new-line chars
print data
conn = httplib.HTTPConnection(« votre-nom-de-domaine »)
conn.request(« HEAD », »/piwik/piwik.php?idsite=1&rec=1&action_name= »+str(data))
print conn.request
Et résultat :
Bon, vous l’aurez remarqué, il y a énormément d’ajustements à faire :
- la température ne devrait être poussée qu’une fois par heure ;
- avec mon code actuel, les erreurs vont remonter dans Piwik ;
- au lieu de les faire remonter en tant qu’actions, il faudrait les faire remonter en tant que variables personnalisées.
Mais bon, le but du tutoriel était avant tout de vous montrer que, depuis une carte Arduino simplifiée telle que Thingz, vous pouvez envoyer de la data sur internet via le câble USB et utiliser ces données pour de l’analytics.
Un grand merci à Jean-Baptiste pour l’aide sur Python : @jb_ma







