Widget affichage état binaire paramétrable

Bonjour à tous,
J’étais à la recherche d’un affichage d’un binaire gris/rouge.

Pour faire quelque chose de paramétrable, je me suis basé sur le widget Dot de @Tarlak que je me suis permis de modifier pour le rendre paramétrable.

*EDIT : /!\ Version V2.0 sur post suivant… /!*

N’étant pas un expert, le code est certainement optimisable…
quelques exemples :

EDIT : Ajout paramètre Size et effet ‹ 3D › sur bouton.
EDIT : Correctif FullSize.

code du widget :

<!--
Maj: 02/02/2025


Version  0.1 :
@Tarlak :
   Avec l'aide de Domotech pour l'amélioration css, grand merci a lui : http://youtube.com/domotech

@Silkarion
Version 1.1 :Adaptation pour ajouter de la flexibilité dans le résultat affiché
Version 1.2 : Ajout parametre Size
Version 1.3 : Correctif FullSize + BorderColorDeg

-->

<template>	

        <div></div>
        <div>** Parametres couleur **</div>
        <div>BorderColor0 : Couleur pour valeur bool à 0  (default : vert)</div>
        <div>BorderColor1 : Couleur pour valeur bool à 1 (default : rouge)</div>
        <div>BorderColorExt0 : Couleur contour exterieur pour valeur bool à 0  (default : BorderColor0)</div>
        <div>BorderColorExt1 : Couleur contour exterieur  pour valeur bool à 1 (default : BorderColor1)</div>
        <div>>> Tips : affecter #00000000 à la couleur pour une transparence !! </div>
        <div>BorderColorDeg : Couleur de dégradé (défaut : black)</div>
        <div>** Parametres forme **</div>
        <div>Radius : gestion du radius => 50% fait un rond, 0% un carré (default : 50%)</div>
        <div>FullSize : 1 pour un bouton rempli (default : 0)</div>
  		<div>Size : Taille du widget (default : 10px)</div>
        <div></div>
        <div>** Parametres clignottement **</div>
        <div>blink0 : si valeur à 1 alors la pastille clignote (default : 0)</div>
        <div>blink1 : si valeur à 1 alors la pastille clignote (default : 0)</div>
        <div></div>       
        
    </template>	

<div style="margin:0px; padding:0px;  min-width:40px; min-height:40px;" class="cmd #history# container-fluid tooltips cmd-widget netatmodisplay" data-type="info" data-version="#version#" data-eqLogic_id="#eqLogic_id#" data-subtype="other" data-cmd_id="#id#"   data-cmd_uid="#uid#">

<div class="led#id#"></div>
  
<div class="NomCmd #hide_name#">#name_display#</div>

<style>
  :root {
    --couleuractualisee#id#: #838383;
    --couleuractualisee2#id#: #838383;
    --couleuractualisee-ext#id#: #838383;
    --radius#uid#: 50%;
    --rouge: #da3037;
    --vert: #30b455;
    --gris: #838383;
    --noir: #000000;
    --transparent: #00000000;
    --couleur-degrade#uid#: #353535;
    --blanc: #ffffff;
    --offset: -5px;
    --element-size#uid#: 10px;
    --element-int-size#uid#: 3px;
  }

  @keyframes glowing {
    0% {
      box-shadow: 0 0 -10px var(--blanc);
    }

    40% {
      box-shadow: 0 0 20px var(--blanc);
    }

    60% {
      box-shadow: 0 0 20px var(--blanc);
    }

    100% {
      box-shadow: 0 0 -10px var(--blanc);
    }
  }

  @-webkit-keyframes blinker {
    from {
      opacity: 1.0;
    }

    to {
      opacity: 0.1;
    }
  }

  .led#id# {
    position: relative;
    margin: 1em;
    width: var(--element-size#uid#);
    height: var(--element-size#uid#);
    border-radius: var(--radius#uid#);
    color: #fff;
    background: var(--couleuractualisee#id#);
    line-height: var(--element-size#uid#);
    border: var(--element-int-size#uid#) solid var(--couleuractualisee#id#);
    text-align: center;
    
    
    border: 2px solid var(--couleuractualisee#id#);
    background: linear-gradient(0deg, var(--couleuractualisee2#id#), var(--couleuractualisee#id#)) !important;
    
  }

  .led#id#:after {

    content: '';
    position: absolute;
    top: var(--offset);
    bottom: var(--offset);
    left: var(--offset);
    right: var(--offset);
    border-radius: var(--radius#uid#);
    border: 2px solid var(--couleuractualisee-ext#id#);
  }

  div.NomCmd {
    font-size: 1em;
    font-weight: bold;
    position: absolute;
    vertical-align: bottom;
    top: 65%;
    left: 0%;
    z-index: 2;
    padding: 0px;
    margin: 0px;
    width: 85px;
    height: 25px;
  }
</style>
<script>
  jeedom.cmd.update['#id#'] = function(_options) {
    var cmd = $('.cmd[data-cmd_id=#id#]');
    
    var blink0#id# = ('#blink0#'   !='#'+'blink0#') ?   parseInt("#blink0#")  :0;
    
    var blink1#id# = ('#blink1#'   !='#'+'blink1#') ?   parseInt("#blink1#")  :0;
    
    var borderColor0#uid# = ('#BorderColor0#' != '#'+'BorderColor0#') ? "#BorderColor0#" : "green";
		if (borderColor0#uid# != '') {
			document.documentElement.style.setProperty('--borderColor0#uid#', borderColor0#uid#);
		} else {
			document.documentElement.style.setProperty('--borderColor0#uid#', "green");
		}
    var borderColor1#uid# = ('#BorderColor1#' != '#'+'BorderColor1#') ? "#BorderColor1#" : "red";
		if (borderColor1#uid# != '') {
			document.documentElement.style.setProperty('--borderColor1#uid#', borderColor1#uid#);
		} else {
			document.documentElement.style.setProperty('--borderColor1#uid#', "red");
		}
    var borderColorDeg#uid# = ('#BorderColorDeg#' != '#'+'BorderColorDeg#') ? "#BorderColorDeg#" : "black";
		if (borderColor1#uid# != '') {
			document.documentElement.style.setProperty('--couleuractualisee2#id#', borderColorDeg#uid#);
		} else {
			document.documentElement.style.setProperty('--couleuractualisee2#id#', "black");
		}

    var borderColorExt0#uid# = ('#BorderColorExt0#' != '#'+'BorderColorExt0#') ? "#BorderColorExt0#" : borderColor0#uid#;
		if (borderColorExt0#uid# != '') {
			document.documentElement.style.setProperty('--borderColorExt0#uid#', borderColorExt0#uid#);
		} else {
			document.documentElement.style.setProperty('--borderColorExt0#uid#', borderColor0#uid#);
		}
    var borderColorExt1#uid# = ('#BorderColorExt1#' != '#'+'BorderColorExt1#') ? "#BorderColorExt1#" : borderColor1#uid#;
		if (borderColorExt1#uid# != '') {
			document.documentElement.style.setProperty('--borderColorExt1#uid#', borderColorExt1#uid#);
		} else {
			document.documentElement.style.setProperty('--borderColorExt1#uid#', borderColor1#uid#);
		}
    
     var radius#uid# = ('#Radius#' != '#'+'Radius#') ? "#Radius#" : "50%";
		if (radius#uid# != '') {
			document.documentElement.style.setProperty('--radius#uid#', radius#uid#);
		} else {
			document.documentElement.style.setProperty('--radius#uid#', "50%");
		}

     var fullSize#id# = ('#FullSize#'   !='#'+'FullSize#') ?   parseInt("#FullSize#")  :0;
		if (fullSize#id# == 1) {
			document.documentElement.style.setProperty('--element-int-size#uid#', "8px");
		} else {
			document.documentElement.style.setProperty('--element-int-size#uid#', "3px");
		}

     var size#uid# = ('#Size#' != '#'+'Size#') ? "#Size#" : "10px";
		if (size#uid# != '') {
			document.documentElement.style.setProperty('--element-size#uid#', size#uid#);
		} else {
			document.documentElement.style.setProperty('--element-size#uid#', "10px");
		}
    
    // Récupération des valeurs
    var valeur = _options.display_value;

    
//document.documentElement.style.setProperty('--radius#id#', 'var(--borderColor0#uid#');
          
    
    
    if (valeur == 0) {
      document.documentElement.style.setProperty('--couleuractualisee#id#', 'var(--borderColor0#uid#');
      
      	if (fullSize#id# == 1) {
			document.documentElement.style.setProperty('--couleuractualisee-ext#id#', 'var(--transparent');
		} else {
			document.documentElement.style.setProperty('--couleuractualisee-ext#id#', 'var(--borderColorExt0#uid#');
		}
      
      if (blink0#id#==1)
      {
        cmd.find('.led#id#').css('animation', 'blinker 0.6s linear infinite');
      } else{
        cmd.find('.led#id#').css('animation', 'none');
      }
    } else if (valeur == 1) {
      document.documentElement.style.setProperty('--couleuractualisee#id#', 'var(--borderColor1#uid#');
      	if (fullSize#id# == 1) {
			document.documentElement.style.setProperty('--couleuractualisee-ext#id#', 'var(--transparent');
		} else {
			document.documentElement.style.setProperty('--couleuractualisee-ext#id#', 'var(--borderColorExt1#uid#');
		}
      //cmd.find('.led#id#').css('animation', 'none');
      if (blink1#id#==1)
      {
        cmd.find('.led#id#').css('animation', 'blinker 0.6s linear infinite');
      } else{
        cmd.find('.led#id#').css('animation', 'none');
      }
    }
    $('.cmd[data-cmd_id=#id#]').attr('title', 'Valeur du ' + _options.valueDate + ', collectée le ' + _options.collectDate);
  }
  jeedom.cmd.update['#id#']({
    display_value: '#state#',
    valueDate: '#valueDate#',
    collectDate: '#collectDate#',
    alertLevel: '#alertLevel#'
  });
</script>
</div>
1 « J'aime »

Bonjour à tous,
Je vous propose une révision 2.0 avec beaucoup plus de paramétrages et une refonte…
Ajout de textes, des effets paramétrables,…

Exemples :
image
Plein de possibilités avec le paramétrage suivant :

J’ai juste un problème…
Je ne réussi plus a utiliser l’effet @-webkit-keyframes blinker#id# pour donner un effet supplémentaire (effet 3).
Si quelqu’un pouvait m’aider à comprendre !

Et merci @noodom pour ton aide sur le #id# manquant :slight_smile:

<!--
Maj: 09/02/2025

_BinaryGenericDisplay

Version  0.1 :
@Tarlak :
   Avec l'aide de Domotech pour l'amélioration css, grand merci a lui : http://youtube.com/domotech

@Silkarion
Version 1.1 :Adaptation pour ajouter de la flexibilité dans le résultat affiché
Version 1.2 : Ajout parametre Size
Version 1.3 : Correctif FullSize + BorderColorDeg
Version 2.0 : Refonte et ajout de paramétrages. /!\ changement des intitulés parametres /!\

-->

<template>	

        <div></div>
        <div>** Parametres couleur **</div>
        <div>Color0 : Couleur pour valeur bool à 0  (default : vert)</div>
        <div>Color1 : Couleur pour valeur bool à 1 (default : rouge)</div>
        <div>ColorDegrade0 : Couleur de dégradé de la zone interne (défaut : Color0)</div>
  		<div>ColorDegrade1 : Couleur de dégradé de la zone interne (défaut : Color1)</div>
  		<div>  >> Tips : affecter #00000000 à la couleur pour une transparence !! </div>

        <div>** Parametres forme **</div>
        <div>SizeWidth : Largeur du widget (default : 10px)</div>  
        <div>SizeHeight : Largeur du widget (default : 10px)</div>  
        <div>Radius1 : gestion du radius => 50% fait un rond, 0% un carré (default : 50%)</div>
        <div>Radius2 : gestion du radius => 50% fait un rond, 0% un carré (default : Radius1)</div>
        <div>Radius3 : gestion du radius => 50% fait un rond, 0% un carré (default : Radius1)</div>
        <div>Radius4 : gestion du radius => 50% fait un rond, 0% un carré (default : Radius1)</div>
   
        <div>** Parametres d'estétisme **</div>
  		<div>Effect0 : 0 > sans effet ; 1 effet souffle reccurent; 2 effet souffle x1 (default : 0)</div>
        <div>Effect1 : 0 > sans effet ; 1 effet souffle reccurent; 2 effet souffle x1 (default : 0)</div>  
  		<div>EffectSpeed0 : regle la durée de l'effet 0.5s,2s,...(default : 1s)</div>        
        <div>EffectSpeed1 : regle la durée de l'effet 0.5s,2s,...(default : EffectSpeed0)</div>        

  
        <div>ExternalRing0 : Affichage anneau externe avec 1  (default : 1)</div>
        <div>ExternalRing1 : Affichage anneau externe avec 1  (default : 1)</div>
  		<div>ExternalRingColor0 : Couleur contour exterieur pour valeur bool à 0  (default : Color0)</div>
        <div>ExternalRingColor1 : Couleur contour exterieur pour valeur bool à 0  (default : Color1)</div>
        
        <div>Label0 : Texte à afficher (default : '')</div>
        <div>Label1 : Texte à afficher (default : Label0)</div>
        <div>LabelSize : Ratio du texte à afficher (default : 1.0)</div>
  		<div>LabelColor0 : Couleur du texte à afficher (default : inherit)</div>
  		<div>LabelColor1 : Couleur du texte à afficher (default : inherit)</div>
  
 		<div></div>       
  
    </template>	

<div style="margin:0px; padding:0px;  min-width:10px; min-height:10px;" 
     class="cmd #history# container-fluid tooltips cmd-widget netatmodisplay" 
     data-type="info" data-version="#version#" data-eqLogic_id="#eqLogic_id#"  
     data-subtype="other" data-cmd_id="#id#"   data-cmd_uid="#uid#">

<div class="led#uid#"></div>
  
<div class="NomCmd #hide_name#">#name_display#</div>
<!--<div class="NomCmd#uid# #hide_name#"></div>-->
<style>
  :root {
    --couleuractualisee#uid#: #838383;
    --couleuractualisee2#uid#: #838383;
    --couleuractualisee-ext#uid#: #838383;
    --radius#uid#: 50%;

    --transparent#uid#: #00000000;
    --couleur-degrade#uid#: #353535;

    --offset#uid#: -5px;
    --element-size#uid#: 10px;
    --element-int-size#uid#: 3px;
    --elementLabel#uid#: '';
    --elementLabelSize#uid#: 1.0;
    --elementLabelColor#uid#: #000000;
    
    --animation-name#uid#: glow#id#;
  }

  
/* 
@-webkit-keyframes blinker#id# {
    from { opacity: 1.0; } !important
    to   { opacity: 0.25; } !important
  }
*/
  
  
@-webkit-keyframes glow#id# {
    from { box-shadow: 0 0 10px -5px var(--couleuractualisee#uid#) !important; }
  /*  to   { box-shadow: 0 0 10px 10px var(--couleuractualisee#uid#) !important; }*/
    to   { box-shadow: 0 0 10px max(5px, calc(min(var(--element-sizeWidth#uid#), var(--element-sizeHeight#uid#))/6)) var(--couleuractualisee#uid#) !important; }
    
}

  
  .led#uid# {
   
    
    position: relative !important;
    margin: 0px !important;
    width: var(--element-sizeWidth#uid#) !important;
    height: var(--element-sizeHeight#uid#) !important;
    border-radius: var(--radius1#uid#) var(--radius2#uid#) var(--radius3#uid#) var(--radius4#uid#) !important;

    color: #fff;
    line-height: var(--element-size#uid#) !important;
    text-align: center !important;
    
    border: 1px solid var(--couleuractualisee#uid#) !important;
    background: linear-gradient(0deg, var(--couleuractualisee2#uid#), var(--couleuractualisee#uid#)) !important;
    
    top: -8px !important;
    left: 0px !important;
    

  }

  .led#uid#:after {


    position: absolute;
    top: var(--offset#uid#) !important;
    bottom: var(--offset#uid#) !important;
    left: var(--offset#uid#) !important;
    right: var(--offset#uid#) !important;
    border-radius: calc(var(--radius1#uid#)*1) var(--radius2#uid#) var(--radius3#uid#) var(--radius4#uid#) !important;
    border: 2px solid var(--couleuractualisee-ext#uid#) !important;
    
    content: var(--elementLabel#uid#) !important;
	color: var(--elementLabelColor#uid#) !important;
    text-align: center !important;
    text-wrap: balance !important;
    
	font-size: calc(100% * (var(--elementlabelSize#uid#))/(1)) !important;
	display: grid !important;
	align-content: center !important;
	justify-content: center !important; 

    
  }

  div.NomCmd#uid# {

    font-weight: bold !important;
    position: absolute !important;
    vertical-align: center !important;
          	
    top:     0px !important;
    left:    0px !important;
    z-index: 2 !important;
    padding: 0px !important;
    margin:  0px !important;
    width:   var(--element-sizeWidth#uid#) !important;
    height:  var(--element-sizeHeight#uid#) !important;

    
  }
</style>
  
<script>
  jeedom.cmd.update['#id#'] = function(_options) {
    var cmd = $('.cmd[data-cmd_uid=#uid#]');

    
var sizeWidth#uid# = ('#SizeWidth#' != '#'+'SizeWidth#') ? "#SizeWidth#" : "10px";
		if (sizeWidth#uid# != '') {
			document.documentElement.style.setProperty('--element-sizeWidth#uid#', sizeWidth#uid#);
		} else {
			document.documentElement.style.setProperty('--element-sizeWidth#uid#', "10px");
		}
var sizeHeight#uid# = ('#SizeHeight#' != '#'+'SizeHeight#') ? "#SizeHeight#" : "10px";
		if (sizeHeight#uid# != '') {			
          document.documentElement.style.setProperty('--element-sizeHeight#uid#', sizeHeight#uid#);
		} else {
			document.documentElement.style.setProperty('--element-sizeHeight#uid#', "10px");
		}
var radius1#uid# = ('#Radius1#' != '#'+'Radius1#') ? "#Radius1#" : "50%";
		if (radius1#uid# != '') {
			document.documentElement.style.setProperty('--radius1#uid#', radius1#uid#);
		} else {
			document.documentElement.style.setProperty('--radius1#uid#', "50%");
		}        
var radius2#uid# = ('#Radius2#' != '#'+'Radius2#') ? "#Radius2#" : radius1#uid#;
		if (radius2#uid# != '') {
			document.documentElement.style.setProperty('--radius2#uid#', radius2#uid#);
		} else {
			document.documentElement.style.setProperty('--radius2#uid#', radius1#uid#);
		}    
var radius3#uid# = ('#Radius3#' != '#'+'Radius3#') ? "#Radius3#" : radius1#uid#;
		if (radius3#uid# != '') {
			document.documentElement.style.setProperty('--radius3#uid#', radius3#uid#);
		} else {
			document.documentElement.style.setProperty('--radius3#uid#', radius1#uid#);
		}  

var radius4#uid# = ('#Radius4#' != '#'+'Radius4#') ? "#Radius4#" : radius1#uid#;
		if (radius4#uid# != '') {
			document.documentElement.style.setProperty('--radius4#uid#', radius4#uid#);
		} else {
			document.documentElement.style.setProperty('--radius4#uid#', radius1#uid#);
		}    
    
var color0#uid# = ('#Color0#' != '#'+'Color0#') ? "#Color0#" : "green";
		if (color0#uid# != '') {
			document.documentElement.style.setProperty('--color0#uid#', color0#uid#);
		} else {
			document.documentElement.style.setProperty('--color0#uid#', "green");
		}
    
var color1#uid# = ('#Color1#' != '#'+'Color1#') ? "#Color1#" : "red";
		if (color1#uid# != '') {
			document.documentElement.style.setProperty('--color1#uid#', color1#uid#);
		} else {
			document.documentElement.style.setProperty('--color1#uid#', "red");
		}
    
        
var effect0#uid# = ('#Effect0#'   !='#'+'Effect0#') ?   parseInt("#Effect0#")  :0;
   
var effect1#uid# = ('#Effect1#'   !='#'+'Effect1#') ?   parseInt("#Effect1#")  :0;
    
var effectSpeed0#uid# = ('#EffectSpeed0#' != '#'+'EffectSpeed0#') ? "#EffectSpeed0#" : '1s';
		if (effectSpeed0#uid# == '') {
			effectSpeed0#uid# = '1s'} 
var effectSpeed1#uid# = ('#EffectSpeed1#' != '#'+'EffectSpeed1#') ? "#EffectSpeed1#" : effectSpeed0#uid#;

		if (effectSpeed1#uid# == '') {

			effectSpeed1#uid# = effectSpeed0#uid#} 

var colorDegrade0#uid# = ('#ColorDegrade0#' != '#'+'ColorDegrade0#') ? "#ColorDegrade0#" : color0#uid#;
		if (colorDegrade0#uid# != '') {
			document.documentElement.style.setProperty('--couleurdegrade0#uid#', colorDegrade0#uid#);
		} else {
			document.documentElement.style.setProperty('--couleurdegrade0#uid#', color0#uid#);
		}      

var colorDegrade1#uid# = ('#ColorDegrade1#' != '#'+'ColorDegrade1#') ? "#ColorDegrade1#" : color1#uid#;
      if (colorDegrade1#uid# != '') {
			document.documentElement.style.setProperty('--couleurdegrade1#uid#', colorDegrade1#uid#);
		} else {
			document.documentElement.style.setProperty('--couleurdegrade1#uid#', color1#uid#);
		}  

    
var externalRing0#uid# = ('#ExternalRing0#'   !='#'+'ExternalRing0#') ?   parseInt("#ExternalRing0#")  :1;    
var externalRing1#uid# = ('#ExternalRing1#'   !='#'+'ExternalRing1#') ?   parseInt("#ExternalRing1#")  :1;    
  
    
    
var externalRingColor0#uid# = ('#ExternalRingColor0#' != '#'+'ExternalRingColor0#') ? "#ExternalRingColor0#" : color0#uid#;
		if (externalRingColor0#uid# != '') {
			document.documentElement.style.setProperty('--externalRingColor0#uid#', externalRingColor0#uid#);
		} else {
			document.documentElement.style.setProperty('--externalRingColor0#uid#', color0#uid#);
		}
var externalRingColor1#uid# = ('#ExternalRingColor1#' != '#'+'ExternalRingColor1#') ? "#ExternalRingColor1#" : color1#uid#;
		if (externalRingColor1#uid# != '') {
			document.documentElement.style.setProperty('--externalRingColor1#uid#', externalRingColor1#uid#);
		} else {
			document.documentElement.style.setProperty('--externalRingColor1#uid#', color1#uid#);
		}


var label0#uid# = ('#Label0#' != '#'+'Label0#') ? "#Label0#" : "";
		document.documentElement.style.setProperty('--elementLabel0#uid#', JSON.stringify(label0#uid#));

var label1#uid# = ('#Label1#' != '#'+'Label1#') ? "#Label1#" : label0#uid#;
		document.documentElement.style.setProperty('--elementLabel1#uid#', JSON.stringify(label1#uid#));

var labelColor0#uid# = ('#LabelColor0#' != '#'+'LabelColor0#') ? "#LabelColor0#" : "inherit";
		if (labelColor0#uid# != '') {
			document.documentElement.style.setProperty('--elementLabelColor0#uid#', labelColor0#uid#);
		} else {
			document.documentElement.style.setProperty('--elementLabelColor0#uid#', "inherit");
		}

var labelColor1#uid# = ('#LabelColor1#' != '#'+'LabelColor1#') ? "#LabelColor1#" : "inherit";
		if (labelColor1#uid# != '') {
			document.documentElement.style.setProperty('--elementLabelColor1#uid#', labelColor1#uid#);
		} else {
			document.documentElement.style.setProperty('--elementLabelColor1#uid#', "inherit");
		}
var labelSize#uid# = ('#LabelSize#' != '#'+'LabelSize#') ? "#LabelSize#" : "1.0";
		if (labelSize#uid# != '') {
			document.documentElement.style.setProperty('--elementlabelSize#uid#', labelSize#uid#);
		} else {
			document.documentElement.style.setProperty('--elementlabelSize#uid#', "1.0");
		}    
    
    
    
    // Récupération de la valeur
    var valeur = _options.display_value;

  if (valeur == 0) {
      document.documentElement.style.setProperty('--couleuractualisee#uid#', 'var(--color0#uid#)');
      document.documentElement.style.setProperty('--couleuractualisee2#uid#', 'var(--couleurdegrade0#uid#)');
      document.documentElement.style.setProperty('--elementLabelColor#uid#', 'var(--elementLabelColor0#uid#)');
      document.documentElement.style.setProperty('--elementLabel#uid#', 'var(--elementLabel0#uid#)');      
     
      if (effect0#uid#==0) { cmd.find('.led#uid#').css('animation', 'none');}  
      if (effect0#uid#==1) { cmd.find('.led#uid#').css('animation', 'glow#id# ' + effectSpeed0#uid# + ' infinite alternate');}   
      if (effect0#uid#==2) { cmd.find('.led#uid#').css('animation', 'glow#id# ' + effectSpeed0#uid# + ' 1 alternate');} 
    /*     if (effect0#uid#==2) { cmd.find('.led#uid#').css('animation', 'blinker#id# 1s linear alternate infinite');}        
*/
      if (externalRing0#uid# == 0) 
        {document.documentElement.style.setProperty('--couleuractualisee-ext#uid#', 'var(--transparent#uid#)');}
      else 
        {document.documentElement.style.setProperty('--couleuractualisee-ext#uid#', 'var(--externalRingColor0#uid#)');}
    
    } else if (valeur == 1) {
      document.documentElement.style.setProperty('--couleuractualisee#uid#', 'var(--color1#uid#)');
      document.documentElement.style.setProperty('--couleuractualisee2#uid#', 'var(--couleurdegrade1#uid#)');
      document.documentElement.style.setProperty('--elementLabelColor#uid#', 'var(--elementLabelColor1#uid#)');
      document.documentElement.style.setProperty('--elementLabel#uid#', 'var(--elementLabel1#uid#)');           

      if (effect1#uid#==0)
      {
       cmd.find('.led#uid#').css('animation', 'none');
      }  
      if (effect1#uid#==1)
      {
        cmd.find('.led#uid#').css('animation', 'glow#id# ' + effectSpeed1#uid# + ' infinite alternate');
      }
      if (effect1#uid#==2)
      {
        cmd.find('.led#uid#').css('animation', 'glow#id# ' + effectSpeed1#uid# + ' 1 alternate');
      }
 /*     if (effect1#uid#==2)
      {
       cmd.find('.led#uid#').css('animation', 'blinker#id# 1s linear alternate infinite');
      }      */  

      if (externalRing1#uid# == 0) {
			document.documentElement.style.setProperty('--couleuractualisee-ext#uid#', 'var(--transparent#uid#)');
	  } else {
			document.documentElement.style.setProperty('--couleuractualisee-ext#uid#', 'var(--externalRingColor1#uid#)');
      }
    }  
    
    $('.cmd[data-cmd_uid=#uid#]').attr('title', 'Valeur du ' + _options.valueDate + ', collectée le ' + _options.collectDate);
  }
  jeedom.cmd.update['#id#']({
    display_value: '#state#',
    valueDate: '#valueDate#',
    collectDate: '#collectDate#',
    alertLevel: '#alertLevel#'
  });
</script>
</div>

Salut

Qu’est-ce que tu appelles l’effet3 ?

Bonsoir,

Quand j’enlève les commentaires autour de

@-webkit-keyframes blinker#id# {
from { opacity: 1.0; } !important
to { opacity: 0.25; } !important
}

Et que j’ajoute
if (effect0#uid#==3) { cmd.find(‹ .led#uid# ›).css(‹ animation ›, ‹ blinker#id# 1s infinite ›);}

Et

if (effect0#uid#==3) { cmd.find('.led#uid#').css('animation', 'blinker#id# 1s linear alternate infinite');}        

Après les if… des effets 0, 1 et 2

Et que j’affecte 3 à mon paramètre Effect0 ou Effect1, l’effet de clignottement ne s’active pas. Mon affichage reste statique.
:woozy_face:

Comprends pas…

Silkarion

Salut,

il faut que tu remplaces :

@-webkit-keyframes blinker#id# {
  from { opacity: 1.0; } !important
  to { opacity: 0.25; } !important
}

par

@-webkit-keyframes blinker#id# {
  from { opacity: 1.0; !important }
  to { opacity: 0.25; !important }
}

ou même par (le !important ne doit pas être indispensable, tu as dû l’ajouter avant de mettre les #id# nécessaires :wink: ) :

  @-webkit-keyframes blinker#id# {
    from { opacity: 1.0; }
    to { opacity: 0.25; }
  }

Grand merci :smile:
Ça fonctionne bien mieux :sweat_smile:

Silkarion

Nouvelle version avec le correctif et donc des effets à gogo…
Merci à la communauté active qui me permet de traiter les dysfonctionnements et donc d’avancer dans la compréhension globale…

<!--
Maj: 15/02/2025

_BinaryGenericDisplay

Version  0.1 :
@Tarlak :
   Avec l'aide de Domotech pour l'amélioration css, grand merci a lui : http://youtube.com/domotech

@Silkarion
Version 1.1 :Adaptation pour ajouter de la flexibilité dans le résultat affiché
Version 1.2 : Ajout parametre Size
Version 1.3 : Correctif FullSize + BorderColorDeg
Version 2.0 : Refonte et ajout de paramétrages. /!\ changement des intitulés parametres /!\
Version 2.1 : Ajout effets 3 à 6

-->

<template>	

        <div></div>
        <div>** Parametres couleur **</div>
        <div>Color0 : Couleur pour valeur bool à 0  (default : vert)</div>
        <div>Color1 : Couleur pour valeur bool à 1 (default : rouge)</div>
        <div>ColorDegrade0 : Couleur de dégradé de la zone interne (défaut : Color0)</div>
  		<div>ColorDegrade1 : Couleur de dégradé de la zone interne (défaut : Color1)</div>
  		<div>  >> Tips : affecter #00000000 à la couleur pour une transparence !! </div>
        <div></div>
        <div>** Parametres forme **</div>
        <div>SizeWidth : Largeur du widget (default : 10px)</div>  
        <div>SizeHeight : Largeur du widget (default : 10px)</div>  
        <div>Radius1 : gestion du radius => 50% fait un rond, 0% un carré (default : 50%)</div>
        <div>Radius2 : gestion du radius => 50% fait un rond, 0% un carré (default : Radius1)</div>
        <div>Radius3 : gestion du radius => 50% fait un rond, 0% un carré (default : Radius1)</div>
        <div>Radius4 : gestion du radius => 50% fait un rond, 0% un carré (default : Radius1)</div>
        <div></div>
        <div>** Parametres d'estétisme **</div>
  		<div>Effect0 : effet pour etat 0(default : 0)</div>
        <div>Effect1 : effet pour état 1 (default : 0)</div>  
  		<div>  effets:</div>
        <div>       0 > sans effet; </div>
        <div>       1 effet souffle reccurent; </div>
        <div>       2 effet souffle x1;</div>
        <div>       3 effet clignottement; </div>
        <div>       4 effet vibrations</div>
        <div>       5 effet rotation</div>
        <div>       6 effet grossissement de 20%</div>
        <div>EffectSpeed0 : regle la durée de l'effet 0.5s,2s,...(default : 1s)</div>        
        <div>EffectSpeed1 : regle la durée de l'effet 0.5s,2s,...(default : EffectSpeed0)</div>        
        <div></div>
        <div>ExternalRing0 : Affichage anneau externe avec 1  (default : 1)</div>
        <div>ExternalRing1 : Affichage anneau externe avec 1  (default : 1)</div>
  		<div>ExternalRingColor0 : Couleur contour exterieur pour valeur bool à 0  (default : Color0)</div>
        <div>ExternalRingColor1 : Couleur contour exterieur pour valeur bool à 0  (default : Color1)</div>
        <div></div>
        <div>Label0 : Texte à afficher (default : '')</div>
        <div>Label1 : Texte à afficher (default : Label0)</div>
        <div>LabelSize : Ratio du texte à afficher (default : 1.0)</div>
  		<div>LabelColor0 : Couleur du texte à afficher (default : inherit)</div>
  		<div>LabelColor1 : Couleur du texte à afficher (default : inherit)</div>
  
 		<div></div>       
  
    </template>	

<div style="margin:5px; padding:0px;  min-width:10px; min-height:10px;" 
     class="cmd #history# container-fluid tooltips cmd-widget netatmodisplay" 
     data-type="info" data-version="#version#" data-eqLogic_id="#eqLogic_id#"  
     data-subtype="other" data-cmd_id="#id#"   data-cmd_uid="#uid#">
  
<div class="led#uid#"></div>
<div class="NomCmd #hide_name#">#name_display#</div>
<!--<div class="NomCmd#uid# #hide_name#"></div>-->

<style>
  :root {
    --couleuractualisee#uid#: #838383;
    --couleuractualisee2#uid#: #838383;
    --couleuractualisee-ext#uid#: #838383;
    --radius#uid#: 50%;
    --transparent#uid#: #00000000;
    --couleur-degrade#uid#: #353535;
    --offset#uid#: -5px;
    --element-size#uid#: 10px;
    --element-int-size#uid#: 3px;
    --elementLabel#uid#: '';
    --elementLabelSize#uid#: 1.0;
    --elementLabelColor#uid#: #000000;
    --animation-name#uid#: glow#id#;
  }

  

@-webkit-keyframes blinker#id# {
    from { opacity: 1.0 ;!important }
    to   { opacity: 0.25 ;!important } 
  
  }

@-webkit-keyframes glow#id# {
    from { box-shadow: 0 0 10px -5px var(--couleuractualisee#uid#) ; !important}
    to   { box-shadow: 0 0 10px max(5px, calc(min(var(--element-sizeWidth#uid#), var(--element-sizeHeight#uid#))/6)) var(--couleuractualisee#uid#) ;!important }
  }

@-webkit-keyframes vibrate#id# {
      0%   {transform: translate(0);!important}
      10%  {transform: translate(-1px, -1px);!important}
      20%  {transform: translate(1px, -1px);!important}
      30%  {transform: translate(-1px, 1px);!important}
      40%  {transform: translate(1px, 1px);!important}
      50%  {transform: translate(-1px, -1px);!important}
      60%  {transform: translate(1px, -1px);!important}
      70%  {transform: translate(-1px, 1px);!important}
      80%  {transform: translate(-1px, -1px);!important}
      90%  {transform: translate(1px, -1px);!important}
      100% {transform: translate(0);!important}
    }  
  
@-webkit-keyframes rotating#id# {

  from { transform: rotate(0deg);}
  to   { transform: rotate(360deg);}  
  }
  
@-webkit-keyframes scale#id# {
  from { transform: scale(1);}
  to   { transform: scale(1.2);}  
  }
  
  
  .led#uid# {
    
    position: relative !important;
    margin: 0px !important;
    width: var(--element-sizeWidth#uid#) !important;
    height: var(--element-sizeHeight#uid#) !important;
    border-radius: var(--radius1#uid#) var(--radius2#uid#) var(--radius3#uid#) var(--radius4#uid#) !important;

    color: #fff;
    line-height: var(--element-size#uid#) !important;
    text-align: center !important;
    
    border: 1px solid var(--couleuractualisee#uid#) !important;
    background: linear-gradient(0deg, var(--couleuractualisee2#uid#), var(--couleuractualisee#uid#)) !important;
    
    top: -8px !important;
    left: 0px !important;

  }

  .led#uid#:after {

    position: absolute;
    top: var(--offset#uid#) !important;
    bottom: var(--offset#uid#) !important;
    left: var(--offset#uid#) !important;
    right: var(--offset#uid#) !important;
    border-radius: calc(var(--radius1#uid#)*1.2) calc(var(--radius2#uid#)*1.2) calc(var(--radius3#uid#)*1.2) calc(var(--radius4#uid#)*1.2) !important;
    border: 2px solid var(--couleuractualisee-ext#uid#) !important;

    content: var(--elementLabel#uid#) !important;
	color: var(--elementLabelColor#uid#) !important;
    text-align: center !important;
    text-wrap: balance !important;
    
	font-size: calc(100% * (var(--elementlabelSize#uid#))/(1)) !important;
	display: grid !important;
	align-content: center !important;
	justify-content: center !important; 
    text-shadow: 1px 1px 1px #6b6b6b;
    
  }

  div.NomCmd#uid# {

    font-weight: bold !important;
    position: absolute !important;
    vertical-align: center !important;
          	
    top:     0px !important;
    left:    0px !important;
    z-index: 2 !important;
    padding: 0px !important;
    margin:  0px !important;
    width:   var(--element-sizeWidth#uid#) !important;
    height:  var(--element-sizeHeight#uid#) !important;

    
  }
</style>
  
<script>
  jeedom.cmd.update['#id#'] = function(_options) {
  var cmd = $('.cmd[data-cmd_uid=#uid#]');

    
  var sizeWidth#uid# = ('#SizeWidth#' != '#'+'SizeWidth#') ? "#SizeWidth#" : "10px";
		if (sizeWidth#uid# != '') {
			document.documentElement.style.setProperty('--element-sizeWidth#uid#', sizeWidth#uid#);
		} else {
			document.documentElement.style.setProperty('--element-sizeWidth#uid#', "10px");
		}
  var sizeHeight#uid# = ('#SizeHeight#' != '#'+'SizeHeight#') ? "#SizeHeight#" : "10px";
		if (sizeHeight#uid# != '') {			
          document.documentElement.style.setProperty('--element-sizeHeight#uid#', sizeHeight#uid#);
		} else {
			document.documentElement.style.setProperty('--element-sizeHeight#uid#', "10px");
		}
  var radius1#uid# = ('#Radius1#' != '#'+'Radius1#') ? "#Radius1#" : "50%";
		if (radius1#uid# != '') {
			document.documentElement.style.setProperty('--radius1#uid#', radius1#uid#);
		} else {
			document.documentElement.style.setProperty('--radius1#uid#', "50%");
		}        
  var radius2#uid# = ('#Radius2#' != '#'+'Radius2#') ? "#Radius2#" : radius1#uid#;
		if (radius2#uid# != '') {
			document.documentElement.style.setProperty('--radius2#uid#', radius2#uid#);
		} else {
			document.documentElement.style.setProperty('--radius2#uid#', radius1#uid#);
		}    
  var radius3#uid# = ('#Radius3#' != '#'+'Radius3#') ? "#Radius3#" : radius1#uid#;
		if (radius3#uid# != '') {
			document.documentElement.style.setProperty('--radius3#uid#', radius3#uid#);
		} else {
			document.documentElement.style.setProperty('--radius3#uid#', radius1#uid#);
		}  

  var radius4#uid# = ('#Radius4#' != '#'+'Radius4#') ? "#Radius4#" : radius1#uid#;
		if (radius4#uid# != '') {
			document.documentElement.style.setProperty('--radius4#uid#', radius4#uid#);
		} else {
			document.documentElement.style.setProperty('--radius4#uid#', radius1#uid#);
		}    
    
  var color0#uid# = ('#Color0#' != '#'+'Color0#') ? "#Color0#" : "green";
		if (color0#uid# != '') {
			document.documentElement.style.setProperty('--color0#uid#', color0#uid#);
		} else {
			document.documentElement.style.setProperty('--color0#uid#', "green");
		}
    
  var color1#uid# = ('#Color1#' != '#'+'Color1#') ? "#Color1#" : "red";
		if (color1#uid# != '') {
			document.documentElement.style.setProperty('--color1#uid#', color1#uid#);
		} else {
			document.documentElement.style.setProperty('--color1#uid#', "red");
		}
    
        
  var effect0#uid# = ('#Effect0#'   !='#'+'Effect0#') ?   parseInt("#Effect0#")  :0;
   
  var effect1#uid# = ('#Effect1#'   !='#'+'Effect1#') ?   parseInt("#Effect1#")  :0;
    
  var effectSpeed0#uid# = ('#EffectSpeed0#' != '#'+'EffectSpeed0#') ? "#EffectSpeed0#" : '1s';
		if (effectSpeed0#uid# == '') {
			effectSpeed0#uid# = '1s'} 
  var effectSpeed1#uid# = ('#EffectSpeed1#' != '#'+'EffectSpeed1#') ? "#EffectSpeed1#" : effectSpeed0#uid#;
		if (effectSpeed1#uid# == '') {
			effectSpeed1#uid# = effectSpeed0#uid#} 

  var colorDegrade0#uid# = ('#ColorDegrade0#' != '#'+'ColorDegrade0#') ? "#ColorDegrade0#" : color0#uid#;
		if (colorDegrade0#uid# != '') {
			document.documentElement.style.setProperty('--couleurdegrade0#uid#', colorDegrade0#uid#);
		} else {
			document.documentElement.style.setProperty('--couleurdegrade0#uid#', color0#uid#);
		}      

  var colorDegrade1#uid# = ('#ColorDegrade1#' != '#'+'ColorDegrade1#') ? "#ColorDegrade1#" : color1#uid#;
      if (colorDegrade1#uid# != '') {
			document.documentElement.style.setProperty('--couleurdegrade1#uid#', colorDegrade1#uid#);
		} else {
			document.documentElement.style.setProperty('--couleurdegrade1#uid#', color1#uid#);
		}  
    
  var externalRing0#uid# = ('#ExternalRing0#'   !='#'+'ExternalRing0#') ?   parseInt("#ExternalRing0#")  :1;    

  var externalRing1#uid# = ('#ExternalRing1#'   !='#'+'ExternalRing1#') ?   parseInt("#ExternalRing1#")  :1;    
    
var externalRingColor0#uid# = ('#ExternalRingColor0#' != '#'+'ExternalRingColor0#') ? "#ExternalRingColor0#" : color0#uid#;
		if (externalRingColor0#uid# != '') {
			document.documentElement.style.setProperty('--externalRingColor0#uid#', externalRingColor0#uid#);
		} else {
			document.documentElement.style.setProperty('--externalRingColor0#uid#', color0#uid#);
		}
var externalRingColor1#uid# = ('#ExternalRingColor1#' != '#'+'ExternalRingColor1#') ? "#ExternalRingColor1#" : color1#uid#;
		if (externalRingColor1#uid# != '') {
			document.documentElement.style.setProperty('--externalRingColor1#uid#', externalRingColor1#uid#);
		} else {
			document.documentElement.style.setProperty('--externalRingColor1#uid#', color1#uid#);
		}


  var label0#uid# = ('#Label0#' != '#'+'Label0#') ? "#Label0#" : "";
		document.documentElement.style.setProperty('--elementLabel0#uid#', JSON.stringify(label0#uid#));

  var label1#uid# = ('#Label1#' != '#'+'Label1#') ? "#Label1#" : label0#uid#;
		document.documentElement.style.setProperty('--elementLabel1#uid#', JSON.stringify(label1#uid#));

  var labelColor0#uid# = ('#LabelColor0#' != '#'+'LabelColor0#') ? "#LabelColor0#" : "inherit";
		if (labelColor0#uid# != '') {
			document.documentElement.style.setProperty('--elementLabelColor0#uid#', labelColor0#uid#);
		} else {
			document.documentElement.style.setProperty('--elementLabelColor0#uid#', "inherit");
		}

  var labelColor1#uid# = ('#LabelColor1#' != '#'+'LabelColor1#') ? "#LabelColor1#" : "inherit";
		if (labelColor1#uid# != '') {
			document.documentElement.style.setProperty('--elementLabelColor1#uid#', labelColor1#uid#);
		} else {
			document.documentElement.style.setProperty('--elementLabelColor1#uid#', "inherit");
		}
  var labelSize#uid# = ('#LabelSize#' != '#'+'LabelSize#') ? "#LabelSize#" : "1.0";
		if (labelSize#uid# != '') {
			document.documentElement.style.setProperty('--elementlabelSize#uid#', labelSize#uid#);
		} else {
			document.documentElement.style.setProperty('--elementlabelSize#uid#', "1.0");
		}   
    
  // Récupération de la valeur
  var valeur = _options.display_value;

  if (valeur == 0) {
      document.documentElement.style.setProperty('--couleuractualisee#uid#', 'var(--color0#uid#)');
      document.documentElement.style.setProperty('--couleuractualisee2#uid#', 'var(--couleurdegrade0#uid#)');
      document.documentElement.style.setProperty('--elementLabelColor#uid#', 'var(--elementLabelColor0#uid#)');
      document.documentElement.style.setProperty('--elementLabel#uid#', 'var(--elementLabel0#uid#)');      
     
      if (effect0#uid#==0) { cmd.find('.led#uid#').css('animation', 'none');}  
      else if (effect0#uid#==1) { cmd.find('.led#uid#').css('animation', 'glow#id# ' + effectSpeed0#uid# + ' infinite alternate');}   
      else if (effect0#uid#==2) { cmd.find('.led#uid#').css('animation', 'glow#id# ' + effectSpeed0#uid# + ' 1 alternate');} 
      else if (effect0#uid#==3) { cmd.find('.led#uid#').css('animation', 'blinker#id#  ' + effectSpeed0#uid# + '  linear alternate infinite');}        
      else if (effect0#uid#==4) { cmd.find('.led#uid#').css('animation', 'vibrate#id#  ' + effectSpeed0#uid# + '  linear alternate infinite');}
      else if (effect0#uid#==5) { cmd.find('.led#uid#').css('animation', 'rotating#id#  ' + effectSpeed0#uid# + '  linear infinite');}
      else if (effect0#uid#==6) { cmd.find('.led#uid#').css('animation', 'scale#id#  ' + effectSpeed0#uid# + '  linear alternate infinite');}
       
      if (externalRing0#uid# == 0) 
        {document.documentElement.style.setProperty('--couleuractualisee-ext#uid#', 'var(--transparent#uid#)');}
      else 
        {document.documentElement.style.setProperty('--couleuractualisee-ext#uid#', 'var(--externalRingColor0#uid#)');}
    
    } else if (valeur == 1) {
      document.documentElement.style.setProperty('--couleuractualisee#uid#', 'var(--color1#uid#)');
      document.documentElement.style.setProperty('--couleuractualisee2#uid#', 'var(--couleurdegrade1#uid#)');
      document.documentElement.style.setProperty('--elementLabelColor#uid#', 'var(--elementLabelColor1#uid#)');
      document.documentElement.style.setProperty('--elementLabel#uid#', 'var(--elementLabel1#uid#)');           

      if (effect1#uid#==0) { cmd.find('.led#uid#').css('animation', 'none');}  
      else if (effect1#uid#==1) { cmd.find('.led#uid#').css('animation', 'glow#id# ' + effectSpeed1#uid# + ' infinite alternate'); }
      else if (effect1#uid#==2) { cmd.find('.led#uid#').css('animation', 'glow#id# ' + effectSpeed1#uid# + ' 1 alternate'); }
      else if (effect1#uid#==3) { cmd.find('.led#uid#').css('animation', 'blinker#id# ' + effectSpeed1#uid# + ' linear alternate infinite'); }      
      else if (effect1#uid#==4) { cmd.find('.led#uid#').css('animation', 'vibrate#id#  ' + effectSpeed1#uid# + '  linear alternate infinite');}        
      else if (effect1#uid#==5) { cmd.find('.led#uid#').css('animation', 'rotating#id#  ' + effectSpeed1#uid# + '  linear infinite');}
      else if (effect1#uid#==6) { cmd.find('.led#uid#').css('animation', 'scale#id#  ' + effectSpeed1#uid# + '  linear alternate infinite');}

    
      if (externalRing1#uid# == 0) 
        { document.documentElement.style.setProperty('--couleuractualisee-ext#uid#', 'var(--transparent#uid#)');}
      else 
        {document.documentElement.style.setProperty('--couleuractualisee-ext#uid#', 'var(--externalRingColor1#uid#)');}
    }  
    
    $('.cmd[data-cmd_uid=#uid#]').attr('title', 'Valeur du ' + _options.valueDate + ', collectée le ' + _options.collectDate);
  }
  jeedom.cmd.update['#id#']({
    display_value: '#state#',
    valueDate: '#valueDate#',
    collectDate: '#collectDate#',
    alertLevel: '#alertLevel#'
  });
</script>
</div>