{"id":1700,"date":"2014-02-17T11:30:59","date_gmt":"2014-02-17T10:30:59","guid":{"rendered":"http:\/\/blog.guiguiabloc.fr\/?p=1700"},"modified":"2014-02-17T11:30:59","modified_gmt":"2014-02-17T10:30:59","slug":"domotique-valoriser-et-exploiter-les-donnees","status":"publish","type":"post","link":"http:\/\/blog.guiguiabloc.fr\/index.php\/2014\/02\/17\/domotique-valoriser-et-exploiter-les-donnees\/","title":{"rendered":"Domotique : Valoriser et exploiter les donn\u00e9es"},"content":{"rendered":"<p><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/02\/domomoney.png\"><img loading=\"lazy\" class=\"aligncenter size-medium wp-image-1701\" alt=\"domomoney\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/02\/domomoney-300x180.png\" width=\"300\" height=\"180\" srcset=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/02\/domomoney-300x180.png 300w, http:\/\/blog.guiguiabloc.fr\/wp-content\/2014\/02\/domomoney.png 330w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Ce n&rsquo;est pas faute de vous le r\u00e9p\u00e9ter, les donn\u00e9es sont un des \u00e9l\u00e9ments essentiels de la domotique (et par n\u00e9cessit\u00e9, de l&rsquo;informatique \u00e9galement).<\/p>\n<p>Apr\u00e8s quelques jours\/mois\/ann\u00e9es d&rsquo;utilisation de votre environnement domotique, vous vous \u00eates s\u00fbrement rendu compte de la quantit\u00e9 de donn\u00e9es dont vous disposez et que, probablement, vous n&rsquo;avez que faire ou que vous exploitez faiblement.<\/p>\n<p>Cette quantit\u00e9 de donn\u00e9es peut aussi devenir probl\u00e9matique \u00e0 stocker et traiter au fil du temps, et vous avez fait le choix sage et d\u00e9lib\u00e9r\u00e9 d&rsquo;en omettre une bonne partie (par exemple, le nombre de fois o\u00f9 l&rsquo;interrupteur des toilettes est pass\u00e9 de ON \u00e0 OFF).<\/p>\n<p>Vous \u00eates un producteur de donn\u00e9es diverses et vari\u00e9es, qui vont des valeurs des sondes de temp\u00e9ratures et d&rsquo;hygrom\u00e9trie de votre domicile et de son ext\u00e9rieur, de la vitesse du vent, de la consommation d&rsquo;eau, d&rsquo;\u00e9lectricit\u00e9, de fioul, de gaz, de la valeur de Co2 dans les pi\u00e8ces, du nombre de fois ou un module s&rsquo;est activ\u00e9 etc&#8230; Bref, vous disposez d&rsquo;un nombre cons\u00e9quent de valeurs.<\/p>\n<p>Vous, vous \u00eates industriel, vous concevez et vendez des modules \u00e0 greffer derri\u00e8re les interrupteurs et cela vous int\u00e9ressez s\u00fbrement de savoir combien de fois votre module est activ\u00e9 dans une journ\u00e9e et combien de temps il dure. Ou vous \u00eates constructeur de maison BBC et apr\u00e8s les examens concluants, vous seriez int\u00e9ress\u00e9 de connaitre le ratio temp\u00e9rature int\u00e9rieure\/ext\u00e9rieure\/consommation \u00e9nerg\u00e9tique de cette (ces) maison(s) au fil des ann\u00e9es.<\/p>\n<p>Bref, vous vous rendez bien compte qu&rsquo;il existe un chemin de rencontre entre les producteurs de donn\u00e9es et les consommateurs de ses donn\u00e9es.<\/p>\n<p>Ce point de rencontre, il prend d\u00e9sormais forme par l&rsquo;entremise de <a title=\"http:\/\/www.cityzendata.com\/\" href=\"http:\/\/www.cityzendata.com\/\" target=\"_blank\">CityzenData<\/a>, la division \u00ab\u00a0donn\u00e9es\u00a0\u00bb du groupe <a title=\"http:\/\/www.cityzensciences.fr\/\" href=\"http:\/\/www.cityzensciences.fr\/\" target=\"_blank\">Cityzen Sciences.<\/a> Il \u00e9tait destin\u00e9 initialement \u00e0 r\u00e9pondre aux besoins du consortium <a title=\"http:\/\/www.smartsensing.fr\/\" href=\"http:\/\/www.smartsensing.fr\/\" target=\"_blank\">SmartSensing<\/a> pour la gestion des donn\u00e9es produites par des capteurs ins\u00e9r\u00e9s dans des v\u00eatements.<\/p>\n<p>Je vous en avez d\u00e9j\u00e0 parl\u00e9 il y a quelques mois (twitter, <a title=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2013\/06\/19\/domotique-le-choix-dune-vulgarisation-erronee\/\" href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2013\/06\/19\/domotique-le-choix-dune-vulgarisation-erronee\/\" target=\"_blank\">blog<\/a>, forums) en vous interpellant sur le fait de garder un oeil dessus.<\/p>\n<p>Le CTO de CityzenData ne doit pas vous \u00eatre inconnu si vous suivez l&rsquo;actualit\u00e9 informatique puisqu&rsquo;il s&rsquo;agit de <a title=\"https:\/\/twitter.com\/herberts\" href=\"https:\/\/twitter.com\/herberts\" target=\"_blank\">Mathias Herberts<\/a>, un des pionniers du BigData en France, mais aussi un copain et ancien coll\u00e8gue de travail.<br \/>\nEt quand Mathias m&rsquo;a propos\u00e9 de faire \u00ab\u00a0joujou\u00a0\u00bb avec leur plateforme, bien \u00e9videmment j&rsquo;ai r\u00e9pondu pr\u00e9sent (m\u00eame si je suis plus scripteur que d\u00e9veloppeur, c&rsquo;est toujours agr\u00e9able :D)<\/p>\n<p>Une fois enregistr\u00e9 sur la plateforme Cityzendata, vous disposez de 3 tokens.<\/p>\n<p>&#8211; Un token \u00ab\u00a0\u00e9criture\u00a0\u00bb vous permet de pousser des donn\u00e9es<br \/>\n&#8211; Un token \u00ab\u00a0lecture\u00a0\u00bb vous permet de lire uniquement les donn\u00e9es li\u00e9es \u00e0 votre application<br \/>\n&#8211; Un token \u00ab\u00a0lecture g\u00e9n\u00e9rale\u00a0\u00bb peut lire toutes les donn\u00e9es que vous avez produites ind\u00e9pendamment de l&rsquo;application.<\/p>\n<p>A cela est communiqu\u00e9 une url d&rsquo;API endpoint pour pousser vos donn\u00e9es, une autre pour les exploiter (ou pour que d&rsquo;autres les exploitent).<\/p>\n<ul>\n<li>Envoyer vos donn\u00e9es<\/li>\n<\/ul>\n<p>Basiquement, avant d&rsquo;\u00e9crire votre propre code, cela fonctionne par un simple POST HTTP :<\/p>\n<p>curl -i -H \u00ab\u00a0Le_Header_Token: votre_token_ecriture\u00a0\u00bb -H \u00ab\u00a0Content-Type: text\/plain\u00a0\u00bb -d &lsquo;\/\/ temperature{piece=tempsalon} 20&rsquo; http:\/\/url_endpoint<\/p>\n<p>Et voila, vous venez d&rsquo;int\u00e9grer une valeur comportant un timestamp (une valeur de temps) en microsecondes dans votre \u00ab\u00a0application\u00a0\u00bb, sous la classe Temperature avec comme d\u00e9nomination pi\u00e8ce est \u00e9gale \u00e0 tempsalon et la valeur est de 20.<\/p>\n<p>C&rsquo;est bien \u00e9videmment l&rsquo;insertion la plus simple, vous pouvez y mettre votre propre timestamp, la latitude, la longitude et l&rsquo;\u00e9l\u00e9vation en plus si vous le souhaitez. Car les donn\u00e9es ont aussi la facult\u00e9 d&rsquo;\u00eatre g\u00e9o-temporelles.<\/p>\n<p>Un peu de code plus tard, et je me suis \u00e9crit mon client xPL pour pousser automatiquement les donn\u00e9es sur la plateforme de CityzenData.<br \/>\nEn r\u00e9sum\u00e9, toutes les trames de mes sondes (temp\u00e9rature, hygrom\u00e9trie, consommation \u00e9lectrique) qui transitent par mon bus xPL sont automatiquement transmises sur la plateforme.<\/p>\n<p>Ce client, vous le trouverez sur mon github :<\/p>\n<p><a title=\"https:\/\/github.com\/guiguiabloc\/xPL-PyHAL\/blob\/master\/tools\/xPL-CityzenData.py\" href=\"https:\/\/github.com\/guiguiabloc\/xPL-PyHAL\/blob\/master\/tools\/xPL-CityzenData.py\" target=\"_blank\">https:\/\/github.com\/guiguiabloc\/xPL-PyHAL\/blob\/master\/tools\/xPL-CityzenData.py<\/a><\/p>\n<p>(ce client a besoin d&rsquo;un fichier de param\u00e8tres, config.sonde (pr\u00e9sent dans le d\u00e9p\u00f4t github),qui fait le lien entre le code ID du module et le nom que vous souhaitez donn\u00e9 aux labels).<\/p>\n<ul>\n<li>Traiter vos donn\u00e9es<\/li>\n<\/ul>\n<p>Pour r\u00e9cup\u00e9rer, manipuler et traiter les donn\u00e9es pr\u00e9sentes sur la plateforme, CityzenData a d\u00e9velopp\u00e9 un langage appel\u00e9 Einstein. C&rsquo;est un<a title=\"http:\/\/en.wikipedia.org\/wiki\/Stack-oriented_programming_language\" href=\"http:\/\/en.wikipedia.org\/wiki\/Stack-oriented_programming_language\" target=\"_blank\"> langage de programmation orient\u00e9 pile<\/a>, un peu comme le<a title=\"http:\/\/en.wikipedia.org\/wiki\/Forth_%28programming_language%29\" href=\"http:\/\/en.wikipedia.org\/wiki\/Forth_%28programming_language%29\" target=\"_blank\"> Forth<\/a>.<br \/>\nVoici par exemple mon script einstein qui me permet de r\u00e9cuperer toutes les valeurs consommation \u00e9lectrique :<\/p>\n<pre lang=\"text\">\r\n'Votre_token_lecture'\r\n'=energy'\r\n0 ->MAP\r\n'2014-02-08T00:00:00.000000Z'\r\n'2015-01-01T00:00:00.000000Z'\r\n5 ->LIST\r\nFETCH\r\n<\/pre>\n<p>Ou uniquement les valeurs de temp\u00e9ratures \u00e0 l&rsquo;ext\u00e9rieur depuis le 09 f\u00e9vrier.<\/p>\n<pre lang=\"text\">\r\n'votre_token_lecture'\r\n'=temperature'\r\n'room'\r\n'=exterieur'\r\n2 ->MAP\r\n'2014-02-09T10:00:00.000000Z'\r\n'2015-01-01T00:00:00.000000Z'\r\n5 ->LIST\r\nFETCH\r\n<\/pre>\n<p>Comme pour l&rsquo;insertion de donn\u00e9es, une requ\u00eate http ex\u00e9cute einstein sur la plateforme<\/p>\n<p>curl &#8211;data-binary @guigui.einstein http:\/\/api_einstein<\/p>\n<p>Le r\u00e9sultat est au format json :<\/p>\n<pre lang=\"text\">\r\n[[{\"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]]}]]\r\n<\/pre>\n<p>Pour g\u00e9rer tout cela en Python :<\/p>\n<pre lang=\"python\">\r\nimport urllib\r\nimport urllib2\r\nimport sys\r\nimport json\r\n\r\neinstein = open('energy2.einstein', 'r')\r\ndata = einstein.read()\r\nurl =\u00a0 'http:\/\/api_einstein'\r\nreq = urllib2.Request(url, data, {'Content-Type': 'application\/octet-stream'})\r\ndataeinstein = json.load(urllib2.urlopen(req))\r\n\r\nmap = {}\r\nfor item in dataeinstein[0][0]['v']:\r\nmap[item[0]] = item[1]\r\nprint map\r\n\r\n# si cherche une valeur pour un timestamp donn\u00e9\r\ndata = {}\r\ndata = map\r\ntemp = data[1391931523551000]\r\nprint temp\r\n<\/pre>\n<p>Il y a bien entendu beaucoup de fonctions incluses dans einstein que ce simple exemple et ce billet ne suffirait pas \u00e0 toutes les expliquer.<\/p>\n<p>Maintenant que je vous ai pr\u00e9sent\u00e9 tout cela, en quoi cela vous concerne ?<\/p>\n<p>Vous \u00eates producteur de donn\u00e9es, outre le fait de disposer d&rsquo;une plateforme de stockage et de traitement hors normes, vous pouvez mettre \u00e0 disposition des consommateurs des donn\u00e9es qui peuvent les int\u00e9resser, et \u00eatre r\u00e9mun\u00e9r\u00e9 en cons\u00e9quence.<\/p>\n<p>Vous \u00eates consommateur, vous disposez de sources de donn\u00e9es multiples et vari\u00e9es sur lesquelles vous pouvez appliquer des mod\u00e8les de calculs et de traitement.<\/p>\n<p>Je vous laisse visiter leur site pour plus d&rsquo;explications et la fa\u00e7on de les contacter si vous \u00eates int\u00e9ress\u00e9.<\/p>\n<p>J&rsquo;imagine d\u00e9j\u00e0 certains d&rsquo;entre vous agiter fi\u00e8rement le drapeau de la protection de ses donn\u00e9es personnelles et du grand m\u00e9chant cloud, mais il va falloir rapidement que vous rationalisiez tout cela.<br \/>\nTout d&rsquo;abord, c&rsquo;est vous qui d\u00e9cidez des donn\u00e9es que vous mettez \u00e0 disposition et si le temp\u00e9rature de votre salon vous semble \u00eatre une notion totalement priv\u00e9e, alors oui, ce billet ne vous concerne pas.<\/p>\n<p>Ensuite, c&rsquo;est par le partage que l&rsquo;on fait avancer les choses. Si je peux donner \u00e0 Fibaro (pour en citer un au hasard), la dur\u00e9e de vie de son module (qui tombe en panne par exemple apr\u00e8s 67789 utilisations), et qu&rsquo;il revoit sa copie, alors oui \u00e7a m&rsquo;int\u00e9resse.<\/p>\n<p>En esp\u00e9rant vous avoir ouvert les yeux sur la fa\u00e7on dont on peut valoriser et exploiter des donn\u00e9es de domotique,<\/p>\n<p>Amusez vous bien \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ce n&rsquo;est pas faute de vous le r\u00e9p\u00e9ter, les donn\u00e9es sont un des \u00e9l\u00e9ments essentiels de la domotique (et par n\u00e9cessit\u00e9, de l&rsquo;informatique \u00e9galement). Apr\u00e8s quelques jours\/mois\/ann\u00e9es d&rsquo;utilisation de votre environnement domotique, vous vous \u00eates s\u00fbrement rendu compte de la &hellip; <a href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2014\/02\/17\/domotique-valoriser-et-exploiter-les-donnees\/\">Read More <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[137],"tags":[212,213],"_links":{"self":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/1700"}],"collection":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/comments?post=1700"}],"version-history":[{"count":13,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/1700\/revisions"}],"predecessor-version":[{"id":1714,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/1700\/revisions\/1714"}],"wp:attachment":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/media?parent=1700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/categories?post=1700"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/tags?post=1700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}