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 +.
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.
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 ».
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.
- Rendre les images transparentes pour pouvoir les superposer.
- Déverrouiller le calque en cliquant sur le cadenas dans l’onglet « Calques ».
- Choisir « Produit » dans la liste déroulante du mode de fusion.
- 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.
- 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.
- 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 .
- 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 ».
- 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. 🙂
- 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.
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 ».
- 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 ».
- Aller dans :
- Copier les images avec un simple glisser déposer.
- Cliquer sur OK pour valider.
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 ».
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.
- Aller sur : https://github.com/jeedom/core/tree/stable/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).
- Faire « Clique droit » et « Copier ».
- Retourner dans Jeedom et coller le code dans la fenêtre noire.
- Sauvegarder.
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.
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 :
‘<i class= »icon jeedom-lumiere-on »></i>’$('.cmd[data-cmd_id=#id#] .iconCmd').empty().append(
);
- 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.
- Chercher la ligne :
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.
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.
- 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 ».
- Pour simplifier les choses, donner un nom proche pour chacun des fichiers.
- 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 ».
- Modifier le nom des fichiers « On » et « Off ».
- Chercher la ligne :
‘<img src= »plugins/widget/core/images/Widget_Bedside_ON.png »>’$('.cmd[data-cmd_id=#id#] .iconCmd').empty().append(
);
- Remplacer simplement « Bedside » par « MiDesk ».
- Modifier aussi le chemin pour l’image de l’état « Off ».
- Chercher la ligne :
- Sauvegarder.
- Copier les images du nouveau widget dans le répertoire images de Jeedom.
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.
Un petit coup de pinceau et votre image s’allume. 😉
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. 🙂
Top et merci de prendre le temps de faire ces tutos
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 !) ?
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.
Bonjour,
Je n’ai pas les droits pour copier dans le répertoire.
Comment procédez-vous pour les donner ?
Merci d’avance.
Bonjour,
Il faut ajouter les droits au dossier, j’ai ajouté la marche à suivre.
https://domotique.guillaumebraillon.fr/widget-personnalise/#Copier_les_images_dans_Jeedom
Bonjour,
Que faut il mettre dans propriété pour ajouter les droits SVP ?
Merci encore
Bonjour,
Comme sur l’image pour donner les droits en lecture écriture.
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
Bonjour,
Il doit y avoir un problème mais la je n’ai pas assez d’information pour le régler.
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
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>
center>
< script> code>
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.
Bonjour,
Question bête, pourquoi ne pas remettre le script fonctionnel plutôt que de laisser comme ça ?
William
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).
Bonjour Guillaume,
Pourtant, si j’applique à la lettre le script, cela ne fonctionne pas. En tous cas sur Jeedom smart.
Que je récupère https://github.com/jeedom/core/blob/beta/core/template/dashboard/cmd.action.other.light.html
Cordialement,
William
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.
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,
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.
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
Bonjour,
qu’est ce qui ne marche pas ?
Le widget ne s’affiche pas ? l’action ne fonctionne pas ? Il y a le widget on et off ?
J’ai mis a jour le lien vers le code :
https://github.com/jeedom/core/blob/stable/core/template/dashboard/cmd.action.other.light.html
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
Bravo pour cette précision, ce tuto et le temps passé.
Bonne continuation