Visuel des périphériques virtuels

Nous verrons dans cet article comment améliorer le visuel des périphériques virtuels du FIBARO HC2.

SOMMAIRE

  • 1 – Présentation
    • 1.1 – Visuel actuel
    • 1.2 – Objectif
    • 1.3 – Le contexte
  • 2 – Premiers essais
    • 2.1 – Programmation du périphérique
    • 2.2 – Premiers résultats et premiers échecs !
  • 3 – Premières évolutions
    • 3.1 – À la recherche des icônes
    • 3.2 – Modifications du périphérique
    • 3.3 – Un peu de programmation
  • 4 – Gestion de la plage complète -30° à +45°
    • 4.1 – La création des icônes
    • 4.2 – une programmation bien lourde !
    • 4.3 – C’est parti pour les tests…
    • 4.4 – Touche ultime : La patte de l’expert !
  • 5 – Un autre exemple

1- PRÉSENTATION

En comparaison avec les périphériques Z-Wave,  l’aspect des périphériques virtuels du HOME CENTER 2 est très moyen, mais avec un peu d’idées et de temps, on peut réussir à créer quelque chose d’assez sympa.

1.1 – Visuel actuel

Lorsque j’ai créé des sondes virtuelles alimentées par les valeurs des sondes connectées à la Zibase pro, j’obtenais ce résultat dans l’interface du Home Center 2 :

1-sonde-virtuelle-hc2-simple

et sur l’application FIBARO sur IPAD :

2-sonde-simple-sur-ipad-1024x667

1.2 – Objectif

Nous allons voir comment obtenir ce visuel sur l’interface du Home Center 2 :

3-sonde-virtuelle-hc2-evoluee

… et ceci dans l’application IPAD :

4-miniature-sonde-evoluee-sur-ipad

5-sonde-evoluee-sur-ipad-1024x661

1.3 – Le contexte

J’ai installé sur la Zibase Pro de nombreuses sondes Oregon (temp/hygro et pluie).

Le nouveau contrôleur de domotique FIBARO HC2 devait devenir la box principale, secondée par la Zibase en tant que passerelle de protocoles radio pour interfacer tous mes périphériques non reconnus par le HC2 (sondes thermo/hygro et pluviomètre OREGON, détecteurs IR CHACON, carillons DIO, détecteurs IR, contacteurs et télécommandes VISONIC, actionneurs fil pilote X2D DELTADORE RF660FP).

Comme je ne connaissais pas le LUA, langage de programmation du HC2, et je savais que la tâche ne serait pas simple !

Mais comme je suis persévérant et que google est mon grand ami, je savais que j’y viendrai à bout.

C’était sans compter sur l’aide précieuse de quelques passionnés comme Steven et d’autres encore.

J’ai réussi à trouver de nombreux exemples et tutos sur le Blog Domotique-info.fr et des forums comme Domotique-Fibaro, me permettant de mettre en oeuvre de nombreux périphériques.

Très rapidement, grâce aux périphériques virtuels, j’ai pu commander la Zibase, l’IPX800v3, le freebox serveur, le freebox player, mon ampli HC Pioneer, et récupérer la téléinfo de l’ECO-DEVICES.

Il devenait important de récupérer dans le HC2 toutes les valeurs des sondes connectées à la Zibase , et mes recherches se sont arrêtées sur ce super article Utiliser une ZiBASE comme passerelle EnOcean pour le Home Center 2

Ce tuto montre comment il est possible de stocker dans des variables du HC2 toutes les valeurs de ces sondes.

Et effectivement, en suivant le tuto à la lettre, j’ai pu créer facilement différents périphériques virtuels pour chacune de mes sondes !

Jusque là, avec un copier-coller intégral du code donné en référence, j’arrivais aisément à maitriser la situation.

2 – PREMIERS ESSAIS

2.1 – Programmation du périphérique

Dans le MainLoop de la sonde, je mets le code suivant :

local temp=fibaro:getGlobalValue(« OSxxxxxxxxxx_V1 »)
temp=temp/10
fibaro:log(temp.. »°C – « ..fibaro:getGlobalValue(« OSxxxxxxxxxx_V2″).. »% »)
fibaro:sleep(6*1000)

La variable V1 contient la température et la V2 l’hygrométrie. J’ai du modifier un peu le code en divisant par 10 la variable V1 pour avoir la vraie température.

L’instruction « log » va afficher en vert les 2 valeurs dans la case LOG du périphérique virtuel.

j’ai tâtonné avec la valeur du SLEEP, ici 6x1000ms donc 6s, pour avoir un affichage permanent du LOG affiché en vert.

2.2 – Premiers résultats et premiers échecs ! 

J’obtiens ainsi des sondes thermo/hygro sous cette forme:

6-sonde-virtuelle-hc2-simple

C’est pas trop mal ! Et pour moi, c’était déjà un exploit d’avoir pu récupérer aussi facilement les valeurs de toutes les sondes.

Empressé de voir le résultat sur mon Ipad, j’ai vite déchanté!

Voilà le résultat de la miniature d’une sonde :

7-miniature-sonde-simple-sur-ipad

Aucune info n’est affichée!  Je me dis qu’en cliquant dessus, on en aura plus :

8-sonde-simple-sur-ipad-1024x667

C’est raté, tout ce que j’ai fait ne sert à rien, à part avoir récupéré les valeurs des sondes dans des variables.

Et comme il n’est pas possible de s’en servir dans le panneau de chauffage pour la gestion de thermostat… l’intérêt est très limité.

Vivement la V4, puisque normalement, il sera possible d’intégrer réellement les périphériques virtuels dans le système HC2, et donc dans les différents panneaux (alarme, chauffage,…).

Mais bon, rien n’est officiel, et on ne connait pas non plus la date de sortie de la V4 mais vous pouvez en avoir un aperçu avec la version Alpha testé ici :

https://plus.google.com/106123664903729788185/posts/5MHM12Wi4SF

3 – PREMIÈRES ÉVOLUTIONS

Donc j’ai décidé d’aller plus loin, sans savoir que je partais dans un délire incroyable !!!

Mon challenge, c’est d’afficher dans l’application IPAD, d’une part la température dans l’icône, et d’autre part les valeurs TEMP et HYGRO.

Je comprends vite que ça ne va pas être simple, surtout pour les icônes !

3.1 – À la recherche des icônes

Il n’y a pas de miracle, pour afficher un icône en forme de thermomètre digitale avec la véritable température inscrite à l’intérieur, il faut un icône pour chaque degré à afficher.

Je n’avais pas envie de créer tous ces icônes, et en cherchant un peu, j’en ai trouvé ici:

http://www.domotique-fibaro.fr/index.php/gallery/album/32-icones-chauffage/

9-temphg10-temp1611-temp1712-temp2113-temp25

C’était vraiment une bonne trouvaille, mais malheureusement les températures étaient comprises entre 16 et 25 degrés.  

Dommage, car j’ai des sondes extérieures, et même dans les congélateurs et réfrigérateurs, donc ça risque de faire un peu juste !

Je décide de les utiliser quand même pour valider mon idée.

Donc je retourne sur ma sonde virtuelle, et je rajoute la « HG » et les « 16 » à « 25 », soit 11 icônes… Et là ce n’est rien, on comprendra pourquoi un peu plus loin !

14-icone-peripherique-virtuel-hc2

Je clique sur ‘Changer l’icône’, et je vais tout en bas des icônes déjà en mémoire.

15-ajouter-une-icone

Il suffit alors de cliquer sur « choisir le fichier », sélectionner un icône et faire ajouter, et faire de même pour les 10 autres icônes.

je rajoute aussi 2 nouveaux icônes, 1 bleue pour les températures inférieures à 16°, et 1 rouge pour les températures supérieures à 25°:

  16-temp_low17-temp_high

18-choix-icone-temperature-1024x506

Ensuite je choisis l’icône « HG » par défaut pour la sonde virtuelle, j’obtiens donc :

19-icone-hg-par-defaut-dans-la-sonde

3.2 – Modifications du périphérique

Ensuite, en allant dans l’onglet « avancé » du périphérique, et on rajoute un champ « Label » que l’on nommera « lblTempBureau »

20-ajouter-un-label

21-label-lbltempbureau

Il faut ensuite cliquer sur « Main » (sur la  droite) pour que le labelle s’affiche, et enregistrer les modifications.

3.3 – Un peu de programmation

Maintenant, il faut s’occuper du code LUA, et là je ne suis trop inspiré.

Tout d’abord, pour changer d’icône par programmation, une petite recherche Google montre qu’il faut utiliser l’instruction :

fibaro:call(selfId, « setProperty », « currentIcon », « xxxx »)   , où xxxx est la valeur numérique de l’icône.

Mais je ne comprends pas, mon icône s’appelle tempHG.png, donc quel rapport avec une valeur numérique ???

De nouveau sur google, et je trouve comment connaitre la valeur numérique à 4 chiffres d’un icône.

ce n’est peut être pas la meilleure mais ça fonctionne!

dans le navigateur internet, il suffit de saisir:

http://login:password@<IP>/api/virtualDevices, en changeant bien évidemment « login », « password » et « <IP> » par ses propres paramètres de connexion à son HC2.

Il est alors affiché un fichier texte effrayant qui contient de nombreuses informations sur les différents périphériques virtuels déclarés dans le HC2.

Il suffit de rechercher (avec l’outil « recherche », ça va plus vite !) le nom du périphérique en question (« sonde bureau 2 » dans mon cas),  et on tombe sur:

{« id »:61, »name »: »SONDE BUREAU 2″, »roomID »:2, »type »: »virtual_device », »properties »:{« deviceIcon »:1042

ça nous donne la valeur « 1042 » pour l’icône « HG ».

Après, en remplaçant par l’icône « 16 », on recommence l’opération avec la requête HTTP ci-dessus, pour récupérer la valeur de l’icône « 16 » et ainsi de suite jusqu’à l’icône « 25 » (prenez des notes, ça serait dommage d’avoir à tout refaire !).

On en a pour un bon quart d’heure!
Normalement, les valeurs numériques se suivent (sauf si on s’est trompé et qu’on a supprimé et ajouté un icône).
Pour la suite des évènements, on n’aura pas le droit à l’erreur… on verra pourquoi.

Maintenant, on a tout ce qu’il faut, on peut passer au code:
pour l’exemple, on va dire que l’icône HG est 1000, l’icone 16 est 1001, 17 est 1002, 18 est 1003, 19 est 1004, 20 est 1005, 21 est 1006, 22 est 1007, 23 est 1008, 24 est 1009 et 25 est 1010, le thermo bleu est 1011 et le thermo rouge est 1012

local temp=fibaro:getGlobalValue(« OSxxxxxxxxxx_V1 »)
temp=temp/10
local selfId = fibaro:getSelfId();
 
if temp >= 26 then fibaro:call(selfId, « setProperty », « currentIcon », « 1012 ») else
if temp >= 25 then fibaro:call(selfId, « setProperty », « currentIcon », « 1010 ») else
if temp >= 24 then fibaro:call(selfId, « setProperty », « currentIcon », « 1009 ») else  
if temp >= 23 then fibaro:call(selfId, « setProperty », « currentIcon », « 1008 ») else
if temp >= 22 then fibaro:call(selfId, « setProperty », « currentIcon », « 1007 ») else
if temp >= 21 then fibaro:call(selfId, « setProperty », « currentIcon », « 1006 ») else
if temp >= 20 then fibaro:call(selfId, « setProperty », « currentIcon », « 1005 ») else
if temp >= 19 then fibaro:call(selfId, « setProperty », « currentIcon », « 1004 ») else
if temp >= 18 then fibaro:call(selfId, « setProperty », « currentIcon », « 1003 ») else
if temp >= 17 then fibaro:call(selfId, « setProperty », « currentIcon », « 1002 ») else
if temp >= 16 then fibaro:call(selfId, « setProperty », « currentIcon », « 1001 ») else
fibaro:call(selfId, « setProperty », « currentIcon », « 1011 »)
end
end
end
end
end
end
end
end
end 
end 
end
fibaro:call(selfId, « setProperty », « ui.lblTempBureau.value », temp.. »° -« ..fibaro:getGlobalValue(« OSxxxxxxxxxx_V2″).. »% »)
fibaro:log(temp.. »°C – « ..fibaro:getGlobalValue(« OSxxxxxxxxxx_V2″).. »% »)
fibaro:sleep(6*1000)

4 – GESTION DE LA PLAGE COMPLETE -30° à +45°

Maintenant que le fonctionnement est validé, il faut pouvoir gérer un affichage de -30° à +45°, ce qui nous donne pas moins de 76 icônes !!!

4.1 – La création des icônes

J’ai délégué l’élaboration de ces icônes (un grand merci à mon cher fils courageux et serviable !), et ça n’a pas été une mince affaire !

Pour ne pas passer 15 jours à faire un visuel exceptionnel, nous n’avons pas mis une belle police digitale, ni conçu un thermomètre très élaboré.

Nous nous sommes cantonné à l’essentiel:

22-tempm3023-tempp45

Donc une fois les icônes réceptionnés, je les ai enregistrés un par un dans le HC2 en respectant scrupuleusement l’ordre de température, on verra également pourquoi.

J’ai ensuite répertorié les valeurs à 4 chiffres des icônes, et j’ai donc eu:

« -30° » en 1044… et « +45° » 1119, le thermomètre BLEU en 1120, le thermomètre rouge en 1121.

4.2 – Une programmation bien lourde !

Je reprends alors le code LUA, et c’est parti pour les innombrables lignes de IF THEN et END, du genre:

if temp >= 46 then fibaro:call(selfId, « setProperty », « currentIcon », « 1121 ») else
if temp >= 45 then fibaro:call(selfId, « setProperty », « currentIcon », « 1119 ») else
if temp >= 44 then fibaro:call(selfId, « setProperty », « currentIcon », « 1118 ») else
…….
if temp >= -29 then fibaro:call(selfId, « setProperty », « currentIcon », « 1045 ») else
if temp >= -30 then fibaro:call(selfId, « setProperty », « currentIcon », « 1044 ») else
if temp < -30 then fibaro:call(selfId, « setProperty », « currentIcon », « 1120 ») else
… suivi des 78 END !!!
Le reste du code ne change pas.

4.3 – C’est parti pour les tests…

Voilà le résultat dans l’interface HC2 :
 
24-sonde-virtuelle-hc2-evoluee

25-sonde-congel-evoluee

et sur l’IPAD :

26-miniature-sonde-evoluee-sur-ipad

C’est quand même beaucoup mieux…

À chacun de voir si le boulot en vaut la chandelle, moi je trouve que oui !

C’est terminé ? Non.

4.4 – Touche ultime : La patte de l’expert !

Je ne suis pas du tout satisfait du code, c’est vraiment développé à l’arrache, ce n’est pas propre!

Je sais qu’il y a quelque chose à faire pour optimiser ce code avec tous les numéros d’icônes qui se suivent, mais je sèche sur la syntaxe.

Je dois dire que je n’ai pas chercher trop longtemps, j’ai fait appel à mon cher ami Steven (un grand merci à lui pour son aide très précieuse).

je lui envoie mon code, et quelques minutes plus tard, il m’envoie ça :

local temp=fibaro:getGlobalValue(« OSxxxxxxxxxx_V1 »)
temp=temp/10
local temp2= math.floor(temp + .5)
local selfId = fibaro:getSelfId();
if temp2 >= 46 then fibaro:call(selfId, « setProperty », « currentIcon », « 1121 ») 
elseif temp2 < -30 then fibaro:call(selfId, « setProperty », « currentIcon », « 1120 »)
else fibaro:call(selfId, « setProperty », « currentIcon », » »..(1074+temp2))
end
fibaro:call(selfId, « setProperty », « ui.lblTempBureau.value », temp.. »° -« ..fibaro:getGlobalValue(« OSxxxxxxxxxx_V2″).. »% »)
fibaro:log(temp.. »°C – « ..fibaro:getGlobalValue(« OSxxxxxxxxxx_V2″).. »% »)
fibaro:sleep(6*1000)

Et ça fonctionne. Steven a réussi a simplifier le code, en passant d’environ 200 lignes à 11 !!!

Evidemment, pour les icônes, il n’y a pas d’alternative.

5 – UN AUTRE EXEMPLE

Pour finir cet article , je viens de réaliser un périphérique virtuel similaire pour la consommation instantanée EDF que je récupère de mon ECO-DEVICES.

Dans l’interface HC2, ça donne:

28-conso-edf

et la miniature sur IPAD :

29-conso-edf-ipad

Pour ce périphérique, je n’avais besoin que de 7 icônes pour le déplacement de la flèche entre A et G, donc dans le code, je suis resté avec des IF puisque c’était plus simple et j’ai mis des paliers de 1000w.

Et le résultat est plutôt sympa.

J’avoue qu’il faut être un peu fou et avoir du temps (les nuits sont quelquefois très courtes !), mais le résultat est là.

3 Comments

  1. Arnaud
    4 avril 2015 @ 23 h 01 min

    Super, grace à ton site je m’intéresse de plus en plus d’ajouter une HC2 a ma Zibase.
    Quelques idées pour nous faire découvrir plus de la HC2 : une petite video de l’interface sur IPAD, encore plus de tuto sur LUA…
    Un grand merci

    • fredo
      4 avril 2015 @ 23 h 16 min

      Bonsoir et merci.
      Je souhaitais mettre en place dans l’accueil une rubrique « vos suggestions », où chacun pourrait librement faire des remarques pour l’amélioration du site, et aussi des demandes ou idées de tutoriels et autres articles.
      Pour le LUA, aïe aïe aïe, c’est vraiment mon gros point faible, mais promis, je vais m’y mettre sérieusement.
      ;o)

  2. HOME CENTER 2 : Visuel des périphériques virtuels | Frédo et ses idées lumineuses
    17 avril 2015 @ 17 h 53 min

    […] Visuel des périphériques virtuels […]

Leave a Reply