Nous vous avions parlé brièvement de Pachube il y a quelques temps, lors du rachat par LogMeIn. Pachube est un service qui permet de stocker des données statistiques et d'en faire une représentation graphique facilement. Un service intéressant, mais qui à ce moment là était payant (une version gratuite existait, mais limitée à 4 flux de données et un historique sur 30 jours seulement, ce qui était bien trop limité pour un suivi de sa consommation électrique par exemple).
Bonne nouvelle: depuis quelques jours, Pachube est totalement gratuit ! Plus de limitation des flux, plus de limitation de l'historique.
Et qu'est ce qu'il manque justement à la Vera ? Une représentation graphique des données ! Pachube disposant d'une API très complète, et la Vera étant capable d'interpréter des scripts, il n'était pas très difficile d'exploiter cette possibilité.
Je vous explique donc aujourd'hui comment réaliser cela.
I. Pré requis
Il faudra tout d'abord créer un compte sur le site Pachube. Une fois créé, vous aurez accès à une clé pour utiliser l'API:
Notez bien cette clé, elle sera réutilisée plus tard sur la Vera.
Ensuite, créez un feed, qui contiendra les données que vous souhaitez:
Ici, j'ai donc créé un feed dédié à la Vera. Tout en bas de l'écran, on peut ensuite définir les datastream qui correspondront à chaque donnée stockée:
Le fee peut être public si vous souhaitez le partager avec n'importe qui, ou bien privé.
Voilà. Du côté de Pachube, nous avons tout ce dont nous avons besoin.
II. Du côté de la Vera
Il ne reste plus qu'à configurer la Vera pour qu'elle envoie automatiquement les données à Pachube. L'API est un peu complexe, et pour faciliter son utilisation il vaut mieux créer une fonction sur la Vera qu'on appellera quand on le souhaite.
Pour cela, nous allons donc dans la partie MiOS Developpers, onglet “Edit startup Lua” pour y copier le code de notre fonction. Ce code sera lancé automatiquement à chaque démarrage de la Vera, rendant cette fonction disponible n'importe quand:
Le code en question:
[sourcecode language=”perl”]
function my_send_pachube (feed, datastream, value)
local apikey = "VOTRE_CLE_API_PACHUBE"
local base_url = "http://api.pachube.com/v2/feeds/"
local method = "PUT"
require(‘ltn12')
local socket = require("socket")
local http = require("socket.http")
local json_data = ‘{ "version":"1.0.0","datastreams":[ {"id":"' .. datastream .. ‘", "current_value":"' .. value .. ‘"}]}'
local response_body = {}
local response, status, header = http.request{
method = method,
url = base_url .. feed,
headers = {
["Content-Type"] = "application/json",
["Content-Length"] = string.len(json_data),
["X-PachubeApiKey"] = apikey
},
source = ltn12.source.string(json_data),
sink = ltn12.sink.table(response_body)
}
end
[/sourcecode]
Remplacez bien la clé API par la votre, comme vu plus haut.
Il n'y a plus qu'à créer un scénario pour envoyer les données qu'on souhaite. Par exemple, pour avoir un suivi de la température de mon salon, je crée une scène avec un timer toutes les 10min, et j'appelle la fonction Pachube dans le code Luup, de cette façon:
Le code complet:
[sourcecode language=”perl”]
local deviceID = 190
local tempsalon = luup.variable_get("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", deviceID)
my_send_pachube ("29458", "Temperature_Salon", tempsalon)
return true
[/sourcecode]Avec la première ligne, on indique le device à exploiter. Il faudra remplacer le “190” par l'ID de votre device sur la Vera (visible dans les paramètres avancés du device en question).
La deuxième ligne récupère la valeur du device, ici la température.
Enfin, la troisième ligne exécute la fonction créée précédemment qui se charge d'envoyer l'information à Pachube. On indique simplement le numéro du feed (ici “29458”, à remplacer par le votre) , le nom du datastream (“Temperature_Salon”, à remplacer également par le votre), puis la valeur à envoyer, qui est ici la température récupérée du device.
Les deux autres arguments “urn:upnp-org:serviceId:TemperatureSensor1” et “CurrentTemperature” seront à adapter si vous voulez récupérer une information autre que la température (je donnerai quelques exemples plus loin).
Après quelques temps de fonctionnement, vous pourrez voir sur votre interface Pachube les données recueillies, représentées sous forme graphique:
Sur la droite on peut sélectionner l'échelle. Sur une semaine, je commence à avoir quelques données représentatives:
En cliquant sur la petite roue, il est possible de personnaliser le graphique et d'obtenir le code pour insérer le graphique où on souhaite:
Pachube propose de nombreuses possibilités au niveau du partage des informations, dont c'est justement le but. Vous pourrez donc facilement afficher un graphique où vous le souhaitez, exploiter les données, etc… Certains vont même jusqu'à récupérer ces statistiques pour les afficher dans une représentation 3D de leur maison, ce qui en fait donc une représentation avec des données “live” :D Il faudra juste étudier un peu les API de Pachube, et donc s'y connaitre un peu en code (juste un peu, hein…)
Nous avons vu l'exemple ici pour le suivi d'une température, mais on peut très bien récupérer toutes les autres informations de la Vera.
Pour l'humidité, voici mon code:
[sourcecode language=”perl”]
local deviceID = 191
local humsalon = luup.variable_get("urn:micasaverde-com:serviceId:HumiditySensor1", "CurrentLevel", deviceID)
my_send_pachube ("29458", "Humidite_Salon", humsalon)
return true
[/sourcecode]
Il faudra bien veiller à modifier les services associés au device qu'on souhaite exploiter (les “urn:micasaverde-com:serviceId”).
Pour le niveau de luminosité:
[sourcecode language=”perl”]
local deviceID = 192
local lumsalon = luup.variable_get("urn:micasaverde-com:serviceId:LightSensor1", "CurrentLevel", deviceID)
my_send_pachube ("29458", "Luminosite_Salon", lumsalon)
return true
[/sourcecode]
Et enfin pour la consommation d'électricité:
[sourcecode language=”perl”]
local deviceID = 110
local consoarmoire = luup.variable_get("urn:micasaverde-com:serviceId:EnergyMetering1", "Watts", deviceID)
my_send_pachube ("29458", "Conso_Armoire", consoarmoire)
return true
[/sourcecode]
On peut représenter de cette façon n'importe quelle donnée: le nombre d'ouvertures de la porte, le nombre de détection de présence, etc… en adaptant simplement le nom du service du device.
J'ai commencé ainsi à me construire mon petit tableau de bord:
Voilà, vous pouvez maintenant créer de beaux graphiques à partir des données de la Vera, ceci assez simplement, sans avoir à installer votre propre serveur générant les graphiques (style rrdtool…) ! Et du coup également garder un historique des informations qui vous semblent importantes (consommation électrique, températures, etc…).
Bien sûr, l'API de Pachube ne s'arrête pas à la Vera, et peut être utilisée avec tout soft supportant des scripts un peu “poussés”, comme par exemple Homeseer. Avec la Zibase, pour le moment il faudra oublier à cause de fonctions script pour le moment inexistantes, mais celle ci dispose déjà de représentations graphiques des différentes données, suffisante dans la majorité des cas.
Je remercie au passage Thomas qui nous avait fait part de son code Lua pour l'utilisation avec la Vera.
xively a racheté pachube, il n’est plus gratuit…