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ébogguer 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 un langage de programmation sur notre ordinateur qui va permettre d’interpréter les données qui sont transmises par le cable usb. Pour ce faire nous allons utiliser le langage de programmation Python. La première étape va consister à installer un programme pour Python du nom de pySerial/

Installer pySerial facilement

J’ai trouvé ce tuto super simple, vrai de vrai pour les utilisateur de Linux:
Installer pySerial;
une fois cela fait vous aurez un programme permettant de dialoguer entre 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é, cela signifie que votre Arduino va émettre un message de type « Hello World ».

Maintenant nous allons mettre en place un script Python pour justement arriver à lire depuis le port USB ce qu’émet la 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 programme que nous avons installé au début de cet article. La deuxième va écouter le port sur lequel est branché la Arduino(pour le trouver, allez dans outils puis port série de l’interface graphique de votre Arduino). Le reste permet de dire que si il y a de la data qui sort, alors il faut l’afficher, résultat:

thingz-and-python

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 du bug(mais bon n’étant pas développeur je ne peux pas faire de miracles malheureusement, mon but est avant tout de vous montrer les possibilités en terme d’analytics):

temperature-piece

 

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:

piwik-temperature-thingz

 

Bon vous l’aurez remarqué il y a énormément d’ajustements à faire:

  • la température ne devrait être pushée qu’une fois par heure;
  • avec mon code actuel les erreurs vont remonter dans Piwik;
  • au lieu de remonter en tant qu’action il faudrait que je les fasse remonter en tant que variables personnalisées;

mais bon le but du tutorial était avant tout de vous montrer que d’une carte Arduino simplifiée telle que Thingz vous pouvez envoyer de la data sur Internet via le cable usb et utiliser ces data pour de l’analytics.

Un grand merci à Jean-Baptiste pour l’aide sur Python: @jb_ma

 

Confidentialité des Données Mentions Légales CGV