Changer couleur action dans un virtuel chauffage

Bonjour,
Je m’excuse par avance si le sujet a déjà été traité mais je tourne en rond depuis plusieurs jours sur ce que je veux et les fils de disucssion qui l’ont traité sont depuis clos ou je n’y arrive pas.
Assez récent sur Jeedom, j’apprends vite mais là je coince…
Je suis sur Jeedom 4.3.21.

Voilà ma demande :
Je cherche à changer la couleur des modes chauffage dans un virtuel quand je clique dessus, en passant si possible par les fonctions classiques à savoir (Cmd action, cmd info et widget)…
Mon souhait est simple, icone verte pour le mode actif, les autres grisées (et vice versa)
J’ai réussi avec l’éclairage mais le coté binaire (éteint 0, allumé 1 que je récupère dans l’état) m’a paru plus simple pour faire mon virtuel avec changement de l’état quand je clique sur l’Ampoule.

Voici en j’en suis, si quelqu’un peut m’apporter son aide :

1 : J’utilise des modules fil pilote pour mes radiateurs auquel j’ai couplé le plugin thermostat pour gérer l’automatisation.
2 : Souhaitant regrouper différentes infos, j’ai donc créer un virtuel qui regroupe ce dont j’ai besoin:


3: J’ai créer 3 modes (Confort, Nuit, Hors-Gel) en commande action qui, quand je clique dessus, change bien l’état du mode sélectionné (« confort »), le thermostat (20°c) et l’état du RAD (image flamme).
4: J’ai crée pour ce faire 3 Widget action pour chaque mode mais déjà là je pense me tromper car selon moi il n’y a pas de On/Off mais j’ai plusieurs On (Confort, Nuit, etc…) et éventuellement un Off (Hors-Gel):


Du coup, pour l’instant, mes 3 icones modes sont vertes.
Je pense que je me trompe déjà ici…
5 : Ensuite, j’ai donc crée un widget info comme ceci :

Partant du principe que si mon état répond à une valeur, l’icone change en vert mais comment indiquer s’il n’y réponds pas, pour passer l’icone en gris. Je pense que je me trompe aussi dans cette voie…?
6 : Enfin, coté commande du plugin, voici ce que j’ai rentré :

J’ai crée une info mode qui récupère l’état du mode, jusque là tout va bien.
J’ai ensuite crée 3 actions qui récupèrent les actions du plugin thermostat.
Et puis… pas de changement de couleur.
J’ai essayé pas mal de choses en modifiant les paramètres des commandes (retour valeur, etc…) mais rien ne fonctionne.
Bien sur, si je mets mon widget info mode pour la commande info mode, j’ai un retour du mode qui apparait bien (voir virtuel à droite) mais c’est pas ce que je veux.

J’espère avoir été clair et désolé si la demande a déjà été traité plusieurs fois, je bug et suis sur que la résolution n’est pas très compliquée :slight_smile:
Merci et belle semaine.

ELA

Bonsoir,

Je vais tenter de répondre, on va commencer par la commande info (5)

Etant donné que l’état reflète le mode, il faut que tu ajoute les autres modes possible :

#value# == 'Off' → Résultat : icone off
#value# == 'Aucun' → Résultat : icone forcage

ou creer un nouveau test et faire l’inverse :
#value# != 'Hors-Gel' && #value# != 'Confort' && #value# != 'Nuit' → Résultat : mon icone

Et si tu préfère faire une condition plus générique, commence par mettre dans le tout 1er tests un truc toujours valide :
1 == 1 → mon icone par défaut si je ne suis dans aucune des conditions.

Car le widget ne retient que la dernière condition valide.

Pour la (4) c’est plus complexe, il faut je pense passer par un widget code custom.

Hello,

Merci pour ton retour et ton aide.
En fait, je n’ai pas de mode Off. Je suis, quoi qu’il en soit, forcément dans un mode actif, même en hors-gel. Hormis le mode « Aucun » qui apparait quand je modifie mon thermostat manuellement, et que ça ne réponds pas à la consigne d’un mode.
Je ne suis pas sur que la solution se trouve de ce coté là.

Pour autant, ca m’a fait réfléchir à une autre voie mais ca ne fonctionne pas :
J’ai crée une widget info par mode comme ceci (me confirmes tu que le "!’ avant le « = » formule bien la différence ?)
Aussi, voici ce que j’ai :


En créant donc une commande info dans le virtuel avec ce widget, je suppose que : si valeur « confort » ok => icone vert, sinon, icone grise.
J’affecte cette commande à ma commande action « confort », en retour d’état. Ma reflexion est elle bonne ?
Je ne comprends du coup pas pourquoi, malgré le mode nuit sélectionné, j’ai toujours l’affichage dans le virtuel de l’icone « confort » verte…

Pour le widget code custom… heu… pas assez compétant pour cela.
J’ai tenté de suivre le proposition de @kaktusatomik dans le fil suivant :Changer couleur après une action - #4 par Clem.Lep
Mais c’est pour modifier le plugin thermostat d’une part, et dans tous les cas, ca n’a pas fonctionné pour moi.

Merci.
ELA

Pourtant avec le plugin thermostat, la commande Off est créé automatiquement.

Si si je te confirme que pour appliquer un widget info / Multistate, il te faut lister tous les mode possible, ou passer par

Je te confirme que =! = différent de

Bon je pense qu’il faut reprendre du début. Tu as besoin de 2 widgets.

  • 1 Widget info/Autre Multistate. qui reflètera le mode sélectionné.
  • 1 widget code. qui reflètera aussi le mode sélectionné mais en plus sera aussi actionnable.

Avant tous reprenons ton virtuel :

En (1), il te faut lier les commandes Action a ta commande Info , sans ceci un widget action n’aura aucune possibilité de connaitre l’état actuel.

En (2), Pas besoin de cette partie qui peut-être supprimé.

Maintenant la création du widget Info/Autre Multistate :

Ton widget d’origine correspond bien a cette partie

Il te faudra juste ajouté les modes manquant, comme déja cité précédemment.

Ensuite le widget Action il te faudra utiliser un widget code car dans les widget du core (Action/Défaut) il n’est pas possible de faire des condition d’affichage sur un texte, du moins pas sur ce genre de retour (Confort …) mais que sur du ouvert/fermer…

Je te propose ce widget code :

<div class="cmd cmd-widget cursor" data-type="action" data-subtype="other" data-template="tmplicon" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
  <!--
    Widget name : cmd.action.other.iconThermostat
    Auteur : Phpvarious
    Version : 19/12/2023 07h20
    Community : https://community.jeedom.com/t/changer-couleur-action-dans-un-virtuel-chauffage/117594
  -->
  <div class="title #hide_name#">
    <div  class="cmdName">#valueName#</div>
  </div>
  <div class="content-sm ">
    <span class="iconCmd"></span>
  </div>
  <template>
    <div>iconeOn : icone affiché si l'état correspond au nom de la commande Action [ défaut : fa fa-check icon_green]</div>
    <div>iconeOff : icone affiché si l'état ne correspond pas au nom de la commande Action [ défaut : fas fa-times icon_red]</div>
  </template>
  
  <script>
    var iconeOn#id# = 'fa fa-check icon_green'
    var iconeOff#id# = 'fas fa-times icon_red'
    if ('#iconeOn#' != '#'+'iconeOn#') iconeOn#id# = '#iconeOn#'
    if ('#iconeOff#' != '#'+'iconeOff#') iconeOff#id# = '#iconeOff#'
    jeedom.cmd.addUpdateFunction('#id#',function(_options) {
      if (is_object(cmd = document.querySelector('.cmd[data-cmd_uid="#uid#"]'))) {
        if ('#name#' == _options.value) {
          cmd.querySelector('.iconCmd').innerHTML = '<i class="' + iconeOn#id# + '"></i>'
        }
        else {
          cmd.querySelector('.iconCmd').innerHTML = '<i class="' + iconeOff#id# + '"></i>'
        }
      }
    });
    
    jeedom.cmd.refreshValue([{cmd_id :'#id#',value: '#state#', display_value: '#state#', valueDate: '#valueDate#', collectDate: '#collectDate#', alertLevel: '#alertLevel#', unit: '#unite#'}])

    document.querySelector('.cmd[data-cmd_uid=#uid#] .iconCmd').addEventListener('click', function() {
      jeedom.cmd.execute({ id: '#id#' })
    })
  </script>
</div>

Il est a appliquer sur toute les commandes actions, le nom de chaque commande action devra bien correspondre au nom du mode (ce qui semble être bon dans ton virtuel).

Ensuite pour chaque commande tu ajoute 2 paramètre optionnel (exemple pour le Confort) :

Merci à toi @Phpvarious !
Ca fonctionne parfaitement et c’est exactement ce que je cherchais.

Si je peux profiter une dernière fois de tes compétences avant de valider la solution (merci encore :slight_smile: ) :
Après plusieurs test, je ne comprends finalement pas l’intérêt du widget info multistate dans ce cas là ? Ni d’inscrire tous les modes (car je ne vais jamais chercher le mode off et l’icone que j’ai affecté au test n’apparaitra donc jamais), ni meme du test qu’il réalise tout court.
Partant bien entendu du principe que je n’affiche pas le mode dans mon virtuel évidemment.
Je te dis ça car en mettant ma commande info mode dans mon virtuel en défaut (et non widget info chauffage), ca fonctionne parfaitement.


Sauf erreur de ma part (ce qui est fort possible), les paramètres optionnels du widget action couplé à ton widget code semble suffire à réaliser ce que je cherche.
Je suis preneur de tes lumières mais dans tous les cas, merci pour l’aide apportée car c’est exactement ce dont j’avais besoin pour affiner mon virtuel.

Merci à toi
Edouard.

Vu que maintenant tu as des commande action qui reflète l’état réel du mode en cours, je dirait qu’il n’y a aucun intérêt d’avoir aussi la commande info.
En revanche, si par exemple tu change la consigne manuellement, le mode renverra Aucun, hors tu n’a aucune commande action qui reflètera cet état, tu sera donc avec 3 commande action qui ne sont pas activé, ce qui peut porter a confusion sur l’état actuel réel.

Merci à toi. C’est très clair. Je vais encore paufiner ce virtuel mais ton aide m’a été bien précieuse.
Belle semaine.
ELA

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.