[TUTO] Icones perso avec Jmqtt, partage et sondage

Salut à tous

Je voulais pouvoir retrouver rapidement certain périphérique sous Jmqtt , mais la base d’images pour les icones d’équipements est assez light quand on utilise énormément Jmqtt.

ATTENTION BIEN FAIRE UNE SAUVEGARDE DE VOTRE JEEDOM AVANT, JE NE SERAIS PAS RESPONSABLE EN CAS DE PROBLEME.

Je suis passé de :

tuto1

à

tuto2

Pour faire cela , il faut se rendre dans :

Réglages - Système - Editeur de fichiers

Puis rechercher le répertoire image dans :

html/plugins/jMQTT/core/img

C’est ici que l’on va rajouter l’image qui nous intéresse.

Par exemple :

Je l’ai nommé comme les autres fichiers avec node_ en début.
Le plugin accepte le svg, png, bmp (mais pas de transparence avec).

Ensuite il faut se rendre dans le répertoire :

html/plugins/jMQTT/desktop/js

Editer le fichier jMQTT.global.js

Ici on va le rajouter l’aspirateur dans la liste de choix.

Rechercher :

// Array of Equipment logo descriptors
jmqtt.globals.logos = [
	{id: '', name: "{{Aucun}}", file: 'node_.svg'},
	{id: 'barometre', name: "{{Baromètre}}", file: 'node_barometre.svg'},
	{id: 'bell', name: "{{Sonnerie}}", file: 'node_bell.svg'},
	{id: 'boiteauxlettres', name: "{{Boite aux Lettres}}", file: 'node_boiteauxlettres.svg'},
	{id: 'bt', name: "{{Bluetooth}}", file: 'node_bt.svg'},

Puis insérer

{id: 'aspi', name: "{{Aspirateur}}", file: 'node_aspi.png'},

Sauvegarder le tout , puis , faire un CTRL+F5 pour rafraichir votre page jMQTT.

ATTENTION DE BIEN SAUVEGARDER VOS MODIFICATIONS SUR UN AUTRE SUPPORT, LE FICHIER EST ECRASE LORS DE MISE A JOUR.

Pour éviter de refaire le fichier à chaque mise à jour du plugin, je vous invite à cliquer sur Sauvegarder , puis Sauvegarder Sous. Valider le nouveau nom de sauvegarde (on vous proposera jMQTT.globals 1.js , moi je le conserve). Enfin de faire un glisser déposer de ce nouveau fichier dans html/backup.

Voilà simple, rapide et tellement plus parlant.
Je vais laisser le fil ouvert pour ceux qui aimerait partager leur création.
J’en ai d’autre en préparation.
Peut-être que les auteurs de ce superbe plugin les intègreront

  • Oui pour des images supplémentaires
  • Non pour des images supplémentaires
0 votant
5 « J'aime »

Belle initiative :+1::+1::+1:

Attention aussi : lors de chaque mise à jour du plugin, il faudra refaire la modification du fichier jmqtt.globals.js

Helloo,

Merci pour le tuto, une bonne astuce.

Une proposition d’évolution du plugin : ça serait possible de laisser la possibilité de créer son propre fichier de customisation pour ajouter ses propres descriptions de logos pour permettre de ne pas avoir à modifier le fichier jMQTT.global.js à chaque mise à jour ?

Au niveau du code (jMQTT.global.js), il faudrait alors concaténer les éléments d’une liste définie dans un fichier jMQTT.custom.js (non présent dans l’arborescence du plugin par défaut) à la liste par défaut présente dans jMQTT.global.js si le fichier de customisation existe. A voir si un fichier json serait plus simple à gérer (existence et chargement du fichier).

Pour l’utilisateur, il n’aurait alors qu’à rajouter ses images custom dans html/plugins/jMQTT/core/img et ses propres équipements juste une fois dans le fichier jMQTT.custom.js :slight_smile:

On aurait alors un le fichier jMQTT.custom.js du genre :

// Array of Equipment logo descriptors
jmqtt.globals.customLogos = [
	{id: 'aspi', name: "{{Aspirateur}}", file: 'node_aspi.png'},
	{id: 'unAutreEquipement', name: "{{UnAutreEquipement}}", file: 'node_un_autre_equipement.png'}
]
4 « J'aime »

J’étais justement en train de réfléchir à ce genre de choses suite au post de freeddoo, mais il y a plusieurs éléments à prendre en compte :

  • si des templates jMQTT sont générées avec une icône personnalisée, ça ne va pas forcement bien se passer lors du chargement sur un autre système,
  • j’aurais aimé garder une cohérence dans le design de jMQTT et plutôt rajouter les icônes manquantes pour certains usages dans le plugin que de permettre l’ajout d’icônes perso, mais si c’est une demande forte, on verra,
  • la table dans le fichier jmqtt.globals.js est principalement là pour que le moteur de traduction de Jeedom puisse faire son office (je ne pense pas qu’un fichier JSON importé soit traduit à la volée, mais c’est à verifier), dans tous les cas : pas besoin de traduction sur une icône perso,
  • SI les icônes perso sont supportée à l’avenir, ALORS on pourrait imaginer récupérer directement le nom de tous les fichiers perso (par exemple dans le répertoire data/icons/) et les insérer dans la liste déroulante (sans l’extension), plutôt que de faire modifier des fichiers à l’utilisateur.

En tout cas ce n’est pas un petit chantier, je préfèrerai avancer sur d’autres sujets, mais je ne ferme pas la porte, à voir selon le nombre d’utilisateurs intéressés :wink:

Bad

4 « J'aime »


node_lidlprises

node_xiaomibouton
node_xiaomicontact2

Petit partage du soir.

Moi je serais pour une évolution du plugin avec une possibilité de customisation des icones.

Salut,

Jamais trouvé l’option picotage pour faire un .png sur Photoshop :face_with_peeking_eye:
Rien de méchant hein ! :slight_smile:

Picotage ? Pas compris la.

Picotage, poinçonnage ( découpe effectuée en maternelle)

Ok c’était la seule potable que j’ai trouve. Je n’ai pas photoshop mais photofiltre , et à des années lumières de le maîtriser. Mais si il y a des doués de l’image je suis preneur. :grinning:

Bonjour à tous et désolé de déterrer le sujet :sweat_smile: Je ne retrouve pas la partie " // Array of Equipment logo descriptors " dans mon fichier jMQTT.global.js : je suppose que depuis les Maj. on modifié ceci. Existe-t-il un autre moyen de d’avoir des icones persos ?
Bonne soirée !

/* This file is part of Jeedom.
 *
 * Jeedom is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Jeedom is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Jeedom. If not, see <http://www.gnu.org/licenses/>.
 */

// TODO: Remove core4.2 backward compatibility `jeeFrontEnd` js function
//  Remove when Jeedom 4.2 is no longer supported
//  labels: workarround, core4.2, javascript

// Handle retrocompatibility of jeeFrontEnd namespace in Jeedom 4.2
if (typeof jeeFrontEnd === 'undefined') {
    jeeFrontEnd = window;
}

// TODO: Remove core4.2 backward compatibility `addUpdateFunction` js function
//  Remove when Jeedom 4.2 is no longer supported
//  labels: workarround, core4.2, javascript

// Handle retrocompatibility of addUpdateFunction function in Jeedom 4.2
if (typeof jeedom.cmd.addUpdateFunction !== 'function') {
    jeedom.cmd.addUpdateFunction = function(id, func) {
        jeedom.cmd.update[id] = func;
    }
}


// Namespace
jmqtt_globals = {};

// Array of Status Icons descriptors and selectors
jmqtt_globals.icons = {
    broker: {
        status: {
            selector: function(_eq) { var info = jmqtt.getMqttClientInfo(_eq); return (!jmqtt_globals.daemonState) ? false : info.state; },
            ok:       { icon: 'fas fa-check-circle', color: 'success', msg: '{{Connexion au Broker active}}' },
            pok:      { icon: 'fas fa-minus-circle', color: 'warning', msg: '{{Connexion au Broker en échec}}' },
            nok:      { icon: 'fas fa-times-circle', color: 'danger',  msg: '{{Connexion au Broker désactivée}}' },
            false:    { icon: 'fas fa-times-circle', color: 'danger',  msg: "{{Démon non démarré}}" }
        },
        visible: {
            selector: function(_eq) { return _eq.isVisible == '1'; },
            true:     { icon: 'fas fa-eye',       color: 'success', msg: '{{Broker visible}}' },
            false:    { icon: 'fas fa-eye-slash', color: 'warning', msg: '{{Broker masqué}}' }
        },
        learning: {
            selector: function(_eq) { return _eq.cache.realtime_mode == '1'; },
            true:     { icon: 'fas fa-sign-in-alt fa-rotate-90', color: 'danger',  msg: '{{Temps Réel activé}}' },
            false:    { icon: 'far fa-square',                   color: 'success', msg: '{{Temps Réel désactivé}}' }
        },
        battery: {
            selector: function(_eq) { return 'none'; },
            none:     { icon: '', color: '', msg: "" }
        },
        availability: {
            selector: function(_eq) { return 'none'; },
            none:     { icon: '', color: '', msg: "" }
        }
    },
    eqpt: {
        status: {
            selector: function(_eq) { return _eq.isEnable == '1'; },
            true:     { icon: 'fas fa-check', color: 'success', msg: '{{Activé}}' },
            false:    { icon: 'fas fa-times', color: 'danger',  msg: '{{Désactivé}}' }
        },
        visible: {
            selector: function(_eq) { return _eq.isVisible == '1'; },
            true:     { icon: 'fas fa-eye',       color: 'success', msg: '{{Visible}}' },
            false:    { icon: 'fas fa-eye-slash', color: 'warning', msg: '{{Masqué}}' }
        },
        learning: {
            selector: function(_eq) { return _eq.configuration.auto_add_cmd == '1'; },
            true:     { icon: 'fas fa-sign-in-alt fa-rotate-90', color: 'danger', msg: '{{Ajout auto. de commandes activé}}' },
            false:    { icon: 'far fa-square',                   color: 'success', msg: '{{Ajout auto. de commandes désactivé}}' }
        },
        battery: {
            selector: function(_eq) { return (_eq.configuration.battery_cmd == '') ? 'none' : (_eq.status.batterydanger ? 'nok' : (_eq.status.batterywarning ? 'pok' : 'ok')); },
            none:     { icon: 'fas fa-plug',            color: '',        msg: '' },
            ok:       { icon: 'fas fa-battery-full',    color: 'success', msg: '{{Batterie OK}}' },
            pok:      { icon: 'fas fa-battery-quarter', color: 'warning', msg: '{{Batterie en alarme}}' },
            nok:      { icon: 'fas fa-battery-empty',   color: 'danger',  msg: '{{Batterie en fin de vie}}' }
        },
        availability: {
            selector: function(_eq) { return (_eq.configuration.availability_cmd == '') ? 'none' : (_eq.status.warning ? 'nok' : 'ok'); },
            none:     { icon: 'far fa-bell', color: '',        msg: '' },
            ok:       { icon: 'fas fa-bell', color: 'success', msg: '{{Equipement disponible}}' },
            nok:      { icon: 'fas fa-bell', color: 'danger',  msg: '{{Equipement indisponible}}' }
        }
    }
};

// To memorise page refresh timeout when set
jmqtt_globals.refreshTimeout = null;

// To reload Real Time view
jmqtt_globals.refreshRealTime = null;
jmqtt_globals.lockRealTime = false;

// To memorise current eqLogic main subscription topic
jmqtt_globals.mainTopic = '';

// Drop zone counter
jmqtt_globals.dropzoneCpt = 0;

// Update daemon state global variable on reception of a new event (jmqtt_globals.daemonState is initialized by sendVarToJS() in jMQTT.php)
$('body').off('jMQTT::EventDaemonState').on('jMQTT::EventDaemonState', function (_event, _options) {
    jmqtt_globals.daemonState = _options;
});

Salut oui cela a été modifié.
Je regarde demain et je te dis

ici
/plugins/jMQTT/desktop/php/jmqtt_eqpt.php

Le format est le suivant :

$icons['nomdefichier']       = 'Nom de Fichier';

exemple pour mes capteurs Shelly Door Window:

$icons['shelly-Blu-door']       = 'Shelly Window Blea';

Les images sont toujours au même endroit, mais il y a une subtilité, il n’y a plus que le format svg qui est pris en compte.
Elles sont a enregistrer sous le format : node_nomdefichier.svg

exemple de mon fichier:

node_shelly-Blu-door.svg

Pour les transformer en SVG il y a plein de source sur le net

1 « J'aime »

Super merci !

Ça sert à quoi que Bad se décarcasse ? :grin: :smiley:

Capture d’écran du 2024-03-12 19-17-12

Désolé mais il est moche :sweat_smile:

2 « J'aime »

Bonjour ,

on peux aussi rester dans l’esprit de base du plugin , en ajoutant quelques couleur :

3 « J'aime »

Bonjour ,

si cela intérresse du monde voici un site ou il y a une multitude de svg gratuit , on peux changer la couleur en live et meme un éditeur intégré pour la taille …

4 « J'aime »