[Présentation] Benj29 et blog Jeedom-Facile

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 ?

Y a que girafe en rechargeable et perso le recyclage est bien meilleur en pile normal.

J’attends de recevoir ma dernière commande pour te confirmer le vendeur. Par principe.

rechargeable ça n’existe pas à ma connaissance en pile bouton.
je voulais dire VARTA pour les piles boutons et VARTA pour les piles rechargeables

:innocent:

On attend le retour de @benj29. A priori il a une solution en bouton rechargeable

Girafe sur Amazon.

Et voilà le dernier design, ma migration sous Jeedom 4 est donc maintenant finie !

Un appui sur le tableau de suivi me permet d’y accéder…

Et voilà :

Je récupère depuis suivi conso :

  • l’évolution veille, avant veille de l’électricité, l’eau, la climatisation (2 groupes), l’eau chaude, la piscine et la production ;
  • pareil pour la semaine, avant semaine ; mois et avant mois. (pas le mois en cours qui est déjà affiché).

A défaut, suivi conso est plus lisible pour aller plus loin.

J’ai graph la consommation par pas de 5 min :

*/5 * * * *

Il suffit d’utiliser la fonction statistics :

statistics(#[Energie][Puissance Instantanée][Consommation]#,avg,5min ago,now)

Pour les non-électriciens, depuis un linky :

  • je calcule la puissance en W en me basant chaque minute par scénario par un delta des index HC et HP :
puissance_1min_consommation

est

((#[Capteurs et Actionneurs][Compteur Linky Garage][HCHP]#-variable(compteur_consommation1minbeforeHP))*60)+((#[Capteurs et Actionneurs][Compteur Linky Garage][HCHC]#-variable(compteur_consommation1minbeforeHC))*60)

puis compteur_consommation1minbeforeHP et compteur_consommation1minbeforeHC récupèrent la valeur de l’index #[Capteurs et Actionneurs][Compteur Linky Garage][HCHP]# et #[Capteurs et Actionneurs][Compteur Linky Garage][HCHC]#

Alors que S (la puissance apparente est donnée par linky) :

statistics(#[Capteurs et Actionneurs][Compteur Linky Garage][PAPP]#]#,avg,1min ago,now)

Et du coup pour alléger les graphiques, j’affiche la consommation par pas de 5 min car sinon les graphiques sont lourds.

  • de l’eau,
  • de la consommation électrique en W (calculé depuis celle du linky en VA),
  • de la production PV en W (compteur pulse).

Un tableau de synthèse me récupère plus d’éléments :

  • puissance consommée min/max de la journée en W et à la minute,
  • puissance apparente du linky en VA,
  • le facteur de puissance de l’installation (P/S),
  • l’efficacité de ma consommation HC/HP aujourd’hui et la veille,
  • le pilotage du délestage au cas où, mode, en cours (je l’utilisais à l’époque du chauffage électrique),

Je remonte pas mal d’info côté PV grâce à un compteur pulse tout bête par Jeedouino (voir sur le fil ou sur l’ancien forum, un jour je ferai un article !) :

  • ma production en cours à la minute, le max d’aujourd’hui,
  • l’efficacité d’autoconsommation (ce que j’ai autoconsommé de ce que j’ai produit), le restant étant rejeté sur le réseau, la production et l’autoconsommation de la journée,
  • l’effacement de la journée (puissance nulle, comme si la maison était séparée du réseau), l’effacement depuis que j’ai mon installation (2 ans), le gain de l’autoconsommation (et pas la production qui est une FAUSSE estimation !), l’amortissement réel de mon installation.

Dernier point l’eau : la consommation quotidienne, la surveillance de fuite, et la réinitialisation si fuite (notamment quand je remplis la piscine ou que madame arrose :D).

Et voilà !

1 « J'aime »

J ai survolé le sujet et c’est du beau travail, tu as poussé ta domotique assez loin, bravo.
J aime bien ton dashboard, tu l as conçu ou télécharger ?

Conçu :wink: tout le poste détaille comment fabriquer ce superbe travail d’interface utilisateur…

Ok, vu que prend le sujet en vol je vais prendre le temps de le lire depuis le début car c’est du très beau travail et ça m interresse.

1 « J'aime »

Je ne sais pas trop sur quoi je vais attaquer le blog…

Que préférez vous ?

  • ma migration de jeedom 3 à jeedom 4,
  • ces nouveaux designs,
  • l’évolution sur jpi et fully kiosk,
  • le suivi de consommation et des usages,
  • la partie piscine avec l’intégration d’iopool (il est judicieux d’attendre car ils ont prévu d’ajouter une Api gratuite),
  • la partie production et autoconso,
  • la partie audio vidéo.
2 « J'aime »

Personnellement j’aimerai bien avoir des infos sur l’évolution de JPI et fully kiosk. J’utilise JPI juste pour l’affichage, mais j’aimerai bien en faire plus, mais je manque de DOC
Ensuite suivi des conso.
Merci