Inhibition d'une action virtuelle

Bonjour,

je cherche comment inhiber une action virtuelle dans un virtuel.
pour être plus précis, en fonction de l’état d’un virtuel sur un équipement, j’ai besoin d’inhiber une commande action virtuelle sur un autre équipement.

j’ai pour le moment trouvé une solution intermédiaire qui consiste à masquer ou non l’action virtuelle en utilisant la commande suivante via un bloc code du scénario :

Pour visible: cmd::byId(‹ IDduBouton ›)->setIsVisible(1)->save();
Pour Invisible: cmd::byId(‹ IDduBouton ›)->setIsVisible(0)->save();

pour rendre inactif l’action virtuelle, on peut vraisemblablement joué avec le paramètre display:none; en CSS.

savez-vous comment implémenter cette option dans un bloc scénario ?

Merci d’avance

Bonsoir,

est-ce un état binaire ?

c’est a dire ? est-ce que le fait que la commande ne soit plus afficher est pour toi un état inhiber ? ou faut-il aller plus loin, cad ne plus autoriser l’action sur la commande même si c’est un scénario qui en fait la demande ?

Re,
@Phpvarious :

  • non pas forcément un binaire, dans mon cas présent la variable est de type curseur.
  • quand je dis inhiber, j’entends plus accessible depuis l’écran (en gris clair, on peut clique dessus mais l’action n’est pas générée)

Dans ce cas je ne vois qu’un widget code, il faudrait que le bouton soit lié a ton info de l’autre virtuel.
tu peut faire voir a quoi ressemble actuellement ce fameux bouton ? sur quoi il agit ?

Bonjour,
Tu trouveras ci-dessous ce que je cherche à faire.

J’ai pour projet de rénover l’automatisation de mon arrosage.
Pour ce faire, j’utilise un arduino MEGA installé dans le garage et un raspberry pi (sur lequel est installé Jeedom) installé dans mon bureau.
Les équipements communiquent ensemble via le protocole MQTT.

Afin de gérer les différents mode de fonctionnement de mon arrosage (AUTO/ON et OFF), j’ai un premier équipement sur lequel je regroupe 2 actions virtuelles.

  • Une première, pour la gestion du mode de fonctionnement.
  • Et une 2ième action virtuelle « MAJ Arduino », pour la validation de l’envoi des informations « MAJ mode automatique » vers l’arduino.

Capture d’écran 2022-02-20 113817

C’est pour cette dernière action virtuelle que j’aimerai pouvoir la rendre inactive (inhibée) lorsque l’on n’est pas en mode AUTO.

Toujours pour cette dernière action virtuelle « MAJ Arduino », celle-ci est mise à jour en fonction des actions virtuelles d’un autre équipement.
Capture d’écran 2022-02-20 114212

L’idée est de transférer la mise à jour des données vers l’arduino MEGA uniquement sur action volontaire et lorsque le sélecteur de mode est sur AUTO.
Sur modification d’une des données de l’équipement « Gestion AUTO Pelouse Zone 4 », l’action virtuelle « MAJ Arduino » clignote en rouge lorsque le sélecteur de mode est sur AUTO. Les données sont transférées à l’arduino lorsque l’on clique sur l’action virtuelle « MAJ Arduino ».

Voilà mon projet :blush:

Hello je ne vois pas 50 solutions :

  • Je modifierai le widget bouton MAJ Arduino comme ceci :
    Si value == 0 → non cliquable / fixe gris. (pas en auto et pas de modif. sur Gestion Auto).
    Si value == 1 → non cliquable / clignotant rouge.(pas en auto mais modif. effectué sur Gestion Auto).
    Si value == 2 → cliquable / clignotant vert.(En auto et modif. effectué sur Gestion Auto).

Ensuite dans un scénario, gérer les états de ton virtuel Gestion Auto et Mode Pelouse, et en fonction des conditions créer un event sur l’état du bouton MAJ Arduino.

effectivement la personnalisation du widget associé au bouton « MAJ Arduino » est une solution séduisante.
mais pour le moment, mon niveau en programmation du widget ne me permet pas de le faire :sleepy:

Voici une solution que je te propose (duplique tes équipements pour tester ceci) :

Virtuel Mode Pelouse Zone 4

Je part du principe que ton widget mode envoie on->0, auto ->1, off->2.

image

Applique le widget ci-dessous sur « MAJ Arduino »

Widget
<div class="cmd #history# tooltips cmd-widget" data-type="action" data-subtype="other" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
  <template>
    <div>color0 : couleur du bouton lorsque la commande vaut 0 (défaut : #6c6c6c)</div>
    <div>color1 : couleur du bouton lorsque la commande vaut 1 (défaut : #ff0000)</div>
    <div>color2 : couleur du bouton lorsque la commande vaut 2 (défaut : #96c927)</div>
    <div>blinkingOnSpeed : vitesse de clignotement (défaut : 1s)</div>
    <div>nameText : Nom a afficher a coté du bouton.</div>
    </template>
  <center>
    <div class="roundedOne#id#" id ="roundedOne#id#">
      <div class="roundedOneCircle#id#"></div>
    </div>
    <div id="nooText#id#"></div>
  </center>
  <script type="text/javascript">
    var color0#id# = ('#color0#' != '#' + 'color0#') ? "#color0#" : '#6c6c6c';
    var color1#id# = ('#color1#' != '#' + 'color1#') ? "#color1#" : '#ff0000';
    var color2#id# = ('#color2#' != '#' + 'color2#') ? "#color2#" : '#96c927';
    var blinkingOnSpeed = ('#blinkingOnSpeed#' != '#' + 'blinkingOnSpeed#') ? "#blinkingOnSpeed#" : '1s';
    var blinkingOn = 'blinker ' + blinkingOnSpeed + ' linear infinite';
    var nameText#id# = ('#nameText#' != '#' + 'nameText#') ? "#nameText#" : '';
  
    document.documentElement.style.setProperty('--color0#id#', color0#id#);
    document.documentElement.style.setProperty('--color1#id#', color1#id#);
    document.documentElement.style.setProperty('--color2#id#', color2#id#);
    document.documentElement.style.setProperty('--blinking-on#id#', blinkingOn);
    
    jeedom.cmd.update['#id#'] = function (_options) {
      if (_options.display_value == '1' || _options.display_value == 1) {
        document.getElementById('roundedOne#id#').innerHTML = '<div class="roundedOneCircle#id# blink#id# roundedOneCircleColor1#id#" id="roundedOneCircle#id#" title="Des modifications ont été apportées sur la programmation.<br>Veuillez passer Le mode en Auto pour Maj les données"></div>';
        document.documentElement.style.setProperty('--text-color#id#', color1#id#);
      }
      else if (_options.display_value == '2' || _options.display_value == 2) {
        document.getElementById('roundedOne#id#').innerHTML = '<div class="roundedOneCircle#id# roundedOneCircleColor2#id# blink#id#" id="roundedOneCircle#id#" title="Cliquez pour Maj les données." onclick="valider#id#();"></div>';
        document.documentElement.style.setProperty('--text-color#id#', color2#id#);
      }
      else {
        document.getElementById('roundedOne#id#').innerHTML = '<div class="roundedOneCircle#id# roundedOneCircleColor0#id#" id="roundedOneCircle#id#"></div>';
        document.documentElement.style.setProperty('--text-color#id#', color0#id#);
      }
      document.getElementById('nooText#id#').style.display = (nameText#id# == '')?"none": "block";
      document.getElementById('nooText#id#').innerHTML = nameText#id#;
    }
    jeedom.cmd.update['#id#']({ display_value: '#state#' });
    function valider#id#() {
      jeedom.cmd.execute({id: '#id#'});
    }
  </script>
  <style>
    :root {
      --text-color#id#: #145b32;
      --color0#id#: #6c6c6c;
      --color1#id#: #ff0000;
      --color2#id#: #96c927;
      --border-radius#id#: 50px;
      --blinking-on#id#: 'blinker 1s linear infinite';
    }
    
    #nooText#id# {
      float: left;
      margin: 0;
      font-family: sans-serif;
      text-align: center;
      color: var(--text-color#id#);
      font-size: 16px;
      padding: 25px 0 0 0;
    }
    /* .roundedOne */
    .roundedOne#id# {
      float: left;
      width: 28px;
      height: 28px;
      position: relative;
      margin: 15px 15px;
      background: #fcfff4;
      background: linear-gradient(to bottom, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);
      border-radius: var(--border-radius#id#);
      box-shadow: inset 0px 1px 1px white, 0px 1px 3px rgba(0, 0, 0, 0.5);
    }
    .roundedOne#id#:before {
      content: '';
      width: 21px;
      height: 21px;
      position: absolute;
      left: 3px;
      top: 3.5px;
      background: linear-gradient(to bottom, #222222 0%, #45484d 100%);
      border-radius: var(--border-radius#id#);
      box-shadow: inset 0px 1px 1px rgb(0 0 0 / 50%), 0px 1px 0px white;
    }
    .roundedOneCircle#id# { 
      width: 17px;
      height: 17px;
      position: absolute;
      top: 5px;
      left: 5px;
      border-radius: var(--border-radius#id#);
      z-index: 999;
      box-shadow: inset 0px 1px 1px white, 0px 1px 3px rgb(0 0 0 / 50%);
    }
    .roundedOneCircleColor0#id#{
      background: var(--color0#id#);
    }
    .roundedOneCircleColor1#id#{
      background: var(--color1#id#);
    }
    .roundedOneCircleColor2#id#{
      background: var(--color2#id#);
      cursor: pointer;
    }
    .blink#id# {
        animation: var(--blinking-on#id#);
    }
    @-webkit-keyframes blinker {
        0% {
            opacity: 1.0;
        }

        50% {
            opacity: 0.0;
        }

        100% {
            opacity: 1.0;
        }
    }
    /* end .roundedOne */
  </style>
</div>

  1. widget existant type slider.
  2. widget bouton

Virtuel Gestion AUTO Pelouse Zone 4

J’ai simplifié les détails pour le principe :

image

Scénario

Ce Scénario est dédié que pour la gestion du bouton MAJ Ardiono :

image

  1. autant de déclencheurs que tu as d’infos dans le virtuel Gestion AUTO Pelouse Zone 4.
  2. l’état du mode Pelouse Zone 4

je suppose que tu as déja un scénario qui s’occupe de lancer la Maj de l’arduino, il te restera juste a mettre en déclencheur : #[objet][Mode Pelouse Zone 4][Etat]# == 0

1 « J'aime »

merci pour ton aide @Phpvarious :+1:.

je teste ta solution dès que je rentre à la maison (en déplacement ce début de semaine) et te redis si j’ai réussi à la mettre en oeuvre.

les éléments proposés par @Phpvarious fonctionnent parfaitement, j’ai légèrement modifié le scénario pour que cela réponde pleinement à mon besoin
merci @Phpvarious

1 « J'aime »

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