Yop,
Je cherche à afficher la valeur d’une commande info dans la div eqlogictab.
Donc un plugin, des équipement, on clic sur un équipement on arrive sur son nom, parent etc…
Cet équipement a des commandes infos et j’aimerai en afficher qqlune.
Je pourrai les récuperer en php, mais comment je peux savoir quel est l’id ou autre de cet eqlogic ?
Pas de soucis pour afficher des params de configuration bien sur.
D’ailleurs, il faudrai que j’affiche certaines infos, en fonction de la configuration ‹ type › de l’eqlogic.
data-l1key=« configuration » data-l2key=« type » => çà fonctionne mais comment faire un test du genre if (type == ‹ bibi ›) … ?
Javascript, onchange et du show/hide en fonction de ta valeur type
En effet j’ai fini par penser à ça, je regarderai demain.
Tu aurais un exemple ? Notamment comment dans la fonction JavaScript récupère les cmd infos qu’on veut ?
Merci
j’ai çà qui fonctionne:
$('.eqLogicAttr[data-l1key=configuration][data-l2key=type]').on('change',function(){
type = $(this).value()
if (type == 'bobo')
{
$("span[data-cmd_id='Firmware']").html('bibi')
$("div[data-cmd_id='Firmware']").show()
}
});
çà affiche bien bibi, mais je ne vois pas comment récuperer les valeurs de commandes.
Ou alors il faut les récuperer avant en php et les écrire dans des tags ??
Ou alors au lieu du type, je prend l’id de l’eqlogic, et dans le js, je fais un appel ajax qui me renvoit toutes les données dont j’ai besoin ?
un peu usine un gaz non ?
Bon effectivement comme çà j’y arrive.
Est-ce la bonne méthode ?
Salut,
je ne sais pas si c’est le mieux mais j’ai fait ca dans mon js :
function printEqLogic(_eqLogic) {
if (_eqLogic.configuration.type == 'Thermostat')
{
$('.thermostat').show();
$('.manager').hide();
}
else if (_eqLogic.configuration.type == 'Manager')
{
$('.manager').show();
$('.thermostat').hide();
}
$('#div_actuators').empty();
$('#div_modes').empty();
if (isset(_eqLogic.configuration)) {
if (isset(_eqLogic.configuration.childActuators)) {
for (var i in _eqLogic.configuration.childActuators) {
addActuator(_eqLogic.configuration.childActuators[i],'{{Actionneur}}',$('#div_actuators'));
}
}
}
if (isset(_eqLogic.configuration.modes)) {
for (var i in _eqLogic.configuration.modes) {
addMode(_eqLogic.configuration.modes[i],$('#div_modes'));
}
}
}
et j’ai les div qui vont bien dans le php
A+
Si je ne me trompe pas, là tu affiche des valeurs de configuration. Et je n’ai pas trouver comment accéder aux valeurs des commandes de l’eqlogic depuis javascript.
Avec l’appel ajax çà marche très bien.
Ah oui désole, je n’avais bien cerné ta demande.
Tant pis comme tu as trouvé c’est pg.
A+
Je le faisais avant dans certains plugins. Et bien en « grugeant », c’est à dire qu’à chaque event de valeur sur une info, j’enregistrait aussi dans un configuration::value l’info, du coup c’est dans l’objet disponible via l’ajax du core.
Quand on clique sur un équipement, jeedom fournit la représentation de l’eqLogic, mais les valeurs infos ne sont pas dedans en natif. Il faut faire un execute de la cmd (c’est ce que fait le bouton tester si tu regardes)
Alors il y a peut être moyen dans le fihicer .js d’apeller l’execute pour chaque info et l’afficher …
Mais franchement c’est lourd et surtout si ta valeur change pendant que l’utilisateur est sur la page, ca n’est pas rafraichi et donc la valeur est fausse. Je pense que c’est pour ca que loic utilise le bouton Tester.
Perso, j’en suis revenu, bouton tester partout et ca garde l’harmonie avec le core. Par contre ca pourrait être à proposer pour la V4 que jeedom affiche la valeur des infos sur la page et actualise cette page via le core sur changement de l’eqlogic ou ses infos liées
Oui j’ai faillit faire comme çà, un doublon de l’info en config.
Mais avec un seul appel ajax, je récupère toutes les infos dont j’ai besoin. Et c’est pages ne sont pas consultées tout les jours non plus.
Exemple, les valeurs de paramètres de température sont des infos, car on doit pouvoir les tester dans des scénarios. Par contre je ne vais pas les mettre sur le widget. Donc pour les voir, si il fallait aller sur les commandes et les tester/afficher une par une, c’est loin d’être top.
Tu as essayé la fonction addCmdToTable ?
Oui je l’utilise pour l’longlet Commandes, mais je ne les veux pas toutes.
Mais je pourrai en faire une autre en filtrant en effet, je jetterai un oeil.
Bonsoir,
Pour afficher la valeur d’une commande info et qu’elle soit automatiquement rafraîchie sur mise à jour, il suffit de définir le callback d’affichage jeedom.cmd.update[cmd_id]
dans le .js de son plugin, et le core de jeedom fait le reste
.
(c’est le callback utilisé dans les templates de commande du dashboard)
Par exemple dans la fonction addCmdToTable, le code ressemble à:
function addCmdToTable(_cmd) {
...
if (init(_cmd.type) == 'info') {
var tr = '<tr class="cmd" data-cmd_id="' + init(_cmd.id) + '">';
...
tr += '<input class="form-control input-sm" data-key="value" placeholder="{{Valeur}}" readonly=true />';
jeedom.cmd.update[_cmd.id] = function(_options) {
$('.cmd[data-cmd_id=' + _cmd.id + '] .form-control[data-key=value]').value(_options.display_value);
}
...
}
...
}
Note 1:
Si vous n’avez que des commandes infos, le if peut être enlevé.
Note 2:
Ci-dessus la valeur est affichée dans un textarea mais tout autre élément marchera.
Côté PHP, il faut sauvegarder la valeur des commandes info via les méthodes eqLogic->checkAndUpdateCmd
ou cmd->event
.
Bonsoir,
J’ai mis à jour le post précédent car il n’est finalement pas nécessaire de passer par un enregistrement de la valeur dans une variable de configuration de la commande. Il suffit de définir le callback d’affichage jeedom.cmd.update[cmd_id]
et le core fait tout le reste (initialisation et mise à jour des valeurs)
.
Ah yes j’avais pas pensé à cmd.update !! bien vue, merci !!
Encore une petite correction apportée dans le code précédent: il ne faut pas utiliser la classe cmdAttr
pour éviter d’avoir la boite de dialogue Attention vous quittez une page ayant des données modifiées non sauvegardées. Voulez-vous continuer ?