..:: Domotique Store : Le Blog ::..
eeDomus Guides et Tutoriels Nouveautés Tous les articles

Le store eedomus et ses incroyables fonctionnalités

Le store eedomus et ses incroyables fonctionnalités

Le 5 septembre 2017, eedomus a introduit dans une de ses mises à jour une nouvelle fonctionnalité appelée « Le store ». Dans cet article, nous allons découvrir toutes les possibilités qu’il offre et comment l’utiliser de A à Z pour que vous puissiez vous aussi participer et proposez vos propres périphériques !

Présentation

Qu’est ce que le store eedomus ?

Le store eedomus est un lieu communautaire de partage des réalisations de la communauté eedomus. Il est ouvert à tout le monde pour que chaque utilisateur puisse proposer son objet connecté. Les objets sont codés sous formes de scripts PHP et de chaines Json.

Il évoluera au fur et a mesure des mises à jour et permettra d’accueillir des périphériques indispensables qui n’existent pas encore de manière physique !

Accès au store

Pour accéder au store eedomus, rien de plus simple. Il suffit de vous rendre dans « Ajouter ou supprimer un périphérique« .

Tout en bas dans « Autres types de périphériques » vous trouverez « Store eedomus« .

Et vous arrivez sur la page des différents Plugins. Ils sont rangés par catégories (Météo, Utilitaires..) et ils sont créés par la communauté ! Nous verrons un peu plus tard comment créer son propre plugin.

Pour tester le bon fonctionnement du store et voir comment paramétrer les périphériques, nous allons en tester un qui s’appel « Va-t-il pleuvoir dans l’heure ? ». C’est un plugin relativement simple qui permet, comme son nom l’indique, de savoir si il va pleuvoir dans l’heure. Lorsque vous cliquez dessus, différentes informations apparaissent.

Vous avez le nom, la description, le créateur de plugin, le nombre de téléchargement, la date ou encore la version. En cliquant sur cette dernière, vous avez possibilité de télécharger les fichiers directement sur votre ordinateur et de voir le code, de le modifier etc… Pour créer le nouveau périphérique, il vous suffit de cliquer sur « Créer ».

La page de création est identique à celle d’un nouveau périphérique. Vous pouvez renseignez le nom, la pièce et des infos utilisateurs.

Dans la partie « Affichage« , vous trouverez les paramètres du plugin qu’il faut remplir pour le faire fonctionner. Dans notre exemple, il suffit de rentrer le code de sa ville (disponible sur le site météo correspondant).

Une fois le code rentré et votre périphérique créé, rendez-vous dans la pièce où il a été enregistré pour consulter les informations. Vous pouvez constater que le module nous affiches les données et qu’il ne va pas pleuvoir chez nous. Quelle chance !

Données du plugin
Données du plugin

Il s’agit d’un exemple simple mais efficace puisqu’il permet de comprendre la façon dont les périphériques provenant du store fonctionnent !

Mais comme je l’ai dit plus haut, il est possible de créer son propre plugin en fonction de ses besoins et de le partager à la communauté eedomus ! C’est un peu technique et nécessite des connaissances en développement, mais c’est à la portée de tous.

Et c’est ce que nous allons voir dans le prochain chapitre 🙂

Créer un plugin

Prérequis

Pour créer son plugin sur le store eedomus, il faut prendre en compte un certains nombre d’informations.

  • Le code accepté est uniquement du PHP. Toutes les fonctions existantes en PHP ne seront pas disponibles et de nouvelles sont mises en place par l’équipe eedomus.
  • La structure est très précise :
    • 1 Fichier JSON portant le nom « eedomus_plugin.json« qui permet de définir les paramètres du périphérique.
    • 0 ou plusieurs Scripts PHP.
    • 0 ou plusieurs images au format PNG en 128×128 enregistré dans un dossier /img.
  • Les fichiers doivent être dans un dossier au format .zip

Voici un exemple de la racine du fichier :

Structure du Zip
Structure du Zip

Vous pourrez bien évidemment retrouver toutes les informations de la documentation eedomus pour le store ici et pour les scripts php .

Début du projet

Pour ce tutoriel, nous allons réaliser un script permettant de faire varier l’intensité lumineuse d’une lampe dimmable progressivement à l’aide d’une télécommande à 4 boutons (On, Off, + et – ). Ainsi, les touches ON / OFF permettront d’allumer et éteindre la lampes de manière classique mais les deux autres touches (+ et -) permettront quant à elles d’augmenter ou de diminuer l’intensité lumineuse de 10 à chaque appui sur la touche.

Et oui, car dans beaucoup de cas, il faut paramétrer un bouton pour chaque valeur, et une télécommande 10 boutons ce n’est pas très pratique ! C’est pourquoi ce script tout simple permettra d’incrémenter les valeurs avec seulement 2 boutons dédiés.

Grâce à une simple télécommande à 4 boutons, nous pourrons gérer l’intensité complète d’une lampe ! Vous êtes prêts ? C’est parti !

Création du Json

Commençons par la construction du Json. Chaque ligne sera commenté pour indiqué à quoi elle correspond et plus particulièrement dans le cas de notre script. Vous pouvez également allez sur la doc eedomus pour avoir des informations complémentaires.

La première partie du Json ce sont les informations du périphériques.

{    
    "plugin_id": "light_inc",                     // Identifiant Unique de notre périphérique
    "name_fr": "Incrémentation de la luminosité", // Nom du périphérique sur le store FR
    "name_en": "Light incrementation",            // Nom du périphérique sur le store EN
    "icon": "light_inc.png",                      // Icone du périphérique sur le store (celle dans le dossier img dans notre cas)
    "version": "1.0"                           // La version de notre plugin
    "creation_date": "2017-12-06",                // La date de création du plugin
    "modification_date": "2017-12-08",            // La date de mise à jour du plugin

    "author": "Planète domotique"// L'auteur du périphérique avec possibilité d'ajouter un lien type HTML
    "description_fr": "Description en français"// Description FR du périphérique dans le store
    "description_en": "Description en Anglais"// Description EN du périphérique dans le store 

Maintenant nous allons définir les paramètres qui serviront à notre script. Ils permettent de créer des « champs » dans lesquels les utilisateurs viendront renseigner les informations permettant de faire fonctionner le plugin avec leurs appareils. Ils peuvent donc être modifiés en fonction de votre script PHP pour faciliter la gestion des données et la saisis des utilisateurs.

    "parameters": [        

     // Le paramètre n°1 sera un lien de contact pour proposer des modifications/améliorations  
     
     {                    
        "parameter": "help_url"// L'identifiant de notre paramètre             
        "description": "Pour signaler un bug ou proposer une amélioration",   // La description associé à ce paramètre                 
        "xtype": "displayfield",                                              // Le type de paramètre, Displayfield = Champ         
        "field": 
               "style: 'padding: 3px;',                                       // On peut ajouter des styles aux fields
                value: '<a href=\\'mailto:email\\'>Contacter nous</a>'"       // Le contenu du field       
     },
    // Le paramètre n°2 sera le périphérique que l'on veut modifier (lampe). 
       Une liste sera présentée à l'utilisateur pour qu'il sélectionne 
       parmi tous les périphériques présents sur sa box. Cela évite d'avoir
       à chercher le code API du périphérique.

     {                    
        "parameter": "ID_PERIPH",                   // L'identifiant UNIQUE du périphérique que l'on veut contrôler. On le ciblera avec ce nom dans le script PHP.              
        "description": "Périphérique à contrôler" // La description affichée pour ce paramètre. Pour bien orienter l'utilisateur         
        "xtype": "combo",                           // "Combo" définit le type de paramètre en liste déroulante.
        "field":                                    // Le contenu de la liste déroulante avec des paramètres spécifiques
           "store : getCombo('/json/list_all.php'), // Permet de lister l'ensemble des périphériques présents sur la box dans la liste combo
            displayField: 'label', 
            valueField: 'id',                       // Affiche l'ID des périphériques
            typeAhead: true, 
            forceSelection: true, 
            triggerAction: 'all', 
            selectOnFocus: true, 
            editable: false,                        // Contenu non éditable, non modifiable
            shadow : true, 
            mode: 'local',                          // Choix du mode Local
            width: 250,                             // Largeur du champ 
            listWidth: 300,                         // Largeur de la liste
            allowBlank: false                     // Oblige l'utilisateur à renseigner une valeur  
     },     

    // Le paramètre n°3 sera le périphérique qui contrôlera la lampe (télécommande). 
       Une liste sera également présentée à l'utilisateur

       Nous utilisons les mêmes paramètres que le paramètre précédent mais nous
       modifions l'identifiant pour qu'il soit unique.

    {                    
        "parameter": "ID_PERIPH_CTRL",               // On n'oublie pas de modifier l'identifiant !               
        "description": "Périphérique contrôleur",    // Et la description aussi !                
        "xtype": "combo",                    
        "field": "store : getCombo('/json/list_all.php'), displayField: 'label', valueField: 'id', typeAhead: true, forceSelection: true, triggerAction: 'all', selectOnFocus: true, editable: false, shadow:true, mode: 'local', width: 250, listWidth: 300, allowBlank: false"        
     },        


    // Le paramètre n°4 permettra d'attribuer les bonnes touches de l'utilisateur. 
       Comme elles sont propres à chaque paramétrage de télécommande, 
       il est impératif de pouvoir rendre dynamique le script.

       Par exemple si dans les paramètres de votre télécommande
       la valeur de votre touche + = 40, - = 10, ON = 20 et off = 30 
       Alors il faudra renseigner les informations dans ce champ 
       sous la forme : 40,10,20,30.

     {                   
        "parameter": "COMMANDE",                    // Identifiant unique à bien changer !                 
        "description": "Valeur de +, -, on, off de votre télécommande (dans cet ordre)",                    
        "xtype": "textfield",                       // Champ pouvant être modifié par l'utilisateur                 
        "default_value": "0,1,2,3",                   
        "field": "width:200, allowBlank:false"      // Rend la variable obligatoire                  
     }
   ],   

Maintenant que nous avons défini les paramètres qui seront utilisés dans le script, nous pouvons cibler notre script comme cela :

    "scripts": [        
     {            
        "name": "light_inc.php"        // Le nom du ou des scripts php associés
     }    
   ],    

Il est très important de définir le bon type de périphérique que prendra votre plugin pour qu’il puisse être utilisé de la bonne façon.

    "devices": [       
     {            
        "device_id": "light_incrementation", // Identifiant unique de l'appareil
        "module_id": "41",                   // Type de module, dans notre cas 41 pour Actionneur HTTP
        "type": "http"// Pas d'autre choix pour le moment
        "name_fr": "plugin.name",            // Le nom que prendra le périphérique sera celui que l'utilisateur saisira    
        "icon": "light_inc.png",             // L'image sera celle de notre dossier /img  
        "utilisation_id": "43",              // 43 définira le type de module comme autre.
        "parameters": {                      // Les paramètres de notre périphérique.
            "value_type": "string",          // Valeur de type chaîne de caractères         
            "ignore_errors": 3,              // A 3, il ignore jusqu'à 3 erreurs  
  

            // Définit la variable 1 sur les informations entrées par l'utilisateur,
               dans notre cas les valeurs de sa télécommande car on cible "COMMANDE".     
            "VAR1": "plugin.parameters.COMMANDE",  

            // Définit la variable 2 sur les informations entrées par l'utilisateur 
                dans notre cas le périphérique à contrôler car on cible "ID_PERIPH"        
            "VAR2": "plugin.parameters.ID_PERIPH",       

            // Définit la variable 3 sur les informations entrées par l'utilisateur 
             dans notre cas le périphérique contrôleur car on cible "ID_PERIPH_CTRL"  
            "VAR3": "plugin.parameters.ID_PERIPH_CTRL",          
      

            // L'URL de la requête de mise à jour avec l'insertion des variables de l'utilisateur en ciblant via les ID uniques
            "RAW_URL": "https://localhost/script/?exec=light_inc.php&ID_PERIPH=[VAR2]&ID_PERIPH_CTRL=[VAR3]&COMMANDE=[VAR1]", 
  
             
            "RAW_XPATH": "/root"// Le Xpath
            "POLLING": "0"         // A 0 = Pas de rafraîchissement automatique.                         
        }        
     }    
  ],    

Et pour finir, une fonction présente depuis peu, la possibilité de créer une règle automatique dès la création du périphérique. Pour notre script, nous voulons qu’à chaque appui sur la télécommande il soit rechargé.

    "rules": [      
     {        
        "name_fr": "plugin.name",   // Nom de la règle = nom saisi par l'utilisateur   
        "criterias" // Les critères de la règle
          [         

            // Le périphérique contrôleur (ID_PERIPH_CTRL) aura comme critère "Change d'état"
            { "device_id": "plugin.parameters.ID_PERIPH_CTRL", "type": "c" }    
    
          ],        
        "actions":                  // L'action qui aura lieu sera le rechargement du script  
          [          

            // Notre périphérique créé (ciblé par son ID) sera mis à jour.
            { "device_id": "plugin.devices.light_incrementation", "action": "update" }   
     
          ]      
     }   
    ]
}


Maintenant que le Json est créé, place au script PHP ! Rien de très compliqué pour notre exemple.

Création du script PHP

Pour le PHP, certaines fonctions sont mises à disposition dans la documentation eedomus. Je vous invite à aller regarder si vous voulez en savoir plus.
Commençons le script !

Dans un premier temps, il faut penser à récupérer les variables saisies par l’utilisateur et que nous avons identifié dans le Json. Pour ce faire, rien de plus simple

<?php

// Permet de récupérer le code API de l'appareil à contrôler 
   qui est entré par l'utilisateur dans la liste déroulante du JSon. 
   On le cible avec son identifiant qui est "ID_PERIPH" 
   avec la fonction getArg fournis par l'équipe eedomus.
   Mandatory = true signifie que cette variable est obligatoire.
$periph_id = getArg("ID_PERIPH", $mandatory = true);

// On fait pareil pour le périphérique contrôleur
$periph_id_ctrl = getArg("ID_PERIPH_CTRL", $mandatory = true);

Pour les commandes du contrôleur, c’est un peu plus compliqué. L’utilisateur a renseigné des informations dans un seul champ et séparé par des virgules « , ». Il va donc falloir récupérer les 4 valeurs en supprimant les virgules.

$remote_all = getArg("COMMANDE", $mandatory = true); // Recupération de la chaîne saisie par l'utilisateur en ciblant l'ID
$remote_explode = explode(",", $remote_all);         // On sépare la chaîne en un tableau avec la fonction explode.

// On assigne les valeurs de la chaines récupéré sous la forme d'un tableau
$remote_more = $remote_explode[0]; // Première valeur du tableau  = +
$remote_less = $remote_explode[1]; // Deuxième valeur du tableau  = -
$remote_on   = $remote_explode[2]; // Troisième valeur du tableau = On
$remote_off  = $remote_explode[3]; // Quatrième valeur du tableau = Off

Maintenant que nous savons quels sont les périphériques que l’utilisateur veut utiliser, nous pouvons récupérer leur état. Dans le cas de la télécommande, nous allons récupérer la touche appuyée et pour la lampe sa valeur d’intensité.

Ensuite, la chaîne Json récupérée doit être décodée pour être exploitée. Pour ce faire, nous allons utiliser une fonction :

// Pour le premier périphérique
// On récupère la valeur du périphérique à contrôler avec l'API eedomus en le ciblant dynamiquement avec la variable
$url = "https://api.eedomus.com/get?action=periph.value&periph_id=".$periph_id;
// Permet de décoder le json et d'éxécuter une requête HTTP pour retourner le résultat sous forme de chaine de caractère.
$periph_list = sdk_json_decode(utf8_encode(httpQuery($url,'GET')));
// Retourne la dernière valeur du périphérique
$last_value = $periph_list["body"]["last_value"];


// Pour l'autre périphérique, c'est la même chose
$url_ctrl = "https://api.eedomus.com/get?action=periph.value&periph_id=".$periph_id_ctrl;
$periph_list_ctrl = sdk_json_decode(utf8_encode(httpQuery($url_ctrl,'GET')));
$last_value_ctrl = $periph_list_ctrl["body"]["last_value"];

Pour pouvoir incrémenter de manière dynamique les valeurs d’intensité de la lampe (Augmenter de +10 à chaque appui à partir de la dernière valeur) il est important de stocker la dernière valeur de la lampe quelque part pour la réutiliser. Des fonctions sont présentes et nous permettent de le faire très rapidement.

$sauvegarde = saveVariable('save_variable', $last_value); // On stocke la dernière valeur d'intensité de la lampe
$valeur_sauvee = loadVariable('save_variable');           // On charge la charge dans une nouvelle variable.

Maintenant que toutes nos variables sont définies, nous pouvons créer les conditions permettant de monter ou de baisser l’intensité en fonction du bouton appuyé sur la télécommande.

Commençons par définir les cas :

  • L’utilisateur appuie sur la touche +
// Si la dernière valeur de la lampe est supérieure ou égale à 0 et 
   qu'elle est plus petite ou égale à 90
   Et que la touche appuyée est "+", alors la dernière valeur de la lampe augmente de 10.
if($last_value >= 0 && $last_value <= 90 && $last_value_ctrl == $remote_more){
 setValue($periph_id, $valeur_sauvee +10);
}
  • L’utilisateur appuie sur la touche +
// Si la dernière valeur de la lampe est supérieure ou égale à 10 et 
 qu'elle est plus petite ou égale à 100
 Et que la touche appuyée est "-", alors la dernière valeur de la lampe augmente de 10.
if($last_value >= 10 && $last_value <= 100 && $last_value_ctrl == $remote_less){
 setValue($periph_id, $valeur_sauvee -10);
}
  • L’utilisateur appuie sur la touche On
// Si l'utilisateur appui sur ON, alors la lampe passe à 100%.
if($last_value_ctrl == $remote_on){
 setValue($periph_id, 100);
}
  • L’utilisateur appuie sur la touche Off
// Si l'utilisateur appui sur Off, alors la lampe passe à 0%.
if($last_value_ctrl == $remote_on){
 setValue($periph_id, 0);
}

Notre script est maintenant terminé ! On peut également afficher un XML à chaque fois que la requête est executée pour faciliter la lecture des données.

$xml = "                                      // On créé le XML
<data>
  <valueCtrl>$last_value_ctrl</valueCtrl>
  <valuePeriph>$last_value</valuePeriph>
  <valueSave>$valeur_sauvee</valueSave>
  <more>$remote_more</more>
  <less>$remote_less</less>
  <on>$remote_on</on>
  <off>$remote_off</off>
</data>";
sdk_header('text/xml');
echo $xml;                                   // On affiche le XML

Voilà, tout est fini. Maintenant nous allons voir comment utiliser ce plugin et surtout comment le mettre en ligne pour que la communauté puisse en profiter.

Mettre son plugin en ligne

Pour partager votre nouveau périphérique fraîchement créé avec toute la communauté eedomus, c’est très simple. Rendez-vous dans l’onglet « Ajouter ou supprimer un périphérique » et dans « Store eedomus« .

En haut à droite vous avez « Publiez sur le store », c’est ici que ça se passe.

Publiez sur le store
Publiez sur le store

Un bouton pour télécharger vos fichiers sur votre box eedomus apparaît. Sélectionnez le fichier .zip sur votre ordinateur et envoyez-le.

Une fois envoyé, il y a deux options :

  • Le fichier n’est pas conforme et vous devez modifier des éléments
  • Votre fichier est conforme et vous pouvez retourner sur le store eedomus
  • Dans ce cas vous trouverez votre création dans la rubrique « Autre » en mode privé. Cela signifie que vous pouvez le tester et que vous seule êtes capable de le voir. Il pourra, si vous le validez, être soumis à vérification pour une mise en ligne.

    En cliquant dessus, vous aurez les informations rentrées dans le JSON comme la date, la version, l’auteur etc.. Le bouton « créer » permet de l’ajouter en tant que périphérique.

    A l’intérieur vous pourrez le configurer comme n’importe quel périphérique mais encore une fois, en fonction de votre JSON. Comme vous le constatez, les champs à remplir sont soit une liste déroulante, soit un champ de saisie pour les valeurs de la télécommande. Une fois que la configuration est bonne, cliquez sur enregistrer.

    En vous rendant dans les règles associées, vous pouvez voir qu’une règle à automatiquement été créée.

    Règle automatique
    Règle automatique

    A l’intérieur, nous avons bien les paramètres rentrés dans le JSON.

    Il ne reste plus qu’à tester notre script !

    Résultat

    Voici ce qu’il se passe à chaque appui sur la touche + ou – :

    La lampe garde son ancienne valeur et ajoute ou soustrait 10 afin d’adapter la luminosité.

    Pour ceux qui voudraient ce script sans avoir à le coder, il sera disponible sur le store eedomus très prochainement !

    Conclusion

    Le store eedomus est un incroyable marché ! Vous pouvez trouver beaucoup de choses pour répondre à vos besoins. Vous avez également la possibilité de proposer vos propres scripts pour aider les utilisateurs qui ont des besoins mais pas les connaissances nécessaires.

    C’est un formidable outil qui permet à eedomus de prendre une longueur d’avance sur ses concurrentes ! Bien qu’il soit jeune durant les phases de tests, le store risque d’évoluer très rapidement vers quelques choses de très puissant !

    0
    0
    Lucas

    Je suis Lucas, un jeune motion designer & développeur web. J'ai rejoint l'équipe Planète-domotique pour approfondir mes connaissances dans le milieu des objets connectés et particulièrement ceux de la domotique. J'utilise mes compétences pour gérer la communauté du site au travers du Blog et des Réseaux Sociaux. Je m'occupe également du marketing de la boutique en créant les opérations promotionnelles et les différents visuels Mon objectif est d'écrire des articles clairs et utiles pour aider la communauté à comprendre et utiliser les objets connectés liés à la domotique en toute simplicité

    Laisser un commentaire