[WIDGET] Historique et Tendance

Tags: #<Tag:0x00007f592f0f1858>

Bonjour,

Fidèle utilisateur de Jeedom, j’essaie de faire mes propres Widgets V4 en code.

Coté design, j’obtiens ceci et j’en suis plutôt satisfait. La valeur actuelle de la température, la tendance, le min, le max ainsi que la date du dernier changement.
tuile

Mon problème, c’est que la tendance, le min et le max ne sont pas mis à jour. En fait, il sont uniquement mis à jour lorsque je mets à jour la page entière. Et ce n’est pas ce que l’on désire, ex: au bout d’un certain temps j’ai température actuelle=18° et température max=15. :slight_smile:

<div class="cmd cmd-widget #history#" data-type="info" data-subtype="numeric" data-template="tile" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
    <div class="title #hide_name#">
      <div  class="cmdName">#name_display#</div>
    </div>
    <div class="myrow">
      <div class="mycolumn state" style="font-size: 220%; white-space: nowrap;"></div>
      <div class="mycolumn" style="font-size: 100%; white-space: nowrap" >
          <i class="#tendance#"></i>
      </div>
      <div class="mycolumn cmdStats #hide_history#" style="font-size: 100%; white-space: nowrap;text-align: right;">
          &nbsp;#minHistoryValue#<br>
          &nbsp;#maxHistoryValue#
      </div>
    </div>
    <div class="myrow">
      <div class="mycolumn" style="font-size: 80%; font-weight: normal; white-space: nowrap;" >
        M&agrave;J
      </div>
      <div class="mycolumn" style="white-space: nowrap;" >
          <span class="timeCmd" style="font-size: 80%; font-weight: normal"  data-type="info"></span>
   	  </div>
<!--      <div class="mycolumn minHistoryValue" style="font-size: 100%; white-space: nowrap;"></div> -->
    </div>
 
    <style>
      .myrow {
        display: flex;
        flex-direction: row;
        width: 100%;
      }

      .mycolumn {
        display: flex;
        flex-direction: column;
        flex: 1;
        justify-content: center;
      }      
  	</style>
  
	<script>
        myDisplayDuration = function(_date,_el){
          var arrDate = _date.split(/-|\s|:/);
          var timeInMillis = new Date(arrDate[0], arrDate[1] -1, arrDate[2], arrDate[3], arrDate[4], arrDate[5]).getTime();
          _el.attr('data-time',timeInMillis);
          if(_el.attr('data-interval') != undefined){
            clearInterval(_el.attr('data-interval'));
          }
          if(_el.attr('data-time') < (Date.now()+ clientServerDiffDatetime)){
            var d = ((Date.now() + clientServerDiffDatetime) - _el.attr('data-time')) / 1000;
            var j = Math.floor(d / 86400);
            var h = Math.floor(d % 86400 / 3600);
            var m = Math.floor(d % 3600 / 60);
            var s = Math.floor( d - (j*86400 + h*3600 + m*60) );
            if (d > 86399) {
              var interval = 3600000;
              _el.empty().append(((j + " j")));
            } else if (d > 3599 && d < 86400) {
              var interval = 60000;
              _el.empty().append(((h + " h")));
            } else {
              var interval = 10000;
              _el.empty().append(((m + " min" )));
            }
            var myinterval = setInterval(function(){
              var d = ((Date.now() + clientServerDiffDatetime) - _el.attr('data-time')) / 1000;
              var j = Math.floor(d / 86400);
              var h = Math.floor(d % 86400 / 3600);
              var m = Math.floor(d % 3600 / 60);
              var s = Math.floor( d - (j*86400 + h*3600 + m*60) );
              if (d > 86399) {
                var interval = 3600000;
                _el.empty().append(((j + " j")));
              } else if (d > 3599 && d < 86400) {
                var interval = 60000;
                _el.empty().append(((h + " h")));
              } else {
                var interval = 10000;
                _el.empty().append(((m + " min")));
              }
            }, interval);
            _el.attr('data-interval',myinterval);
          }else{
            _el.empty().append("0 s");
            var interval = 10000;
            var myinterval = setInterval(function(){
              if(_el.attr('data-time') < (Date.now()+ clientServerDiffDatetime)){
                var d = ((Date.now() + clientServerDiffDatetime) - _el.attr('data-time')) / 1000;
                var j = Math.floor(d / 86400);
                var h = Math.floor(d % 86400 / 3600);
                var m = Math.floor(d % 3600 / 60);
                var s = Math.floor( d - (j*86400 + h*3600 + m*60) );
                if (d > 86399) {
                  interval = 3600000;
                  _el.empty().append(((j + " j")));
                } else if (d > 3599 && d < 86400) {
                  interval = 60000;
                  _el.empty().append(((h + " h")));
                } else {
                  interval = 10000;
                  _el.empty().append(((m + " min")));
                }
              }else{
                _el.empty().append("0 s");
              }
            }, interval);
            _el.attr('data-interval',myinterval);
          }
        }     
      
		jeedom.cmd.update['#id#'] = function(_options){
			$('.cmd[data-cmd_id=#id#]').attr('title','Date de valeur : '+_options.valueDate+'<br/>Date de collecte : '+_options.collectDate)
			$('.cmd[data-cmd_id=#id#] .state').empty().append(Number.parseFloat(_options.display_value).toFixed(1)+" #unite#");			
			var cmd = $('.cmd[data-cmd_id=#id#]');
            myDisplayDuration(_options.valueDate, cmd.find('.timeCmd'));
/*			$('.cmd[data-cmd_id=#id#] .minHistoryValue').empty().append(_options.minHistoryValue);			*/
		}
		jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'/*,minHistoryValue:'#minHistoryValue#'*/});
	</script>
</div>

Noobs en html, j’ai fait comme j’ai pu en utilisant ‘flex’. Soyez indulgent. :slight_smile: J’ai aussi récupéré et modifié le code de DisplayDuration pour l’adapter à mes besoins (Pas besoin d’avoir les secondes par exemple, si supérieur à 1 jour, pas besoin d’avoir les minutes, …).

J’ai essayé de modifier jeedom.cmd.update pour y inclure minHistoryValue, j’ai bien la valeur qui s’affiche lors 1e rafraichissement de la page, ensuite minHistoryValue est vide.

Que puis-je faire pour faire fonctionner min, max et tendance à chaque mise à jour de la température ? Au moins pour la tendance (Est-ce qu’il est possible d’avoir l’avant-dernière valeur pour faire le calcul en script) ? Min et Max peuvent être réévalués plus lentement.

Merci beaucoup

j’ai pas regarder en détail ton code mais tout ce qui est mise a jour doit se trouver dans la fonction :

jeedom.cmd.update[’#id#’] = function(_options){

}

Bonsoir,

J’imagine effectivement que la solution se trouve dans jeedom.cmd.update. Les valeurs disponibles dans les exemples que j’ai parcourus semblent être #state#, #valueDate#, #collectDate, #alertDate#. Je comprends donc que seules ces valeurs seront mises à jour en temps réel (= pas uniquement au chargement de la page). Dans mon cas, j’aurais besoin de #tendance#, #minHistoryValue#, #maxHistoryValue#

J’ai essayé de modifier le script pour y inclure #minHistoryValue# mais sans succès (cf. Les paramètres en commentaire dans le code). Au chargement de la page, j’ai bien la valeur correcte mais elle est remplacée par du vide à la première mise à jour temps réel.

<!--      <div class="mycolumn minHistoryValue" style="font-size: 100%; white-space: nowrap;"></div> -->

		jeedom.cmd.update['#id#'] = function(_options){
			$('.cmd[data-cmd_id=#id#]').attr('title','Date de valeur : '+_options.valueDate+'<br/>Date de collecte : '+_options.collectDate)
			$('.cmd[data-cmd_id=#id#] .state').empty().append(Number.parseFloat(_options.display_value).toFixed(1)+" #unite#");			
			var cmd = $('.cmd[data-cmd_id=#id#]');
            myDisplayDuration(_options.valueDate, cmd.find('.timeCmd'));
/*			$('.cmd[data-cmd_id=#id#] .minHistoryValue').empty().append(_options.minHistoryValue);			*/
		}
		jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'
/*,minHistoryValue:'#minHistoryValue#'*/});

Merci par avance.

dans le dernier update #ton_tag#
ou
les #tag# que jeedom créé on ne maîtrise pas le processus

mais on peux passé par l’api js
donc ton 1er update en plus
jeedom.hystory.get (recherche mini et max, pour période, recherche avant dernière valeur pour une tendance perso,…)
exemple sans update mais interactif

https://forum.jeedom.com/viewtopic.php?f=25&t=35100&sid=2a79989fdd966ee9243a091137b4f110&start=220#p778253

pour te montrer l’interractif

  • ta bdd est conséquente + le temps d’accès et calcul (sur durée ) sera long. c’est en live “d’où son optimisation demi degré”

bandeau droite "résumé " et pop up sur iframe design marche aussi en v4 de test. j’ai pas le temps en se moment

Bonsoir,

Merci beaucoup pour l’info. Je teste ça. :slight_smile:

1 J'aime

Bonsoir,

J’ai bien mis en place jeedom.history.get. C’est parfait, cela répond bien à mes attentes.

Par contre, j’ai cette roue crantée qui s’affiche à chaque utilisation. C’est moche sur mon dashboard. :slight_smile:

Est-ce qu’il y aurait un moyen d’éviter cette roue crantée (désactivation totale, activation de la roue uniquement au bout d’un temps de traitement plus grand, … ) ?

Merci beaucoup

ah oui a chaque actu ! j’y avais pas pensé
oui on peux en css
https://forum.jeedom.com/viewtopic.php?f=24&t=48039&p=777651&sid=ec95e78a7754f555996eb30e143e039c#p777622

donc dans l’update (script)
.fa-cog et css opacity à 0
genre
$(’.fa-cog]’).css('opacity,‘0’);

y joindre une temps

ou avant et une fois le résultat obtenue joué sur l’opacité

ou autre methode css pour caché
display :none, flex,…

Le mode dev de ton navigateur lorsque la roue tourne
Clic icône de gauche t’aide a voir les class/id (avec la roue il te faut être rapide)
Tous comme la console avec l api js pour voir se que retourne la commande

1 J'aime

Bonjour,

Merci pour l’info, c’est mieux car la roue crantée est maintenant masquée avec $(’.fa-cog’).css(‘opacity’, 0);

Il me reste que l’écran ‘flashe’ à chaque mise à jour. Y-a-t’il un moyen pour empêcher cela ?

Merci beaucoup.

se que tu nommes “écran flashé” doit être un fond d’écran légèrement opaque.?

je regarderai

Salut,

Ce que je nomme flashe, c’est l’écran qui s’assombrit. Effectivement, ‘flash’ n’est pas le bon terme. :slight_smile:

Merci

Voilà la dernière version de mon code. Pour la roue crantée et l’écran qui devient légèrement opaque, j’ai utilisé la méthode barbare d’ajouter la classe hidden sur jqueryLoadingDiv.

Ça fait maintenant exactement ce que je veux. :smiley:

<div class="cmd cmd-widget #history#" data-type="info" data-subtype="numeric" data-template="tile" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
  <div class="title #hide_name#">
    <div  class="cmdName">#name_display#</div>
  </div>
  <div class="myrow">
    <div class="mycolumn state" style="font-size: 250%; white-space: nowrap;"></div>
    <div class="mycolumn mytendance" style="font-size: 100%; white-space: nowrap" >
      <i class="fas fa-arrow-minus"></i>
    </div>
    <div class="mycolumn" style="font-size: 100%; white-space: nowrap" >
 		&nbsp;
    </div>
    <div class="mycolumn cmdStats #hide_history#" style="font-size: 100%; white-space: nowrap;text-align: right;">
      <div class="myrow">
        <div class="mycolumn minHistoryValue" style="font-size: 100%; white-space: nowrap;"></div>
      </div>
      <div class="myrow">
        <div class="mycolumn maxHistoryValue" style="font-size: 100%; white-space: nowrap;"></div>
      </div>
    </div>
  </div>
  <div class="myrow">
    <div class="mycolumn" style="font-size: 80%; font-weight: normal; white-space: nowrap;" >
      M&agrave;J
    </div>
    <div class="mycolumn" style="white-space: nowrap;" >
      <span class="timeCmd" style="font-size: 80%; font-weight: normal"  data-type="info"></span>
    </div>
  </div>

  <style>
    .myrow {
      display: flex;
      flex-direction: row;
      width: 100%;
    }

    .mycolumn {
      display: flex;
      flex-direction: column;
      flex: 1;
      justify-content: center;
    }      
  </style>

  <script>
    durationSinceLastUpdate = function(_date,_el){
      var arrDate = _date.split(/-|\s|:/);
      var timeInMillis = new Date(arrDate[0], arrDate[1] -1, arrDate[2], arrDate[3], arrDate[4], arrDate[5]).getTime();

      if(timeInMillis < (Date.now()+ clientServerDiffDatetime)){
        var d = ((Date.now() + clientServerDiffDatetime) - timeInMillis) / 1000;
        var j = Math.floor(d / 86400);
        var h = Math.floor(d % 86400 / 3600);
        var m = Math.floor(d % 3600 / 60);
        var s = Math.floor( d - (j*86400 + h*3600 + m*60) );
        if (d > 86399) {
          var interval = 3600000;
          _el.empty().append(((j + " j")));
        } else if (d > 3599 && d < 86400) {
          var interval = 60000;
          _el.empty().append(((h + " h")));
        } else {
          var interval = 10000;
          _el.empty().append(((m + " min" )));
        }
      }else{
        _el.empty().append("-");
      }
    }     

    function getHistory(id, start, end, unite) {
      jeedom.history.get ({ 
        cmd_id:id,
        dateStart:start,
        dateEnd:end,  
        success:  function(resultat){
          $('.cmd[data-cmd_id='+id+'] .minHistoryValue').empty().text(resultat.minValue);
          $('.cmd[data-cmd_id='+id+'] .maxHistoryValue').empty().text(resultat.maxValue);
          $('.cmd[data-cmd_id='+id+']').attr('minValue', Number.parseFloat(resultat.minValue));
          $('.cmd[data-cmd_id='+id+']').attr('maxValue', Number.parseFloat(resultat.maxValue));          
        }
      })
    }

    function formatDate(date) {
      var d = date.getDate();
      var m = date.getMonth() + 1; //Month from 0 to 11
      var y = date.getFullYear();
      var hh = date.getHours();
      var mn = date.getMinutes();
      var ss = date.getSeconds();

      return ((y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d)+' '+(hh<=9 ? '0' + hh : hh)+':'+(mn<=9 ? '0' + mn : mn)+':'+(ss<=9 ? '0' + ss : ss)));
    }
    
    jeedom.cmd.update['#id#'] = function(_options){
      var cmd = $('.cmd[data-cmd_id=#id#]');
                        
      cmd.attr('title','Date de valeur : '+_options.valueDate+'<br/>Date de collecte : '+_options.collectDate)
      
      var oldValue = Number.parseFloat(cmd.attr('currentValue'));      
      var newValue = Number.parseFloat(_options.display_value).toFixed(1);
      $('.cmd[data-cmd_id=#id#] .state').empty().append(newValue + " #unite#");			
      cmd.attr('currentValue', newValue);	

      if (newValue > oldValue + 0.1) {
        $('.cmd[data-cmd_id=#id#] .mytendance').empty().html('<i class="fas fa-arrow-up"></i>');
      }
      else if (newValue < oldValue - 0.1) {
        $('.cmd[data-cmd_id=#id#] .mytendance').html('<i class="fas fa-arrow-down"></i>');
      }
      else {
        $('.cmd[data-cmd_id=#id#] .mytendance').empty().html('<i class="fas fa-minus"></i>');        
      }
      
      var loadingDiv = document.getElementById("jqueryLoadingDiv");
      loadingDiv.className='hidden';
      
      var today = new Date();
      var yesterday = new Date();
      yesterday.setDate(today.getDate() - 1);
      
      getHistory('#id#', formatDate(yesterday), formatDate(today));
                              
      durationSinceLastUpdate(_options.valueDate, cmd.find('.timeCmd'));      
    }

    jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'/*,minHistoryValue:'#minHistoryValue#'*/});
  </script>
</div>
1 J'aime

Bonsoir à la communauté :slight_smile:

Petite mise à jour de mon ‘widget code’, simple et efficace. Min/Max sur 24h, durée depuis le dernier changement, flèche de tendance.

tuile%202

<div class="cmd cmd-widget #history#" data-type="info" data-subtype="numeric" data-template="tile" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
  <div class="title #hide_name#">
    <div  class="cmdName">#name_display#</div>
  </div>
  <div class="myrow">
    <div class="mycolumn state" style="font-size: 300%; white-space: nowrap;">-</div>
    <div class="mycolumn mytendance">
      <i class="fas fa-arrow-minus"></i>
    </div>
    <div class="mycolumn cmdStats #hide_history#" style="line-height: 1; font-size: 100%; white-space: nowrap; text-align: right;">
      <div class="myrow">
        <div class="mycolumn minHistoryValue" style="font-size: 110%; font-family:consolas; white-space: nowrap;">-</div>
      </div>
      <div class="myrow">
        <div class="mycolumn maxHistoryValue" style="font-size: 110%; font-family:consolas; white-space: nowrap;">-</div>
      </div>
      <div class="myrow">
        <div class="mycolumn timeCmd" style="font-size: 110%; font-family:consolas; white-space: nowrap;">-</div>
      </div> 
    </div>       
  </div>
  
  <style>
    .myrow {
      display: flex;
      flex-direction: row;
      width: 100%;
    }

    .mycolumn {
      display: flex;
      flex-direction: column;
      flex: 1;
      justify-content: center;
    }      
  </style>

  <script>
    durationSinceLastUpdate = function(_date,_el){
      var arrDate = _date.split(/-|\s|:/);
      var timeInMillis = new Date(arrDate[0], arrDate[1] -1, arrDate[2], arrDate[3], arrDate[4], arrDate[5]).getTime();

      if(timeInMillis < (Date.now()+ clientServerDiffDatetime)){
        var d = ((Date.now() + clientServerDiffDatetime) - timeInMillis) / 1000;
        var j = Math.floor(d / 86400);
        var h = Math.floor(d % 86400 / 3600);
        var m = Math.floor(d % 3600 / 60);
        var s = Math.floor( d - (j*86400 + h*3600 + m*60) );
        if (d > 86399) {
          var interval = 3600000;
          _el.empty().append((j + " j").padStart(6," ").replace(/ /g, '&nbsp;'));
        } else if (d > 3599 && d < 86400) {
          var interval = 60000;
          _el.empty().append((h + " h").padStart(6," ").replace(/ /g, '&nbsp;'));
        } else {
          var interval = 10000;
          _el.empty().append((m + " min").padStart(6," ").replace(/ /g, '&nbsp;'));
        }
      }else{
        _el.empty().append(("-").padStart(6," ").replace(/ /g, '&nbsp;'));
      }
    }     

    function getHistory(id, start, end, unite) {
       // console.log(id + ', requesting history');
       jeedom.history.get ({ 
        cmd_id:id,
        dateStart:start,
        dateEnd:end,  
        success:  function(resultat){
          // This function is run asynchronously
          
          $('.cmd[data-cmd_id='+id+'] .minHistoryValue').empty().text(resultat.minValue);
          $('.cmd[data-cmd_id='+id+'] .maxHistoryValue').empty().text(resultat.maxValue);
 
          var prevDifferentValue;
          var currentValue;

          $( resultat.data ).each(function( index ) {
            var num = resultat.data[index][1];            

            if (currentValue != num) {
              prevDifferentValue=currentValue;
              currentValue=num;
            }

            if (num == resultat.maxValue) {
              var maxdate = new Date(resultat.data[index][0]);
              $('.cmd[data-cmd_id='+id+'] .maxHistoryValue').attr('title','Max ' + resultat.maxValue + ' ' + unite + ' // ' + formatDate(maxdate));
            }

            if (num == resultat.minValue) {
              var minidate = new Date(resultat.data[index][0]);
              $('.cmd[data-cmd_id='+id+'] .minHistoryValue').attr('title','Min ' + resultat.minValue + ' ' + unite + ' // ' + formatDate(minidate));
            }     
          });
          
          // console.log(id + ', currentValue ' + currentValue + ', prevDifferentValue ' + prevDifferentValue);
          
          if (currentValue >= prevDifferentValue + 0.1) {
            $('.cmd[data-cmd_id='+id+'] .mytendance').empty().html('<i class="fas fa-arrow-up"></i>');
          }
          else if (currentValue <= prevDifferentValue - 0.1) {
            $('.cmd[data-cmd_id='+id+'] .mytendance').html('<i class="fas fa-arrow-down"></i>');
          }
          else {
            $('.cmd[data-cmd_id='+id+'] .mytendance').empty().html('<i class="fas fa-minus"></i>');        
          }
          
          $('.cmd[data-cmd_id='+id+'] .mytendance').attr('title','Evolution ' + prevDifferentValue + ' --> ' + currentValue);
 
        }
      })
    }

    function formatDate(date) {
      var d = date.getDate();
      var m = date.getMonth() + 1; //Month from 0 to 11
      var y = date.getFullYear();
      var hh = date.getHours();
      var mn = date.getMinutes();
      var ss = date.getSeconds();

      return ((y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d)+' '+(hh<=9 ? '0' + hh : hh)+':'+(mn<=9 ? '0' + mn : mn)+':'+(ss<=9 ? '0' + ss : ss)));
    }
    
    jeedom.cmd.update['#id#'] = function(_options){
      $('.cmd[data-cmd_id=#id#] .state').attr('title','Date de valeur : '+_options.valueDate+'<br/>Date de collecte : '+_options.collectDate)
      $('.cmd[data-cmd_id=#id#] .state').attr('valueDate',_options.valueDate)
      
      var loadingDiv = document.getElementById("jqueryLoadingDiv");
      loadingDiv.className='hidden';
      
      var today = new Date();
      var yesterday = new Date();
      yesterday.setDate(today.getDate() - 1);
      
      getHistory('#id#', formatDate(yesterday), formatDate(today), '#unite#');

      $('.cmd[data-cmd_id=#id#] .state').empty().append(Number.parseFloat(_options.display_value).toFixed(1) + " #unite#");			
            
      durationSinceLastUpdate(_options.valueDate, $('.cmd[data-cmd_id=#id#]').find('.timeCmd'));      

      // Every 60s, durationSinceLastUpdate is computed
      var _el = $('.cmd[data-cmd_id=#id#]').find('.timeCmd');
      if(_el.attr('data-interval') != undefined){
        clearInterval(_el.attr('data-interval'));
      }  
      var myinterval = setInterval(function(){      
        durationSinceLastUpdate($('.cmd[data-cmd_id=#id#] .state').attr('valueDate'), _el);      
      }, 60000);
      _el.attr('data-interval', myinterval);
    }

    jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'/*,minHistoryValue:'#minHistoryValue#'*/});

  </script>
</div>
1 J'aime

vu que tu partages, et je ne sais pas si tu as saisi comment cherché l’info
jeedom quand on met rien
jeedom nous offres les info brut

exemple
tu as mis le dernier changement de valeur, hors si tu as mis en lissage ne pas répeter tu peux te retrouvé avec un temps +++ ex 20mn, et le retour de l’equipement sans changement de valeur peut être aussi important ! pour le mettre dans ton info ou un design,…

on retrouve la date de la derniére communication “update” dans le paramêtre du virtuel (ou équipement)
param
ensuite informations (onglet) afin d’avoir l’info brut
param%20brut

et on retrouve cette info
js%20brut

le code js api brut “afin d’avoir le retour dans la console”
il est simplifié, à toi d’ingrémenté ensuite. avec update ou non

jeedom.cmd.byId me donne eqLogic_id ->
jeedom.eqLogic.byId me donne lastcommunication

original

<div class="cmd" data-cmd_id="3641">
	<script>
		jeedom.cmd.update['3641'] = function(_options){
      jeedom.cmd.byId({ 
            id: 3641,
      })
	//		$('.cmd[data-cmd_id=#id#]').attr('title','Valeur du '+_options.valueDate+', collectée le '+_options.collectDate)
	//		$('.cmd[data-cmd_id=#id#] .state').empty().append(_options.display_value);
	
           jeedom.eqLogic.byId ({
				id: 392, // id objet
   //                             success:  function(valeur_courante) {
     //                             alert(valeur_courante);
//	    $('.cmd[data-cmd_id=#id#]').attr('data-state', _options.display_value);
//  alert(valeur_courante);
		})
           	}
		jeedom.cmd.update['3641']();
	</script>
</div>

Bonsoir la communauté,

Merci beaucoup pour l’information et la précision. En fait, c’est bien la date du dernier changement qui m’intéresse (et pas la date de la dernière réception d’une valeur). Et tu as bien raison, j’ai parfois des durées très importantes. :slight_smile: Dans ces cas là, cela m’indique que la valeur est stable. Si la valeur devient très très importante (ex. Plusieurs heures), c’est que j’ai un problème de communication.