[Présentation] Benj29 et blog Jeedom-Facile

Et un dernier pour ce soir…

Celui des VMC :

Voir le blog :

https://www.jeedom-facile.fr/index.php/2019/01/16/gerez-lhumidite-de-votre-maison/

J’ai un peu musclé lors de la passage V4.
Mais dans le principe, vous retrouverez :

  • les variables min, max qui conditionnent le démarrage auto,
  • le max de l’extérieur qui autorisent un brassage,
  • le mode de la VMC,
  • le pilotage auto (elle se gère toute seule suivant le min/max d’au dessus), arrêt total, ou une marche forcée d’une heure.

Je donne le dernier statut au cas où (que je reçois par télégram).

2 « J'aime »

Quelle type de régulation fais tu sur la regulation de l’hygro ?
PID, Hysteresis ?

Euh. Lis l’article :joy:.
Hysteresis maison.
Je dois remettre mes scénarios et modes à jour sur l’article. J’ai simplifié.

1 « J'aime »

Ajout du widget pour la gestion des thermostats (et non pas les consignes comme plus haut).

Du coup, j’ai modifié quelques trucs. Je récupère l’état du thermostat (suspendu, calcul, chauffant ou climatisation) et je me suis fait un joli widget lol.

<div class="tooltips cmd cmd-widget #history#" data-type="info" data-subtype="numeric" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#" style="display: block;">
	<center>
      <span class="iconCmd"></span>
  </center>
	<script>
		jeedom.cmd.update['#id#'] = function(_options){
          var state = _options.display_value;
          var cmd = $('.cmd[data-cmd_id=#id#]');
          // 0 arrêt qu'importe le mode ; 1 = chauffage ; 2 = clim ; 3 = calcul ; 4 = suspendu
          cmd.attr('title','Valeur du '+_options.valueDate+', collectée le '+_options.collectDate);
          if (state == 0 ) {
			cmd.find('.iconCmd').empty().append('<i class="Mdi mdi-close" style="color:#acacac;font-size:16px;"></i>');
			}
		  if (state == 2 ) {
			cmd.find('.iconCmd').empty().append('<i class="Mdi mdi-snowflake" style="color:#5078aa;font-size:18px;"></i>');
			}
          if (state == 1 ) {
			cmd.find('.iconCmd').empty().append('<i class="Mdi mdi-thermometer-plus" style="color:#da3037;font-size:18px;"></i>');
			}
          if (state == 3 ) {
			cmd.find('.iconCmd').empty().append('<i class="Mdi mdi-calculator" style="color:ghostwhite;font-size:18px;"></i>');
			}
		  if (state == 4 ) {
			cmd.find('.iconCmd').empty().append('<i class="Mdi mdi-motion-pause-outline" style="color:#ff8c00;font-size:18px;"></i>');
			}
		  cmd.find('.state').empty().append(' '+state);
          cmd.find('.unite').empty().append(' #unite#');	
          
			if(_options.alertLevel){
			$('.cmd[data-cmd_id=#id#]').removeClass('label label-warning label-danger')
			if(_options.alertLevel == 'warning'){
				$('.cmd[data-cmd_id=#id#]').addClass('label label-warning');
			}else if(_options.alertLevel == 'danger'){
				$('.cmd[data-cmd_id=#id#]').addClass('label label-danger');
			}
			}
		}
		jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});
	</script>
</div>

On peut tout à faire traduire l’état de l’info du thermostat en texte. Mais perso, je trouve plus facile de suivre dans l’historique la valeur (je garde 7 jours).

Un simple scénario à chaque fois sur le thermostat concerné (chauffage, climatisation) en déclencheur :
#[Entrée][Chauffage Entrée][Statut]#

La variable est récupérée dans le tableau ou ailleurs…

Là encore j’utilise le widget action icon en couleur et le plugin icones pour avoir des trucs zolis lol. Ainsi je peux déroger sur l’agenda en cours : ABS, NUIT, CFT, ECO, etc si une pièce a besoin d’un coup de chauffage ou non. Je peux même activer le mode powerfull des climatisations pour chauffer encore plus vite.

J’ai aussi mis en place le widget pour les fenêtres. Cela me permet de savoir si l’alarme est activée dessus, la batterie du capteur et son état :).

Le widget de batterie vient de là, légèrement modifiée (couleur, taille, texte)

Dans le même esprit celui des portes :). Avec le dernier passage du chat dans le catdoor (un simple capteur xiaomi). On reçoit en parallèle la vidéo pour voir si madame rentre ou sort :smiley:

Dernier aujourd’hui, la partie mouvements.

J’ai modifié récemment ma manière d’utiliser JPI.

Dans le principe :

  • suivant la présence, l’état de l’alarme, je « filtre » un mouvement dans une zone et j’autorise l’allumage de la tablette de la zone.

Par exemple, le scénario de gestion de la zone cuisine / pièce de vie se déclenche sur présence (si maison vide ou non), sur alarme (mise en nuit, retirée etc), et sur les mouvements dans la zone !

Je récupère le trigger de déclenchement et en fonction de la zone, j’autorise ou non le passage du mouvement sur un virtuel ON/OFF. Le OFF est mis automatiquement au bout de X minutes.

Dans le cas de la cuisine, c’est la seule tablette que j’autorise en allumage même quand l’alarme est mise de nuit (et que quelqu’un est là). Si personne et alarme (total/partielle), la tablette est éteinte.


Le virtuel de gestion des zones, des simples ON/OFF et un binaire associé.

Je remets à 0 chaque zone en fonction d’une tempo.

Un autre scénario se déclenche sur mouvement autorisé dans la zone ou non :

C’est quoi ? Bein juste une répétition de l’ordre screenon ou screenoff. On active, démarre ou désactive, arrête le scénario qui autorise la répétition du screenon, off.

Je force une remise de la luminosité de la tablette et un refresh du design au premier allumage.

Le scénario de répétition est on ne peut plus simple :

Par contre je regarde si un nettoyage des écrans est en cours (voir plus bas) :

De même pour le scénario OFF.

Côté script par contre, les tablettes n’étant pas rootées, j’avais utilisé l’ajout de sleepscreen.
Quand OFF, je passe à 15 secondes. Quand ON, je passe à 10min. J’utilise « action après » sur screenon et screenoff.


Côté JPI, je récupère l’état de l’écran et la batterie par script.

Merci @dJul et les mots clés, actions par script et l’API :
/?action=getBattLevel
/?action=getState&keyword=IS_SCREEN_ON
/?action=getState&keyword=SCREENBURNFIX

Pour le nettoyage d’écran :

Tous les jours à 9h en semaine :

Si le nettoyage hebdo n’a pas été fait et que personne n’est là et que l’alarme est mise alors je lance le nettoyage et je vérifie qu’il tourne (voir plus bas la gestion de l’allumage de l’écran côté JPI) :

Quand le statut repasse à 0, un scénario dédié, je vérifie la durée du nettoyage. S’il a été suffisante (>2h), je passe la variable à 1 pour éviter le lancement du premier scénario.

Chaque lundi matin, je regarde, avertis, réinitialise :

Côté JPI, un cron de répétition suivant : si écran allumé, si pas de nettoyage alors refresh.

Côté allumage de l’écran, je filtre l’allumage furtif :

Si cela peut aider !

Et du coup, ma gestion de mouvements en widget :

Etat du capteur, batterie.
Etat de la zone. RAZ (le OFF du virtuel de la zone).
Etat de l’écran de la tablette, batterie de cette dernière.

3 « J'aime »

Dernier widget en date :

Il me permet de surveiller les autres alarmes de la maison et les capteurs inhérents :

  • détecteur d’eau aqara : batterie, état ;
  • détecteur d’incendie honeywell xiaomi : batterie, état ;
  • alarme dédiée dans chacun des cas : si la surveillance tourne, le statut et le pilotage ON/OFF.

Simple et efficace.

Aussi, un mémo pour ceux qui mettent en place une gestion de widget au survol ou au clic. Je me suis rendu compte à l’utilisation que certains boutons/actions n’étaient pas cliquables. Il semblerait que le fait d’ouvrir un widget au dessus d’une zone rend ; dans certains cas ; la commande que l’on souhaite n’est pas cliquable.

Cela se voit car le petit rond (bien pratique) n’apparaît pas !

Merci à @ajja17orange pour son aide.

Par curiosité, quelle moto est ce que tu as? C’est une électrique je suppose comme tu as la remontée de la batterie? Madame voudrait passer sur une électrique, et avoir la possibilité de remonter les infos dans jeedom serait top :slight_smile:

Ah non pas une électrique :joy:. Ou alors le jour où y a un moulin comme ça je signe.

Un h2.

Haha effectivement, on est loin des 125 électrique avec ça :sweat_smile:

1 « J'aime »

Ajout du jour la gestion multimédia.

Pour cela, j’utilise script pour piloter mon amplicateur Onkyo (le plugin du même nom plantant trop souvent…).
Pour cela, il faut utiliser onkyo eiscp :

sudo easy_install onkyo-eiscp
onkyo --discover

Et récupérer les commandes adéquates par exemple :
power on, off, zone 2 on, zone 2 off, commande net, commande bluetooth, niveau du dimmer etc
Et récupérer les infos :
l’état du volume par zone, l’activité en cours, l’état des zones etc.

Ensuite, j’utilise une excellente harmony où j’ai configuré plusieurs activités typiques :

  • la tv hertzienne (je ne sais même pas si je l’ai déjà lancé) ;
  • la tv + box android ;
  • la tv + box android sur home cinéma ;
  • l’ampli en bluetooth (j’y passe spotify et tunein de la tablette JPI) ;
  • l’ampli en net (pour écouter les radios « net » mais au final, tunein fait le boulot),
    etc.

Pour simplifier la gestion et minimiser la consommation :

  • l’ampli est en standby hybride ;
  • la tv et autres éléments sur une prise pilotée.

De même cette prise pilotée est gérée sur une minuterie à 10minutes (pour éviter les switchs off trop rapides sur les changements d’activité).

Pour le pilotage de l’ampli par le plugin script :

Dans le principe, sois j’appelle directemenet une commande par la commande onkyo installée, soit j’ai fait un script que je lance par le plugin (les scripts sont stockées sur la VM jeedom).

Par exemple : récupère le volume, pilote le volume, fixe le volume etc

ou pour monter un volume par 3 db ou récupérer un état de zone :

Je peux détailler d’autres commandes si besoin.

Récupérer le volume principal :

Récupérer l’état de l’ampli :

etc.

Pour l’harmony, le plugin du même nom, l’activation des commandes XMPP.

En parallèle, je m’appuie sur JPI ou Fullykiosk pour lancer les APK que j’utilise dans les scénarios : Spotify ou Tunein ainsi que l’activation du Bluetooth de la tablette.

http://192.168.2.208:8090/?action=launchApp&packageName=com.spotify.music
http://192.168.2.208:8090/?action=launchApp&packageName=tunein.player

@djul ayant développé une gestion « fiable » de la partie BT je connecte directement l’ampli à la tablette ou je coupe.

http://192.168.2.208:8090/?action=manageBTDevice&deviceName=Onkyo+TX-NR696&BTaction=connect&profil=A2DP
http://192.168.2.208:8090/?action=disableBT

Du coup pour gérer au mieux le volume par zone, deux scénarios un par zone (je mets
Un slider pour le volume principal qui déclenche un scénario (et j’harmonise sur autre zone) :

#[Panel][Pilotage Intérieur][Master]#

Un « gros » scénario qui gère les activités et bascule la prise au cas où ainsi que les volumes, zones, APK à lancer etc. L’harmony pouvant être « hors ligne » par moment, je ne perds pas l’activité et éviter un switch off dangereux sur l’effet waf :D. Suivant l’heure, fonction de l’activité, j’allume les zones et je gère les volumes ;).

Pour la gestion de la prise, j’ai simplement ajouté un interrupteur « virtuel » qui décale l’extinction 10 min plus tard si l’activité est bien à off ou si une activité n’est que sur l’amplificateur (car ce dernier n’est pas sur la prise).

Pour éviter d’avoir des notifications pour rien lors du switch on, j’ai fait un bypass par variable (que je passe à 1) sur les activités tablette et autres (on sait ce que l’on fait, donc pas besoin de se taper les messages audio TTS).

Et le off :

Dernier point, j’utilise le pont émulé Philips HUE pour les 4 boutons du bas de la télécommande Harmony pour piloter la prise du Caisson, Lumière TV, Prise de Gestion etc. Très pratique !

2 « J'aime »

Dernier du weekend, le widget de gestion de l’alarme et de sa configuration.

De base : accès au digicode pour désactiver, accès à ce menu, futur design des caméras (ce sera le seul avec celui de supervision des systèmes), les 3 modes nuit, partiel ou total. L’état courant, la présence de quelqu’un à la maison, si la détection de mouvement extérieure tourne, le mode automatique qui s’enclenche quand absent, l’état de l’intrusion et la fermeture des volets en auto (coucher du soleil) ou dès que l’on s’en va.

Et les options de gestion ou états actuels : détection de mouvement, caméras intérieures (JPI et Fullykiosk) par caméra, intérieure ou extérieure. Ainsi que la configuration de l’alarme qui s’active automatiquement et la fermeture auto du volet.

Et le digicode de @djul modifié en CSS

J’ai déjà détaillé pas mal de choses sur le blog :

  • la détection de mouvement par MotionEye et une interface avec Jeedom depuis mes caméras extérieures :

https://www.jeedom-facile.fr/index.php/2018/12/08/machine-virtuelle-motioneye/
https://www.jeedom-facile.fr/index.php/2018/12/08/la-video-surveillance-avec-la-domotique/

  • l’alarme et son automatisation : présence, pilotage des caméras etc

https://www.jeedom-facile.fr/index.php/2020/09/14/alarme-et-securite/

Un ajout, je masque le widget de configuration de l’alarme si intrusion (on ne peut pas couper le streaming ou la détection de mouvement). Seulement le digicode est actif.

Pour récupérer l’état du streaming sur JPI, info binaire :

http://192.168.2.209:8090/?action=getState&keyword=IS_CAM_STREAMING

Côté Fullykiosk, je pilote la détection et je mets à jour une info binaire :

Bon je n’avance pas … car chocolat ce weekend :smiley:

La partie design global est totalement finie, je ne touche plus rien :slight_smile:
J’attaque les 3 designs qu’il me reste à développer : supervision, caméras et consommations.

J’ai fait le design des caméras :

Au menu :

  • pilotage des caméras
  • changement de position
  • possibilité d’enregistrer, stopper, capturer chaque caméra
  • ou tout d’un coup

Même si je peux activer le streaming intérieur sur la partie configuration de l’alarme (voir plus haut), j’ai rajouté cette possibilité qui me permet de voir si je suis à distance :

  • détection de mouvement,
  • la caméra qui détecte à l’extérieur,
  • activation par caméra de l’intérieur,
  • idem capture/enregistrement,stop.

J’ai commencé le design de supervision pour savoir l’état du système, presque fini :

  • batterie de tous les capteurs par type,
  • état des scénarios ou informations de remontée : défaut de remontée d’un capteur, état de jeedom de production ou monitoring, mise à jour, état de la supervision photovoltaique, check global du système.
  • état de remontée des antennes BLEA
  • état des démons jeedouino, des compteurs (s’ils ont bougé, la dernière remontée)
  • boutons pour lancer les MAJ JPI
  • l’onduleur, internet (débit, ip etc),
  • le ping de tous les équipements de la maison (qu’il me faut finir).

Voir l’article :
https://www.jeedom-facile.fr/index.php/2018/12/18/la-surveillance-de-vos-equipements-domotiques/

Salut @benj29, ben dit donc tu dois t’amuser avec les changements de batterie :wink: vivement qu’il y est des cr2032 ou cr1632 rechargeables :smiley:

1 « J'aime »

mince, je viens de regarder, ca existe :joy:

En soit, 18 à 22 mois de durée de vie pour ma part.
Seul bémol les nuts, moins de 5 mois.

Ah oui, moi aussi les nuts c’est assez problématique car la durée des piles n’est pas top.
D’autant qu on ne peut pas remonter leurs états (enfin je crois) pour anticiper le changement.

@Nex008 :

J’utilisais un script qui le rendait possible pour ma part pour les 2 et 3. Par contre, cela a pour effet de vider la batterie car on le sonde et surtout cela bloque une antenne pour ne faire que cela ! Génant car j’utilisais par exemple l’antenne locale (en VM, BLEA, une clé SENA) pour couvrir la zone et du coup, ça fait chier l’antenne pour remonter les batteries.

Voir ici :
https://forum.jeedom.com/viewtopic.php?t=40695

Après avec le recul, je change les piles sur les voitures, motos, clés de maison tous les 5 maxi. Ce n’est pas la mort non plus ! C’est tellement pratique…

J’ai fait un simple scénario qui détecte si absence des clés trop longtemps alors qu’on est à la maison (présence, alarme off, wifi, tél gps) et me le notifie si je ne le vois pas dans le design… mais par exemple, pour la moto et la voiture, c’est rapide, le garage ne s’ouvrira pas s’il n’y a plus de pile, donc je vais vite le savoir :D.

@Bello65 :

Pour la petite histoire, pendant un moment, dégouté des CR2032 chinoises qu’on te livre et qui n’ont que 30% de la capacité ou 50 dans le meilleur des cas, j’ai fait le choix de commander sur Amazon de la marque par volume. Effectivement, déjà la durée de vie des capteurs est bien meilleure, 15 à 18 mois pour les environnements … les portes/fenêtres cela dépend de l’activité, mais pareil, on est à plus d’un an…

Du coup, j’ai un peu trié sur le volet les vendeurs côté Aliexpress et j’ai acheté des paquets de 30 piles bien notés en capacité… pour moins de 10€ !

Sinon voilà j’ai terminé hier soir le design de supervision. Pas de fioriture, juste de l’efficacité.
Petit widget historique pour les températures avec tendance et min/max de la journée, bien pratique.
Le suivi de l’onduleur. Par contre, toujours le bug de speedtest en VM qui me remonte des UP/DOWN faux de ma ligne…

Et pour finir, suivre les services de Jeedom comme JPI, FK, Jeedouino, etc

Dernier design à mettre en place le suivi de consommation.
Et je pourrais attaquer le blog en temps libre ensuite… vu que le passage V4 sera fini.

Le widget de pour la tendance, histo de @moafrancky34

<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: 110%; 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: 100%; font-family:consolas; white-space: nowrap;">-</div>
      </div>
      <div class="myrow">
        <div class="mycolumn maxHistoryValue" style="font-size: 100%; font-family:consolas; white-space: nowrap;">-</div>
      </div>
      <div class="myrow">
        <div class="mycolumn timeCmd" style="font-size: 100%; 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("div_jeedomLoading");
  	  loadingDiv.className='hidden';
      // avant 4.1 
      // var loadingDiv = document.getElementById("jqueryLoadingDiv");
      // avant 4.1 
	  //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>

Salut tu as des marques de préférence ? Pour les cr2032

Moi tout en varta pour les piles bouton et rechargeable. C est excellent par rapport a du no name

1 « J'aime »

Salut @loic69 par contre je ne trouve pas de varta cr2032 rechargeable, ou les trouves tu ?