dimanche 11 mars 2012

Quelques news de HomeAutomate


Manque de temps, travaux , font que le développement passe en arrière plan.
Ceci dit voici quelques news :

      Gestion des plugins terminée, pour l'instant 4 plugins : 
                         
- Plugin RFXCOM Ethernet (Permet la reconnaissance de la partie HARDWARE d'un RFXCOM LAN)
- Plugin OREGON (Permet la reconnaissance des sondes OREGON)
- Plugin HeatManager (Permet de la gestion chauffage d'une pièce, étage, maison, réseau de maisons)
- Plugin Reflexion (Permet la configuration d'une Unité, Mediator, Manager) par réflexivité JAVA (Introspection dynamique dans les objets fournis par les plugins)


     

    Gestion Architecture (Pièce, Etage, Maison) terminée.

   
 

      Gestion des plages horaires terminée (Design à fignoler)



     IHM de réflexivité (permet de paramétrer de manière dynamique un plugin)
 

  Côté Software : 

            - Disparition d'Hibernate (la partie dynamique plugin, m'obligeant à m'en séparer)
            - Nouvel ORM et du coup base de données (et oui, je supprime MySql également) au profit de DB4O (Base de données objets) de manière hyper simpliste.

           Ex: DatabaseContainer.save(monObjet);

A venir : 
              
           Plugin Pachube

Puisque NEST n'est pas prêt d'être disponible en France







    Puisque le magnifique thermostat NEST n'est pas prêt d'être disponible en France avant pas mal de temps. Pourquoi ne pas se lancer dans la fabrication d'un thermostat virtuel type "Potar" pilotable en tactile sur nos tablettes.

Après quelques recherches, je suis tombé sur cette DEMO. Une fois décortiquée, je m'aperçois qu'il y a pas mal de variables en dur, et le simple fait de vouloir un potar plus gros, m'embarque dans des calculs de dingue. En plus cette démo inclut foultitude de css et de script js. Et je voulais également que le potard puisse tourner librement sans "butée".

Donc pourquoi pas simplifier et s'adapter. 

Liste des composants : 

     - JQuery (intégré dans HomeAutomate) et permettant de faire des IHM sympa.
     - Une image de potar (désolé pour la qualité)

       

     - Une fonte type LCD bleu néon.


On commence par intégrer le style (surtout les fontes) : 


<style>
a img { border: none;
   }
a { color: #FFF;
  }
@font-face {
    font-family: "FontLCD";
    src: url(fonts/DS-DIGI.TTF) format("truetype");
    }
p.lcdfont {
    font-family: "FontLCD", Verdana, Tahoma;
    font-size:85px;
    color:#5ac3f1;
}
</style>

Puis vient la partie JQuery, il faut importer JQuery Core et un plugin dédié aux rotations 
Ex : 


<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="js/jQueryRotateCompressed.js"></script>

Enfin vient la partie script JQuery (y a surement moyen d'optimiser, je ne trouve pas fluide le défilement): 




<script type="text/javascript">
$(document).ready(function(){
// Variable pour le dernier angle calculé
var lastAngle=0;
// Variable pour la dernière position en abcisse
var lastx=0;
// Variable pour le dernier signe calculé
var lastSign="+";
// Variable pour savoir si le boutton de la souris est pressé.
var mouseDown="";
// température par défaut au commencement
var temperature=19;
$( "#temperature" ).html( "19.0°C");


$('#potar').mousedown(function(e){
  // Lorsqu'on appuie sur le bouton de gauche, on autorise le thermostat à bouger
  mouseDown="ok";
});

$('*').mouseup(function(e){
  // Lorsqu'on relache le bouton de gauche, on n'autorise plus le thermostat à bouger
  mouseDown="";
});


$('#potar').mousemove(function(e){
  // Si on est autorisé à bouger
  if ( mouseDown == "ok" )
   {
    var left=e.pageX- this.offsetLeft;
    var top=e.pageY - this.offsetTop;
    var width=$('#potar').width();
    var height=$('#potar').height();
    var sens="";
    if ( lastx < (left) && (height/2 - top ) > 0)
     {
      sens="+";
     }
    if ( lastx >= left && (height/2 - top ) > 0)
     {
      sens="-";
     }
   if ( lastx <= (left) && (height/2 - top ) < 0)
     {
      sens="-";
     }
    if ( lastx >= left && (height/2 - top ) < 0)
     {
      sens="+";
     }
// Si rien ne bouge on conserve le même signe
     if ( lastx == left  )
      {
       sens=lastSign;
      }
    // Si le sens est positif on fait tourner le disque, et on augmente la t°
    if ( sens == "+" )
      {
lastAngle+=1;
        temperature+=0.1;
      }
     else
     {
   lastAngle-=1;
        temperature-=0.1;
     }  

// Arrondi au Dixième
     temperature=Math.round(temperature*10)/10;

// Si le sens est indeterminable, on garde le dernier
     if ( sens != "" )
      {
     lastSign=sens;
      }
// On effectue une rotation
     $('#potar').rotateAnimation(lastAngle);
     lastx = left;
     
    $( "#temperature" ).html( temperature +"°C");
    }  
   
});
});
</script>

Puis la partie HTML : 


<body style="background: #000; color: #FFF;">
<p name="temperature" id="temperature" class="lcdfont" style="text-align: center;" ></div>
<div style="text-align: center;"><img  draggable="false" id="potar" src="img/potar.png" /></div>
</body>




Résultat : 




jquery knob rotate