Si vous avez trouvé une faute d’orthographe, veuillez nous en informer en sélectionnant le texte en question et en appuyant sur Ctrl + Entrée . (140 caractères max). L’envoi est anonyme.

Pour ce tutoriel, nous allons voir comment créer un widget personnalisé pour Jeedom, dans le but de créer des boutons représentant l’appareil à contrôler, en remplaçant l’icone par défaut proposé par Jeedom, par une image personnalisée.

Le tutoriel se base sur un bouton « On / Off » que nous appliquerons à la nouvelle lampe Xiaomi Mijia bedside Lamp Wifi. La technique sera la même pour personnaliser d’autres types d’appareils.

Un débutant devrait pouvoir réussir ce tuto sans trop de difficultés, en suivant bien les étapes les unes après les autres.

Pour la réalisation du tutoriel, je vous fournis les images de la lampe Xiaomi Mijia bedside déjà retouchées, mais si vous voulez créer vos propres images, un logiciel de retouche type Photoshop sera nécessaire.

Ce tutoriel est basé sur le nouveau système de mise à jour des widgets et donc compatible avec Jeedom 3.0 et +.

Lampe éteinte et lampe allumé.
Lampe éteinte et lampe allumée.

La nouvelle lampe Xiaomi Mijia Bedside Lamp WiFi remplace le modèle bluetooth que je vous avais présenté dans l’article Lampe de chevet Bluetooth Xiaomi Yeelight. Elle est 100% compatible Jeedom, grâce au plugin Xiaomi home.

Xiaomi Mijia Bedside Lamp WiFi - EU PLUG
Xiaomi Mijia Bedside Lamp WiFi – EU PLUG

Préparation des images pour le Widget

Le principe de base est d’avoir 2 images, l’une représentant l’état allumé et l’autre l’état éteint. Il est important qu’elles soient superposables. Donc, de taille identique, avec de préférence un fond transparent, pour avoir l’impression que c’est l’image qui s’allume et non une autre image qui la remplace.

Pour simplifier le tutoriel, vous pouvez télécharger les images pour la lampe Xiaomi Mijia Bedside.

Récupération des images

Si vous avez déjà des images remplissant les critères vus plus haut, vous pouvez aller directement à la partie Création du Widget pour Jeedom

  • Rechercher une images, exemple : https://xiaomi-mi.com.
  • Sélectionner une première image représentant la lampe allumée.
  • Faire clique droit sur l’image puis « Enregistrer l’image sous… ».
  • Saisir un nom, exemple : « Widget_Bedside_ON.jpg ».
  • Recommencer l’opération pour une seconde image représentant la lampe éteinte.
  • Saisir un nom, exemple : « Widget_Bedside_OFF.jpg ».Xiaomi Mijia Bedside Lamp WiFi - EU PLUG

Modifier l’image dans Photoshop

Afin d’avoir 2 images parfaitement superposables, j’utilise des fonctions très simples de Photoshop qui peuvent être réalisées avec d’autres logiciels de retouche d’image. Chaque manipulation est détaillé pas à pas d’ou la longueur du paragraphe.

  • Ouvrir dans Photoshop les 2 images précédemment téléchargées .
  • Ajuster la taille des images pour qu’elles soient identiques.
    • Aller dans « Image ».
    • Puis dans « Taille de l’image ».
    • Saisir la même taille pour les 2 images.

Taille de l'image photoshop

  • Rendre les images transparentes pour pouvoir les superposer.
    • Déverrouiller le calque en cliquant sur le cadenas dans l’onglet « Calques ».Déverrouiller le calque
    • Choisir « Produit » dans la liste déroulante du mode de fusion.Choisir "Produit"
    • Choisir l’outil « Baguette magique ».
    • Sélectionner le fond blanc autour de la lampe. Si besoin ajuster la « Tolérance » et utiliser l’outil « Gomme ».
    • Supprimer la sélection avec la touche « Suppr » ou « Edition / Effacer ».
    • Recommencez l’opération pour l’autre image.Baguette magique
  • Superposer les images
    • Sélectionner une des images. « CTRL+A » ou « Sélection / Tout sélectionner ».
    • Copier l’image. « CTRL + C » ou « Edition / Copier ».
    • Aller sur l’autre image.
    • Coller l’image.  « CTRL + V » ou « Edition / Coller ».
    • Un second calque est créé avec l’image collée.second calque
    • Cliquer sur un des calques.
    • Faire « CTRL + T » ou « Edition / Transformation manuelle ».
    • Ajuster l’image pour que les bords se superposent parfaitement à celle en transparence .Transformation manuelle
    • Enregistrer le fichier au format PSD.
    • Saisir un nom, exemple : « Widget_Bedside.psd ».
  • Enregistrer deux images distinctes, une pour chaque état.
    • Cacher un des calques avec l’icone « Oeil ».Cacher un des calques
    • Faire « Enregistrer sous » au format PNG.
    • Saisir un nom, exemple : « Widget_Bedside_OFF.png ».
    • Afficher l’autre calque en inversant les icônes « Oeil ».
    • Faire « Enregistrer sous » au format PNG.
    • Saisir un nom, exemple : « Widget_Bedside_ON.png ».
  • Réduire la taille des images pour Jeedom.
    • Ouvrir dans Photoshop les deux fichiers au format PNG.
    • Aller dans « Image », « Taille de l’image ».
    • Saisir une taille appropriée pour Jeedom, exemple : « 96 px * 96 px ».
    • Enregistrer les fichiers.

Vous pouvez télécharger les modèles en faisant un « Clique droit » sur les images et « Enregistrer l’image sous… ».

Création du Widget pour Jeedom

Maintenant que nous avons nos images représentant chacune un état (On / Off) nous allons créer le widget Jeedom. Pour cela, il faut en premier lieu avoir installé le plugin gratuit Widget.

Si ce n’est pas le cas, dans Jeedom allez dans : « Plugins / Gestions des plugins / Market » recherchez « Widget » cliquez sur « Installer stable » puis « D’accord » et sur « Activer ».

Copier les images dans Jeedom

 

    • Pour la

copie des images

    • dans Jeedom

deux possibilitée

    • s’offrent à vous :

      • La méthode officielle : Consiste à importer les images qui seront stockés dans un répertoire par widget. Cette méthode est assez simple d’utilisation, mais je la trouve compliquée à gérer lorsqu’on a beaucoup de widgets.
        • Il suffit de cliquer sur le bouton « Fichiers » présent dans chaque widget.
      • Ma méthode : Elle consiste à copier manuellement et à regrouper toutes les images dans un même répertoire, ce qui est beaucoup plus simple à gérer lorsqu’on commence à avoir beaucoup de widgets et en plus, les chemins vers les images sont toujours les mêmes.
        • Pour cela j’utilise « WinSCP » qui permet d’avoir un explorateur de fichiers pour Jeedom, je trouve cette méthode simple et efficace et ça, j’aime bien. 🙂

Si vous voulez utiliser la méthode officielle allez directement au paragraphe suivant, Ajouter un Widget personnalisé à Jeedom.

      • Télécharger, installer, ouvrir WinSCP :
      • Protocole de fichier : SFTP
      • Nom d’hôte : Ip de Jeedom
      • Numéro de port : 22
      • Nom d’utilisateur : Votre utilisateur SSH.
      • Mot de passe : Votre mot de passe SSH.
      • Connexion : Cliquez sur « Connexion ».

WinSCP 

      • Aller dans :
        •  « /var/www/html/plugins/widget/core/ »
      • Faire : clique droit « Propriétés »
        • Ajouter les droits en lecture écriture.
      • Aller dans :
        • « /var/www/html/plugins/widget/core/images ».

var/www/html/plugins/widget/core/images

      • Copier les images avec un simple glisser déposer.
      • Cliquer sur OK pour valider.Copier les images

Ajouter un Widget personnalisé à Jeedom

Il faut maintenant aller dans Jeedom et ouvrir le plugin Widget depuis « Plugins / Programmation / Widget » et nous allons créer un nouveau widget personnalisé pour Jeedom.

      • Cliquer sur « + Ajouter un widget ».
      • Saisir les paramètres.
        • Nom du widget : Bedside_Lamp
        • Version : Dashboard
        • Type : Action
        • Sous-type : Défaut
      • Cliquer sur « Ajouter ».Ajouter un Widget personnalisé Jeedom

Votre widget est créé, mais il est vierge. Il va maintenant falloir lui ajouter du code pour qu’il fonctionne, c’est a dire, afficher la bonne image en fonction de l’état de la commande « On/Off ». Pour cela, on va récupérer un exemple de code officiel pour un widget destiné à la gestion de la lumière sur le Github de Jeedom.

A ce stade vous avez créé un widget identique au widget light par défaut, vous pouvez voir le résultat dans l’aperçu en haut à droite.  l’aperçu en haut à droit.

Nous allons le modifier pour qu’il affiche les images que nous avons copié précédemment dans le répertoire images de Jeedom. Il suffit de donner le chemin des images pour l’état « On » et pour l’état « Off ».

Attention : Si vous utilisez la méthode officielle en ajoutant les images en cliquant sur le bouton « Fichiers », il faudra saisir les chemins correspondants.

      • Chercher la ligne :
        • $('.cmd[data-cmd_id=#id#] .iconCmd').empty().append(‘<i class= »icon jeedom-lumiere-on »></i>’);
      • Remplacer :
        • <i class= »icon jeedom-lumiere-on »></i>
        • par le chemin de l’image correspondant à l’état « On ».
        • <img src="plugins/widget/core/images/Widget_Bedside_ON.png">
      • Recommencer l’opération en remplacent :
        • <i class="icon jeedom-lumiere-off"></i> 
        • par le chemin de l’image correspondant à l’état « Off ».
        • <img src="plugins/widget/core/images/Widget_Bedside_OFF.png">
      • Sauvegarder.<img src="plugins/widget/core/images/Widget_Bedside_OFF.png">

Associer le Widget personnalisé à une commande Jeedom

Il ne reste plus qu’à associer le widget aux commandes « On » et « Off » de la lampe Xiaomi Mijia Bedside.

      • Cliquer en haut à droite sur « Appliquer sur des commandes ».
      • Rechercher les commandes à l’aide des filtres si besoin.
      • Cocher les cases à gauche des commandes « On » et « Off ».
      • Valider.
      • Sauvegarder.Associer le Widget personnalisé à une commande Jeedom

Dupliquer un Widget personnalisé dans Jeedom

Maintenant que vous avez créé votre premier Widget personnalisé pour Jeedom, vous pouvez le dupliquer pour créer facilement d’autres widgets.

Exemple pour la lampe de bureau
Exemple pour la lampe de bureau Xiaomi Mijia Desk Lamp.
      • Copier les images du nouveau widget dans le répertoire images de Jeedom.
        • Pour simplifier les choses, donner un nom proche pour chacun des fichiers.
          • « Widget_Bedside_ON.png » devient « Widget_MiDesk_ON.png ».
      • Dupliquer le widget depuis le plugin Widget.
        • Cliquer sur le widget à dupliquer.
        • Cliquer sur le bouton « Dupliquer ».
        • Saisir les paramètres.
          • Nom du widget : MiDesk_Lamp
          • Version : Dashboard
          • Type : Action
          • Sous-type : Défaut
        • Cliquer sur « Ajouter ».Dupliquer
      • Modifier le nom des fichiers « On » et « Off ».
        • Chercher la ligne :
          • $('.cmd[data-cmd_id=#id#] .iconCmd').empty().append(‘<img src= »plugins/widget/core/images/Widget_Bedside_ON.png »>’);
        • Remplacer simplement « Bedside » par « MiDesk ».
        • Modifier aussi le chemin pour l’image de l’état « Off ».
      • Sauvegarder.Modifier le nom des fichiers

Conclusion

J’espère que ce tutoriel vous aura permis de vous familiariser avec les Widgets pour que vous puissiez facilement personnaliser l’affichage de Jeedom.

Cet article n’est pas très long à lire, [rt_reading_time] minutes. Il y a beaucoup d’étapes détaillées pas à pas, mais au fond, c’est assez simple à réaliser.

J’utilise cette technique depuis le passage de Jeedom en version 3.2, car les anciens widgets ne fonctionnent plus, ils se dédoublent à chaque action.

N’hésitez pas à chercher des sources d’images sur les sites des constructeurs, par exemple les notices Ikea sont très pratiques pour créer des images comme la lampe BAROMETER.BAROMETER off

Un petit coup de pinceau et votre image s’allume. 😉BAROMETER on

 

 Prise allumé, prise éteinte.
Prise allumée, prise éteinte.

Sinon en prenant une image couleur et en la transformant en noir et blanc, vous pouvez facilement avoir une image superposable avec les 2 états.

Si vous avez des idées de déclinaisons, d’optimisations, ou des remarques, n’hésitez pas à laisser un commentaire et si cet article vous a intéressé notez le. 🙂

Laisser un commentaire

Ce site est protégé par reCAPTCHA et le GooglePolitique de confidentialité etConditions d'utilisation appliquer.

Cet article a 21 commentaires

  1. titi007

    Top et merci de prendre le temps de faire ces tutos

  2. titi007

    c’est étrange, je n’ai pas les droits pour copier sous le répertoire /var/www/html/plugins/widget/core/images !

    je vais faire le gourmand mais comment fait-on pour intégrer les valeurs dans l’image (comme pour les compteurs !) ?

    1. Guillaume Braillon

      Bonjour,
      Tu peux donner les droits depuis winscp ou en SSH.
      Pour les widgets plus poussé tu peux reprendre d’autres modèles sur le GitHub de jeedom et dans la documentation il y a les variables à ajouter pour les valeurs.
      Bon courage.

  3. ciril

    Bonjour,

    Je n’ai pas les droits pour copier dans le répertoire.
    Comment procédez-vous pour les donner ?
    Merci d’avance.

      1. ciril

        Bonjour,

        Que faut il mettre dans propriété pour ajouter les droits SVP ?

        Merci encore

        1. Guillaume Braillon

          Bonjour,
          Comme sur l’image pour donner les droits en lecture écriture.

  4. gusmaroli

    bonjour si j’ai bien compris on un seul bouton on/off qui s’allume quand on clic dessus car j’ai que le on mais pas le off et sa change pas d’etat
    Cldt

    1. Guillaume

      Bonjour,
      Il doit y avoir un problème mais la je n’ai pas assez d’information pour le régler.

  5. gusmaroli

    Bonjour,
    voici le code du widget crée ,j’ai bien suivi le tuto mais sa marche pas

    #valueName#

    jeedom.cmd.update['#id#'] = function(_options){
    if (_options.display_value == '1' || _options.display_value == 1 || _options.display_value == '99' || _options.display_value == 99 || _options.display_value == 'on') {
    if (jeedom.cmd.normalizeName('#name#') == 'on') {
    $('.cmd[data-cmd_id=#id#]').hide();
    }else{
    $('.cmd[data-cmd_id=#id#]').show();
    $('.cmd[data-cmd_id=#id#] .iconCmd').empty().append('');
    }
    } else {
    if (jeedom.cmd.normalizeName('#name#') == 'off') {
    $('.cmd[data-cmd_id=#id#]').hide();
    }else{
    $('.cmd[data-cmd_id=#id#]').show();
    $('.cmd[data-cmd_id=#id#] .iconCmd').empty().append('');
    }
    }
    }
    jeedom.cmd.update['#id#']({display_value:'#state#'});
    $('.cmd[data-cmd_uid=#uid#] .iconCmd').off().on('click', function () {
    jeedom.cmd.execute({id: '#id#'});
    });

    Cldt

    1. Guillaume

      Bonjour,
      Il manque des informations pour que ca fonctionne.
      Au debut il faut des balises :
      #valueName#
      Doit ressembler à :
      < div style="width:70px;min-height:80px;" class="cmd tooltips cmd-widget cursor" data-type="action" data-subtype="other" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#">
      < center>
      < div style="font-weight: bold;font-size : 12px;#hideCmdName#">#valueName#< /div>
      < span style="font-size: 2.5em;font-weight: bold;margin-top: 5px;" class="iconCmd">< /span>

      < script>

      Pour les lignes modifiés il manque les liens vers les images :
      $('.cmd[data-cmd_id=#id#] .iconCmd').empty().append('');
      Il faut écrire :
      $('.cmd[data-cmd_id=#id#] .iconCmd').empty().append('< img src = "plugins/widget/core/images/NOM_DE_L_IMAGE">');

      Voila un exemple de code :
      < div style="width:70px;min-height:80px;" class="cmd tooltips cmd-widget cursor" data-type="action" data-subtype="other" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#">
      < center>
      < div style="font-weight: bold;font-size : 12px;#hideCmdName#">#valueName#< /div>
      < span style="font-size: 2.5em;font-weight: bold;margin-top: 5px;" class="iconCmd">< /span>
      < /center>
      < script>
      jeedom.cmd.update['#id#'] = function(_options){
      if (_options.display_value == '1' || _options.display_value == 1 || _options.display_value == '99' || _options.display_value == 99 || _options.display_value == 'on') {
      if (jeedom.cmd.normalizeName('#name#') == 'on') {
      $('.cmd[data-cmd_id=#id#]').hide();
      }else{
      $('.cmd[data-cmd_id=#id#]').show();
      $('.cmd[data-cmd_id=#id#] .iconCmd').empty().append('< img src = "plugins/widget/core/images/Widget_Bedside_ON.png">');
      }
      } else {
      if (jeedom.cmd.normalizeName('#name#') == 'off') {
      $('.cmd[data-cmd_id=#id#]').hide();
      }else{
      $('.cmd[data-cmd_id=#id#]').show();
      $('.cmd[data-cmd_id=#id#] .iconCmd').empty().append('< img src = "plugins/widget/core/images/Widget_Bedside_OFF.png">');
      }
      }
      }
      jeedom.cmd.update['#id#']({display_value:'#state#'});
      $('.cmd[data-cmd_uid=#uid#] .iconCmd').off().on('click', function () {
      jeedom.cmd.execute({id: '#id#'});
      });
      < /script>
      < /div>

      N’hésite pas si tu as d'autres questions.
      Guillaume.

      PS : Pour copier du code il faut mettre des espaces devant les balises pour qu'elles ne soient pas interprétées.

  6. William

    Bonjour,

    Question bête, pourquoi ne pas remettre le script fonctionnel plutôt que de laisser comme ça ?

    William

    1. Guillaume

      Bonjour,
      Si vous avez bien lu le script fonctionnel est a récupérer directement sur le GitHub de jeedom comme indiqué dans le tuto :
      […] on va récupérer un exemple de code officiel pour un widget destiné à la gestion de la lumière sur le Github de Jeedom.

      Aller sur : https://github.com/jeedom/core/tree/beta/core/template/dashboard.
      Chercher et cliquer sur cmd.action.other.light.html.
      Sélectionner le code qui ce trouve dans la fenêtre. (Les lignes avec des numéros).

        1. Guillaume

          Bonjour,
          qu’est ce qui ne fonctionne pas ?

          Pour essayé vous pouvez :
          1) copier le script récupéré sur le Github de Jeedom
          2) sans modifications du script, tester le nouveau widget.
          3)Si ça marche faire la modification si ça ne marche pas c’est que le problème est ailleurs.

          bon courage.

  7. GUILLAUME

    Bonjour,

    Merci pour toutes ces infos, cela m’a été bien utile.
    J’aimerai savoir s’il est possible d’actionner le changement d’état en cliquant directement sur le widget (sans on/off) ? ou bien je doit passer par un virtuel ?
    L’idée c’est de cliquer sur le widget et des manières interactive il change de couleur et prend la valeur « on » si le dernier état est « off » et vis versa.

    Cordialement,

    1. Guillaume

      Bonjour,
      Je ne suis pas sur de comprendre la question car c’est déjà le cas. Lorsque tu cliques sur le widget il change d’état et actionne la commande correspondante, il n’y a pas de bouton On OFF à cliquer car c’est le widget qui prend la place des commandes on et off.

      Par exemple sur cette image on voit l’état allumé ou l’état éteint.
      https://domotique.guillaumebraillon.fr/wp-content/uploads/2018/04/creation-widget-jeedom16.png

      N’hésite pas a préciser ta question si besoin.

  8. Anthony

    Bonsoir,

    J’avais suivi se tuto mais pour moi ça ne marche plus.

    Mon jeedom est a jour.
    J’utilise une.lampe yeelight
    Le code a copier n’est plus dispo sur le github.

    Quand j’essaie avec d’autre code fourni sur le forum jeedom.

    J’ai changé la commande allumé et éteindre par On Off, j’ai essayé par on off et ON OFF après la commande status est en binaire.

    Ai je loupé quelque chose ? Ça doit être une bêtise mais je trouve pas depuis deux jours a écumé le forum jeedom

    Si tu as la solution je suis preneur.

    Merci d’avance

  9. Anthony

    Je viens de trouver mon problème depuis un virtuel en y allant étape par étape.

    D’ailleurs le mode création facile marché bien si on y met le bon virtuel

  10. bideaux

    Bravo pour cette précision, ce tuto et le temps passé.
    Bonne continuation

Les liens d’affiliation vers les partenaires nous permettent de recevoir du matériel gratuit afin de proposer plus de tests. Nous refusons les partenaires qui ne nous laissent pas dire ce que nous voulons dans les articles. Les commissions perçues sont réutilisées pour l’achat de matériel et l’entretien du site.
Merci de soutenir les sites amateurs et indépendants !

Merci à ceux qui ont contribué.

Fermer le menu

Rapport de faute d’orthographe

Le texte suivant sera envoyé à nos rédacteurs :