TUTO Open.sen.se – Les courbes de la domotique

Aujourd’hui, je vais vous parler d’Open.sen.se Open.sen.se est un outil gratuit permettant de collecter différentes valeurs de différentes sources afin de les restituer sous forme de graphiques ! Car c’est bien joli d’avoir des objets connectés, mais récolter les données de ces derniers, les trier et les analyser… c’est encore mieux.open.sen.se

Son créateur n’est autre que Rafi Haladjian, le créateur du lapin Nabaztag… Feel, Act, Make Sense (Resentir, Agir, Donner du sens) : Voici la devise d’Open.sen…

De belles images valent mieux qu’un long discours… Voici quelques copies d’écran réalisées avec la remonté d’informations depuis ma box domotique :

open.sen.se

 

dashboard-opensense

open-sen-se-zipabox

Pour arriver à ce résultat, il faut passer par quelques étapes que je vais développer ci-dessous 😉

Principe de fonctionnement

Etape 1 : Création du compte

Tout d’abord, il faut créer un compte pour obtenir une invitation pour cet outil (encore en bêta). Il faudra être patient… En effet, comme c’est une version bêta gratuite… l’attente peut être longue (comptez 2 à 3 semaines). Toutefois, si vous connaissez quelqu’un qui possède déjà un compte, ce dernier peut vous parrainer et l’ouverture est quasi-instantanée. Cependant, chaque parrain ne dispose que de 5 invitations, donc, demandez sur Cachem de vous parrainer (en commentaire). Nous disposons de quelques invitations… et chaque filleul pourra à son tour devenir parrain et faire bénéficier de ses invitations…

Une fois votre compte créé, il faut envoyer vos données vers les serveurs Open.sen. Il va de soi qu’il faut que vous sachiez comment récupérer les infos de vos sources (domotique, arduino, station d’accueil,…). Lorsque votre compte sera créé, vous recevrez une clé permettant l’envoi des données.

Étape 2 : Création de feeds (réceptacle d’info)

Connectez-vous sur Open.sen.se et rendez-vous sur le menu Channels puis Add Channel et sélectionnez Register de « Arduino & other physical or virtual devices« . Vous cliquez sur le bouton Get Started sur la page suivante.

Tuto1

Cette étape permet de créer un Device (Appareil). Si vous en utilisez plusieurs (1 Zipabox, 1 Arduino, 1 eeDomus, 1 serveur web…). Cela s’avérera plus pratique en terme d’organisation.

Ne vous en faites pas, même si vous n’avez pas d’Arduino, on utilise cette option de façon générique.

Étape 3 : Personnaliser votre Appareil

Définissez tout simplement un nom, un type et éventuellement une description. Ensuite, définissez l’interaction entre votre appareil et Open.sen.

Tuto2

Pour cela, plusieurs options se présentent à vous :

  • Sending data (L’envoi des données depuis votre appareil vers open.sen.se) :
    • HTTP Posting : L’appareil dépose des données sur open.sen.se en utilisant le protocole HTTP <= celui qui nous intéresse
    • XMPP Posting (pas encore disponible) : L’appareil dépose des données sur open.sen.se en utilisant le protocole XMPP
    • CoAP Posting (pas encore disponible) : L’appareil dépose des données sur open.sen.se en utilisant le protocole CoAP
  • Receiving data (La réception des données sur votre appareil depuis open.sen.se) :
    • HTTP Polling : L’appareil récupère les données collectées sur open.sen.se en utilisant le protocole HTTP <= celui qui nous intéresse
    • HTTP Push to : Open.sen.se déposera les données collectées sur l’adresse web en paramètre en utilisant le protocole HTTP
    • XMPP Push (pas encore disponible) : Open.sen.se déposera les données collectées sur l’adresse web en paramètre en utilisant le protocole XMPP
    • CoAP Push (pas encore disponible) : Open.sen.se déposera les données collectées sur l’adresse web en paramètre en utilisant le protocole CoAP

Une fois les options sélectionnées et les renseignements saisis, cliquez sur le bouton Save and Continue.

L’étape suivante vous propose de créer un feed directement, sachant que vous pouvez le faire à tout moment.

Étape 4 : Créer un feed pour collecter des données

Pour faire simple, un feed est un pot dans lequel on va stocker 1 donnée à un instant t. Après ce sont des mathématiques! y = f(x) (à ne pas confondre avec notre FX) !

On renseigne alors le feed en le nommant, puis en définissant si c’est une entrée (dans open.sen.se) ou une sortie (récupération depuis votre appareil).

Tuto3

On définit le type :

  • Un nombre à décimales (Float)
  • Un nombre entier (Integer)
  • Une valeur binaire (Boolean 1 ou 0)
  • La valeur d’une liste (List) définie après avoir sélectionné le type
  • Du texte (Text)
  • Ou une valeur personnalisée (Other)

Tuto4

Une liste d’options apparaîtra après avoir choisi le type pour avoir plus de pertinence, par exemple dans le cas d’un Float, la valeur sera de type °C ou € ou encore dB ou même une valeur personnalisée.

Ensuite, cliquez sur Save feed.

Après avoir sauvegardé, vous pourrez soit ajouter un nouveau feed, soit terminer. Vous aurez terminé en cliquant sur le bouton Finish.

Tuto5

Vous aurez donc dans la liste des feeds un résumé contenant la liste des feeds créés ainsi que leurs numéros respectifs.

Tuto6Ce numéro est l’adresse du feed.

Étape 5 : Créer une Application pour afficher le feed sur le Sensboard (page d’accueil)

Rendez-vous dans le menu Applications. Allez dans la catégorie Visualization & Display et installez Dynamic Gauge (par exemple).

Sélectionnez le data source (le feed) et nommez l’application. Ensuite, cliquez sur Save and continue. Et enfin, Complete installation.

Retournez sur l’accueil à l’aide du menu Sensboard, et hop, votre jauge est prête à être alimentée !

Tuto7

Alimentation d’un feed

Pour alimenter un feed, il suffit (ce qui est un bien grand mot) d’effectuer une requête HTTP sur l’adresse suivante avec la méthode POST : http://api.sen.se/events/?sense_key=[sense_key]en ayant pris soin de remplacer [sense_key] par votre clé personnelle, en envoyant la chaine suivante représentant un objet JSON :

{
 "feed_id": [ID DE VOTRE FEED],
 "value" : [LA VALEUR DE VOTRE FEED]
 }

Si vous ne savez pas comment récupérer cette clé, une fois connecté, dirigez-vous sur votre nom d’utilisateur en haut à droite de la page et cliquez dessus.
Ensuite, choisissez Profile & Settings, puis le menu à gauche API Key!

Voici un petit exemple avec un script nodejs permettant d’envoyer des infos récupérées sur une zipabox.

Exemple d’envoi avec une Zipabox

  1. Aller sur le site http://nodejs.org/
  2. Télécharger la version appropriée pour ton système (Linux/Windows/MacOS) 32 ou 64bits
  3. Installer nodejs
  4. Une fois installé, créer un dossier zipabox vous voulez (de préférence sous c:\ ou à la racine du disque choisi)
  5. Ouvrir une commande msdos (Menu démarrer -> exécuter -> cmd puis entrée)
  6. se rendre dans le dossier créé au dessus
     cd c:\zipabox

    taper la commande suivante pour installer les modules zipabox et open.sen.se :

    npm install zipabox open.sen.se

    Ce qui aura pour effet d’installer les 2 packages

  7. Sans fermer la commande msdos, dans le dossier c:\zipabox, créer un fichier nommé test.js (ou autrement) avec l’explorateur du système d’exploitation
  8. Editer ce fichier à l’aide d’un éditeur (notepad par exemple) et coller le code suivant ou le télécharger ici :
     function writelog(line){
    
     console.log(line);
    
     }var colors = require('colors');
    
     var zipabox = require("zipabox");zipabox.showlog = true;
    
     zipabox.username = "[ZIPABOX LOGIN]";
    
     zipabox.password = "[ZIPABOX PASSWORD]";var opensense = require("open.sen.se");
    
     opensense.sense_key = "[API Key open.sen.se]";
    
     opensense.showlog = false;zipabox.events.OnAfterConnect = function(){
    
     writelog("OnAfterConnect");
    
     zipabox.LoadDevices();
    
     }zipabox.events.OnAfterLoadDevice = function(device){
    
     function CollectValuesForFeeds(uuid,attr,value){
    
     if (zipabox_device_link_feed[uuid]){
    
     if (zipabox_device_link_feed[uuid].attributes[attr]){
    
     writelog("Collecting device value for feeding...".yellow);
    
     if (!isNaN(parseFloat(value)))
    
     value = parseFloat(value).toFixed(2);opensense.feeds[zipabox_device_link_feed[uuid].attributes[attr].feed_id] = {"value": value};
    
     }
    
     }
    
     }
    
     writelog("" + device);
    
     for (var uuid in device.json){
    
     var devicejson = device.json[uuid];
    
     for (var attr in devicejson.attributes){
    
     var attribute = devicejson.attributes[attr];
    
     CollectValuesForFeeds(uuid,attr,attribute.value);
    
     }
    
     }
    
     }
    
     zipabox.events.OnAfterLoadDevices = function(){
    
     writelog("OnAfterLoadDevices!!!");
    
     opensense.sendfeeds();
    
     }opensense.events.OnBeforeSendFeed = function(feed){
    
     writelog("Sending Feed : " + (""+feed.json.feed_id).yellow.bold + " value : " + feed.json.value.bold);
    
     }opensense.events.OnAfterSendFeed = function(feed){
    
     writelog("Feed sended : " + (""+feed.json.feed_id).yellow.bold + " value : " + feed.json.value.bold);
    
     }
    
     opensense.events.OnAfterSendFeeds = function(){
    
     zipabox.Disconnect();
    
     }var zipabox_device_link_feed = {
    
     /* TEMPERATURE */
    
     "[UUID MODULE ZIPABOX]" : {
    
     attributes: {
    
     [ID ATTRIBUT MODULE ZIPABOX]: { feed_id: [FEED_ID] }
    
     }
    
     }
    
     };zipabox.Connect();
  9. Modifier [ZIPABOX LOGIN] avec le login de la zipabox
  10. Modifier [ZIPABOX PASSWORD] avec le mot de passe
  11. Modifier [API Key open.sen.se] avec la clé précédemment récupérée
  12. Modifier [UUID ZIPABOX] avec l’UUID du composant à relever
  13. Modifier [ID ATTRIBUT MODULE ZIPABOX] avec le numéro de l’attribut du module à envoyer
  14. Enregistrer le fichier
  15. retourner dans la commande msdos
  16. taper la commande suivante :
    node test.js (ou le nom donné au fichier)

Voilà ! À chaque fois que vous exécuterez ce script avec la dernière commande, la valeur de l’attribut [ID ATTRIBUT MODULE ZIPABOX] composant de la Zipabox portant l'[UUID ZIPABOX] saisi sera envoyé!

Conclusion

Open.sen.se est un outil très intéressant et très utile… à condition de savoir bien alimenter le service. Pour ma part, après avoir développé ma petite interface, il m’a été très instructif : consommation électrique, connaitre le nombre de fois où ma chaudière à fioul se déclenche et sur combien de temps ! En effet, pour cette dernière information, en connaissant la durée de fonctionnement et la taille du gicleur (permettant l’alimentation en fioul) de ma chaudière, j’ai pu calculer ma consommation de carburant en temps réel !

Tuto8
Uniquement pour schématiser, les valeurs ne sont pas représentatives

Je pense toutefois qu’il manque de l’ergonomie au site et une application smartphone/tablette qui serait du plus bel effet sur la cheminée!

N’hésitez-pas à me poser vos questions si vous n’avez pas tout compris, car cela reste tout de même assez compliqué!

source

  1. Salut julien. Super tuto, je vais enfin pouvoir m’y mettre depuis le temps.

    Dommage que ma zipa soit de nouveau en rade…
    Je vais tester en utilisant la netatmo.
    Fred.

    1. Salut Fred!

      Tiens nous au courant!

      Pour ta zipabox, elle n’est plus sous garantie? Si elle l’est encore, je te conseil de la faire changer, quitte à tout reprogrammer, car depuis le début, tu as des ennuies!

      Tiens nous au jus!

  2. Bonsoir
    Top ce blog comme DAB 🙂
    Si il vous reste des invitations je suis intéressé pour tester ce service.
    Cordialement

    1. Salut Pixel166!

      Merci pour le compliment!

      J’ai le même problème depuis chez moi, alors qu’à mon travail, pas de soucis. Je pense que cela vient d’un problème DNS qui ne résout pas l’adresse open.sen.se correctement.

      Essai en mettant l’adresse IP comme ceci : http://46.4.10.208...

      Et tiens moi si possible au courant!

      @+

      1. Effectivement, ca fonctionne. Et le plus étonnant, c’est que en réalité, ça ne marchait pas uniquement dans Firefox. c’était OK dans Chrome !

  3. bonjour,

    Merci pour le tuto, je voudrais bien le mettre en pratique, mais je n’ai pas de compte open.sen.se…

    Si quelqu’un veux bien me parainer.

    Merci d’avance.
    Cordialement.

    1. Salut Dodutils!

      Effectivement, c’est possible! il suffit alors d’envoyer un objet sous cette forme :

      {
      « feed_id »: [ID DE VOTRE FEED],
      « value » : [LA VALEUR DE VOTRE FEED],
      « timetag »: »2013-01-28T09:11:00.000+00:00″
      }

      En outre, tu peux envoyer un tableau de valeurs comme ceci :

      [
      {
      « feed_id »: [ID DE VOTRE FEED],
      « value » : [LA VALEUR DE VOTRE FEED],
      « timetag »: »2013-01-28T09:11:00.000+00:00″
      }
      ,
      {
      « feed_id »: [ID DE VOTRE FEED],
      « value » : [LA VALEUR DE VOTRE FEED],
      « timetag »: »2013-01-28T09:11:00.000+00:00″
      }
      ,
      {
      « feed_id »: [ID DE VOTRE FEED],
      « value » : [LA VALEUR DE VOTRE FEED],
      « timetag »: »2013-01-28T09:11:00.000+00:00″
      }
      ]

      Je m’occupe de ton compte tout de suite! Surveilles tes mails!

      1. J’ai un historique depuis 2008 de 9 sondes de températures toutes les minutes soit 9 x 2.500.000 données à importer actuellement stockées 50MB MySQL ou 9 x 40Mo par fichier RRDTool … bon ok je vais peut-être pas écrouler leur serveur tout de suite 😉

        1. Effectivement, ça fait quelques données! Il y a d’autres solutions que tu pourrais mettre en local, sous réserve de faire un peu de prog que ton serviteur, moi-même, à déjà bien avancé! On se ré contact plus tard!

          1. Pour l’instant je graph avec HighCharts ouRRDTool mais j’aime bien voir ce qui existe autour.

            Il faut que je teste aussi avec la librairie enVision qui ressemble un peu à HighCharts.

          2. C’est tout à fait ça! C’est HighChart! Avec la possibilité de créer tes pages en local et intégrer les graphiques Open.sen.se à l’intérieur!

          3. Essaie enVision ça ressemble à du highcharts en plus léger et toujours avec ce truc que j’adore qui permet d’adapter ton échelle de temps et t’y déplacer via une barre de défilement.

          4. C’est justement ce j’ai aimé dans HighCharts mais comme je le trouve un poil surdimensionné pour mon usage, j’ai cherché la même chose en plus léger et enVision semble répondre à ce besoin de légèreté, maintenant à voir s’il est aussi bien maintenu que HighCharts.

  4. Bonjour,
    S’avez-vous s’il est possible de configurer un graphique sous forme d’histogramme de manière à afficher une consommation d’eau ou de gaz quotidienne en litre ou m3 ?

    1. Bonjour Thierry,

      oui, sans aucun soucis! C’est ce qui est décrit lors du choix du type de valeur!

      Et pour l’affichage, c’est en étape 5, lors du choix de l’application, il faut choisir dans Visualization & Display => MultiViz et choisir le type d’affichage « Column ».

      J’espère avoir été assez clair!

      1. Merci pour ta réponse (que je viens de voir).
        J’aimerais bien tester cela. Tu as la possibilité d’inviter des personnes ?

  5. Salut à Tous,

    Hyper intéressé pour remonter plusieurs courbes dans le même graph 😉 ce que je n’arrive pas à faire sur Xively… Je Cherches un parrain …
    Si quelqu’un veux bien se donner la peine 😉

    D’avance merci

    1. Bonjour HTM,

      Effectivement, ça serait le plus simple. Mais la Zipabox peut-elle envoyer l’état de son capteur sans abonnement payant? Je ne crois pas, à moins qu’ils n’aient fait une modif ces derniers temps, ce qui m’étonnerais. Et d’autre part, il y aura peut-être un problème de longueur d’URL. Mais si tu as la solution, n’hésites pas à la publier en commentaire!

  6. Bonjour, bine le tuto, justement je cherche à faire des graphe de température pour ma box zipato, l’option chart intégrée est payante chez eux, de même l’utilisation des règles avec requète HTTP nepermet pas d’envoyer de variables, sauf si on paye pour avoir l’option… again …!!!
    J’ai déjà utilisé thingSpeak + python, mais leurs graphes sont limités et beaucoup moins beaux.
    Si une âme charitable pouvait me parrainer, j’en serais ravi 🙂
    Merci

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.