Domotique : Valoriser et exploiter les données

domomoney

Ce n’est pas faute de vous le répéter, les données sont un des éléments essentiels de la domotique (et par nécessité, de l’informatique également).

Après quelques jours/mois/années d’utilisation de votre environnement domotique, vous vous êtes sûrement rendu compte de la quantité de données dont vous disposez et que, probablement, vous n’avez que faire ou que vous exploitez faiblement.

Cette quantité de données peut aussi devenir problématique à stocker et traiter au fil du temps, et vous avez fait le choix sage et délibéré d’en omettre une bonne partie (par exemple, le nombre de fois où l’interrupteur des toilettes est passé de ON à OFF).

Vous êtes un producteur de données diverses et variées, qui vont des valeurs des sondes de températures et d’hygrométrie de votre domicile et de son extérieur, de la vitesse du vent, de la consommation d’eau, d’électricité, de fioul, de gaz, de la valeur de Co2 dans les pièces, du nombre de fois ou un module s’est activé etc… Bref, vous disposez d’un nombre conséquent de valeurs.

Vous, vous êtes industriel, vous concevez et vendez des modules à greffer derrière les interrupteurs et cela vous intéressez sûrement de savoir combien de fois votre module est activé dans une journée et combien de temps il dure. Ou vous êtes constructeur de maison BBC et après les examens concluants, vous seriez intéressé de connaitre le ratio température intérieure/extérieure/consommation énergétique de cette (ces) maison(s) au fil des années.

Bref, vous vous rendez bien compte qu’il existe un chemin de rencontre entre les producteurs de données et les consommateurs de ses données.

Ce point de rencontre, il prend désormais forme par l’entremise de CityzenData, la division « données » du groupe Cityzen Sciences. Il était destiné initialement à répondre aux besoins du consortium SmartSensing pour la gestion des données produites par des capteurs insérés dans des vêtements.

Je vous en avez déjà parlé il y a quelques mois (twitter, blog, forums) en vous interpellant sur le fait de garder un oeil dessus.

Le CTO de CityzenData ne doit pas vous être inconnu si vous suivez l’actualité informatique puisqu’il s’agit de Mathias Herberts, un des pionniers du BigData en France, mais aussi un copain et ancien collègue de travail.
Et quand Mathias m’a proposé de faire « joujou » avec leur plateforme, bien évidemment j’ai répondu présent (même si je suis plus scripteur que développeur, c’est toujours agréable :D )

Une fois enregistré sur la plateforme Cityzendata, vous disposez de 3 tokens.

- Un token « écriture » vous permet de pousser des données
- Un token « lecture » vous permet de lire uniquement les données liées à votre application
- Un token « lecture générale » peut lire toutes les données que vous avez produites indépendamment de l’application.

A cela est communiqué une url d’API endpoint pour pousser vos données, une autre pour les exploiter (ou pour que d’autres les exploitent).

  • Envoyer vos données

Basiquement, avant d’écrire votre propre code, cela fonctionne par un simple POST HTTP :

curl -i -H « Le_Header_Token: votre_token_ecriture » -H « Content-Type: text/plain » -d ‘// temperature{piece=tempsalon} 20′ http://url_endpoint

Et voila, vous venez d’intégrer une valeur comportant un timestamp (une valeur de temps) en microsecondes dans votre « application », sous la classe Temperature avec comme dénomination pièce est égale à tempsalon et la valeur est de 20.

C’est bien évidemment l’insertion la plus simple, vous pouvez y mettre votre propre timestamp, la latitude, la longitude et l’élévation en plus si vous le souhaitez. Car les données ont aussi la faculté d’être géo-temporelles.

Un peu de code plus tard, et je me suis écrit mon client xPL pour pousser automatiquement les données sur la plateforme de CityzenData.
En résumé, toutes les trames de mes sondes (température, hygrométrie, consommation électrique) qui transitent par mon bus xPL sont automatiquement transmises sur la plateforme.

Ce client, vous le trouverez sur mon github :

https://github.com/guiguiabloc/xPL-PyHAL/blob/master/tools/xPL-CityzenData.py

(ce client a besoin d’un fichier de paramètres, config.sonde (présent dans le dépôt github),qui fait le lien entre le code ID du module et le nom que vous souhaitez donné aux labels).

  • Traiter vos données

Pour récupérer, manipuler et traiter les données présentes sur la plateforme, CityzenData a développé un langage appelé Einstein. C’est un langage de programmation orienté pile, un peu comme le Forth.
Voici par exemple mon script einstein qui me permet de récuperer toutes les valeurs consommation électrique :

'Votre_token_lecture'
'=energy'
0 ->MAP
'2014-02-08T00:00:00.000000Z'
'2015-01-01T00:00:00.000000Z'
5 ->LIST
FETCH

Ou uniquement les valeurs de températures à l’extérieur depuis le 09 février.

'votre_token_lecture'
'=temperature'
'room'
'=exterieur'
2 ->MAP
'2014-02-09T10:00:00.000000Z'
'2015-01-01T00:00:00.000000Z'
5 ->LIST
FETCH

Comme pour l’insertion de données, une requête http exécute einstein sur la plateforme

curl –data-binary @guigui.einstein http://api_einstein

Le résultat est au format json :

[[{"c":"temperature","l":{".app":"domotique.guigui","room":"exterieur"},"a":{},"v":[[1391940411191000,7.1],[1391940368152000,7.1],[1391940325145000,7.1],[1391940282146000,7.1],[1391940239143000,7.2],[1391940196144000,7.2],[1391940153143000,7.2],[1391940024140000,7.2]]}]]

Pour gérer tout cela en Python :

import urllib
import urllib2
import sys
import json
 
einstein = open('energy2.einstein', 'r')
data = einstein.read()
url =  'http://api_einstein'
req = urllib2.Request(url, data, {'Content-Type': 'application/octet-stream'})
dataeinstein = json.load(urllib2.urlopen(req))
 
map = {}
for item in dataeinstein[0][0]['v']:
map[item[0]] = item[1]
print map
 
# si cherche une valeur pour un timestamp donné
data = {}
data = map
temp = data[1391931523551000]
print temp

Il y a bien entendu beaucoup de fonctions incluses dans einstein que ce simple exemple et ce billet ne suffirait pas à toutes les expliquer.

Maintenant que je vous ai présenté tout cela, en quoi cela vous concerne ?

Vous êtes producteur de données, outre le fait de disposer d’une plateforme de stockage et de traitement hors normes, vous pouvez mettre à disposition des consommateurs des données qui peuvent les intéresser, et être rémunéré en conséquence.

Vous êtes consommateur, vous disposez de sources de données multiples et variées sur lesquelles vous pouvez appliquer des modèles de calculs et de traitement.

Je vous laisse visiter leur site pour plus d’explications et la façon de les contacter si vous êtes intéressé.

J’imagine déjà certains d’entre vous agiter fièrement le drapeau de la protection de ses données personnelles et du grand méchant cloud, mais il va falloir rapidement que vous rationalisiez tout cela.
Tout d’abord, c’est vous qui décidez des données que vous mettez à disposition et si le température de votre salon vous semble être une notion totalement privée, alors oui, ce billet ne vous concerne pas.

Ensuite, c’est par le partage que l’on fait avancer les choses. Si je peux donner à Fibaro (pour en citer un au hasard), la durée de vie de son module (qui tombe en panne par exemple après 67789 utilisations), et qu’il revoit sa copie, alors oui ça m’intéresse.

En espérant vous avoir ouvert les yeux sur la façon dont on peut valoriser et exploiter des données de domotique,

Amusez vous bien :)

Ce billet a été posté dans domotique et taggé , . Bookmark ce permalink.

8 commentaires sur “Domotique : Valoriser et exploiter les données

  1. Coincidence, je suis en train de bosser sur un projet qui se nome serialkiller. Sa mission est de stocker sour forme de fichier les données des capteurs ou évenements.

    L’idée de serialkiller est qu’il n’utilise pas de base donnée, le but c’est qu’il puisse tourner d’une part en local et d’autre part qu’il puisse tourner sur des raspberry pi

    Url du projet: https://github.com/badele/serialkiller
    Example: http://domotique.adele.im/

  2. Ouh la, on n’est pas du tout dans le même concept :) Le dimensionnement des données n’est pas du tout le même. Si tu dois stocker et traiter des données qui arrivent à 15000 requetes/seconde constamment, ton fichier à plat va vite trouver ses limites ;)

  3. Je précise, un fichier par capteur. Aprés je suis d’accord avec toi, ce n’est pas fait pour traiter la domotique d’une ville ! :)

  4. Si en tant que passionné de techno mais plutôt réfractaire a la technique, j’ai pas compris grand chose excepté une. J’en arrive donc à une nouvelle façon de penser, tellement nouvelle que depuis la lecture de 1984 il y a pret de 25, je suis un mordu de la vie privée. Dommage, mon faible niveau technique ne me permet pas d’avoir les moyens de l’être réellement.
    Le big data, vu les sommes considérables en jeu, on n’y échappera pas. Toutes les grosses boites vont s’y engouffrer. Défaitisme ? je ne sais pas ! Nan ce que j’aime dans ton article c’est la notion (en filigranne) de partenariat. Ok pour récupérer un nombre de données, mais celles ci : pas touche (peut être d’ailleurs les plus inintéressantes pour la boite :p ).
    Je passe dès lors d’une position passive (voir pleunicharde parfois) à une pro active. Tu veux mes données ? Ok! Mais tu me donnes quoi en échange ?

    Reste la position de force. Perso, la première boite à laquelle je pense est, déformation pro, pas google mais EDF. La plupart des blogs que je peux lire sur ce module sont a coté de la plaque. Ça va des cons qui pensent que ça va les tuer avec des ondes EM alors que s’en est plein leur circuit électrique de leur baraque, DECT, TV … à ceux qui n’ont pas peur d’avoir leur compte santé (déjà electronique) piraté mais qui ont peur du piratage de leur linky.
    Le danger n’est pas là mais bien commercial. On n’a pas le choix avec le linky que leur donner notre niveau de conso, qu’ils vont traiter afin de sortir des tarifs en fonction des heures et de notre conso. Bref, j’ai quoi dans mon escarcelle pour négocier ? Pas grand chose…Bref, ce systeme n’est a mon avis valable que dans un vrai état de concurrence mais pas d’oligopole, ce qui est de plus en plus le choix dans nos sociétés économique (téléphonie, énergies, eau…)

  5. Salut,

    J’avais aussi mis en oeuvre, il y a quelques années ce type de système avec Pachube (devenu Xively aujourd’hui) :

    https://csquad.org/2009/11/27/xpl-perl-update-script-for-pachube/

    Nous savons tous que : Le modèle économique de ses boites est de devenir un centre d’analyse de données et de revendre les informations à ces clients.

    Donc tu devrait être rémunère par @herberts pour avoir mis à disposition tes données dans son « cloud » ;-)

    Or dans l’API de Cityzen Data, je ne vois aucune fonctions (getFreeBeer) pour la rémunération de tes données ? ;-)

    Donc non, ce n’ai pas le grand méchant cloud, mais le « deal » proposé par cette boite n’est pas juste ! (comme toutes les boites de ce type ;-) )

    Les données se retrouve sous le contrôle d’une seule entreprise qui peut disparaître, changer de politique, contrôle sont API, etc…

    Donc la véritable solution pour partager les données de nos installations domotique, serait la mise en place d’une DHT :

    https://en.wikipedia.org/wiki/Distributed_hash_table

    Comme cela les données serait accessible publiquement et distribué de manière équitable ;-)

    Voilà,

    /me assis sur plusieurs centaines de Go de données et cherche à remplir sont Frigo IPv6 avec de la Beer ;-)

  6. tu as mal lu ;) (ou je me suis mal fait comprendre), tu es rémunéré pour les données que tu mets dans ce cloud si elles sont exploitées par un autre.

  7. Bonsoir,
    tout d’abord « chapeau » pour votre site. J’ai même un important matériel informatique et j’aimerai avoir des conseils pour mettre en place un cluster DRBD/OCFS2/PACEMAKER (serveurs physiques puissants) avec Apache/Mysql et un serveur de supervision pour « piloter » le cluster.
    Je peux vous envoyer ma configuration matérielle et vous donner un accès si vous avez le temps de me donner un coup de maint.
    Cordialement,
    Bernard

  8. Bonjour et merci :)
    Je n’ai malheureusement pas le temps de m’occuper de l’architecture d’autres projets, mon travail et le reste de mon temps libre ne m’en laisse guère le temps :)
    Bonne continuation dans vos recherches