Aller au contenu

Afficher Les Valeurs D'une Variable Dans Un Vd Sour Hc2


jojo

Messages recommandés

Pour la HCL, j'avais en son temps fait un tuto pour afficher une icône dans un virtual device une icône en fonction de la valeur d'une variable globale, et de pouvoir modifier sa valeur (également depuis son smartphone), quelle se mette à  jour lors d'un restart de la box, etc pour une HCL

 

En passant sous HC2, j'avais gardé le même principe, et pour chaque VD (et donc chaque variable), la main loop tournait en continu pour vérifier que l'icône correspond bien à  la valeur de la variable. Ce n'est vraiment pas optimal. Je vais vous expliquer ici la solution que j'ai mise en place pour que la charge sur la box soit moins importante.

 

Merci à  Steven, i-magin et mprinfo qui m'ont aidé pour débugger

 

Création des variables

Je prendrai dans mon exemple 2 variables globales :

  1. Auth_PS3 avec 2 valeurs possibles : "Autorisé" et "Interdit"
  2. Auth_TV avec 2 valeurs possibles : "Autorisé" et "Interdit" (mais les valeurs pourraient être différentes que pour la 1° variable, ou avoir plus que 2 valeurs)

 

Modules virtuels

Chaque variable a son module virtuel.

Il a pour objectif d'afficher une icône différente en fonction de la valeur de la variable.

Pour facilement les retrouver, j'ai créé une section "Section Virtuelle" et dedans une pièce "Variables".

Chaque VD a le nom suivant : "Var_xxxx" où xxxx est le nom de la variable globale.

Dans notre exemple : "Var_Auth_PS3" et "Var_Auth_TV".

post-1320-0-30132700-1426852983_thumb.png

L'icône par défaut du VD est et doit rester l'horrible cube bleu (facile ainsi de repérer si la VD est à  jour)

post-1320-0-94228200-1426852985_thumb.png

J'ai créé les boutons suivants :

post-1320-0-03411500-1426852988_thumb.png

Bouton 1 : Autorisé / Interdit

Il permet simplement de faire le switch de la valeur de la variable.

C'est le bouton par défaut du VD.

Il n'y a pas d'icône associée.

post-1320-0-71925800-1426852989_thumb.png

-- nom de la variable à  modifier
local variable = "Auth_PS3"

if fibaro:getGlobal(variable) == "Interdit"
  then
    fibaro:call(fibaro:getSelfId(), "pressButton", "3")
  else
    fibaro:call(fibaro:getSelfId(), "pressButton", "4")
end  

Label : Statut

afficher en texte la valeur de la variable

post-1320-0-19821900-1426852992_thumb.png

Bouton3 : Autorisé

c'est le bouton qui est appelé pour mettre la variable à  "Autorisé"

Il contient l'icône qu'on veut voir affichée (comme ça on ne doit pas chercher son ID)

post-1320-0-15850800-1426853079_thumb.png

fibaro:setGlobal('Auth_PS3', 'Autorisé')
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Statut.value", 'Autorisé') 

Bouton4 : Interdit

c'est le bouton qui est appelé pour mettre la variable à  "Interdit"

Il contient l'icône qu'on veut voir affichée (comme ça on ne doit pas chercher son ID)

post-1320-0-36956000-1426854235_thumb.png

fibaro:setGlobal('Auth_PS3', 'Interdit')
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Statut.value", 'Interdit') 

N.B. l'ID de ce bouton ne peut pas être appelée par le bouton Switch, mais seulement son numéro QUI CHANGE si vous changez l'ordre. C'est débile, mais c'est comme ça …

 

Utilisation

  1. On clique sur le bouton principal, et il switch la valeur de la variable
  2. On peut utiliser Google Calendar pour lui dire d'appuyer directement sur le bouton "Autorisé" ou "Interdit"
  3. Vous devez modifier les scènes qui modifiaient directement la variable, en la faisant appuyer sur le bouton de la VD qui modifie la variable et met à  jour l'icône de la VD (car il n'y a plus le mainloop qui contrôle en continu la valeur de la variable)

 

Limitations et solution :

Lors du redémarage de la box, ou

Lors de la sauvegarde du VD (parce que vous avez fait une petite modif, ou …)

 

L'icône qui est affichée pour le VD, est l'icône par défaut du VD. Le cube bleu, pas cool …

 

Donc pour pallier à  ce problème, j'ai créé un VD supplémentaire

"Var_Update"

 

Dont voici le code : un GRAND merci à  mprinfo qui m'a beaucoup aider pour faire qqch de plus sympa et générique

----------------------------------
-- User Settings
----------------------------------
-- la Table doit avoir la structure suivante :
--     1/ nom de la variable globale entre "
--     2/ ID du VD qui affiche la valeur de la VG
--     3/ n° du premier bouton qui doit être appuyé 
--        (qui correspond à  la première valeur de la variable)
--     4/ n° du dernier bouton qui doit être appuyé
--        (qui correspond à  la dernière valeur de la variable
--         on suppose que tous les boutons se suivent de 1 en 1)
--     5/ valeurs possibles de la variable entre "
--        (elles doivent être listées dans l'ordre des boutons de la VD)

local Table = {"Auth_PS3", 23, 3, 4, "Autorisé", "Interdit",
               "Auth_TV", 289, 3, 4, "Autorisé", "Interdit",
               "Auth_VMCEtage", 290, 3, 4, "Autorisé", "Interdit",
               "Auth_TerrPar", 291, 3, 4, "Autorisé", "Interdit",
               "Auth_LumHallNuit", 362, 3, 4, "Autorisé", "Interdit",
               "ECS", 292, 3, 4, "Oui", "Non",
               "DayPart", 130, 3, 4, "After SunRise", "After SunSet",
               "Noel", 363, 3, 4, "Oui", "Non",
               "Saison", 133, 3, 6, "Printemps", "Eté", "Automne", "Hiver",
               "Chauffage", 351, 3, 5, "0", "1", "2",
               "Vacances", 293, 3, 4, "Oui", "Non"
              }

----------------------------------
-- DO not change bellow this line
----------------------------------

local i = 1
while Table[i] ~= nil do
   local VG_Nom = tostring(Table[i])
   fibaro:debug("----------------------------")
   fibaro:debug("Nom de la variable Globale = " ..VG_Nom)
   local VD_id = tostring(Table[i+1])
   local Btn_Deb = tonumber(Table[i+2])
   local Btn_Fin = tonumber(Table[i+3])
   local NbrVal = (Btn_Fin - Btn_Deb) + 1 --Nbr de valeur possibles de la variable
   fibaro:debug('NbrVal = ' ..NbrVal)
   i = i + 4
   local VG_Val = fibaro:getGlobalValue(VG_Nom)
   fibaro:debug('Valeur de la variable Globale = ' ..VG_Val)
   for j = 1,NbrVal do
     if VG_Val == Table[i+j-1] then
         fibaro:debug(VG_Nom.. ' = ' ..VG_Val)
         fibaro:debug("Il faut appuyer sur le bouton : " ..Btn_Deb.. " de la VD_id " ..VD_id)
         fibaro:call(VD_id, "pressButton", Btn_Deb)
     end
     Btn_Deb = Btn_Deb + 1
   end  -- for
   i = i + NbrVal
end -- while

Pour retrouver l'ID du VD, vous avez plusieurs solutions :

  1. Le toolkit de Krikroff
  2.  
  3. l'API : http://<IP Box>:<Port Box>/api/virtualDevices 
  4.  
  5. vous exportez le VD, et dans l'URL vous voyez ?id=xxx
  6.  
  7. vous éditez le VD, et dans l'URL vous voyez ?vid=xxx
  8.  

Il vérifie la valeur de la variable et appuie sur le bouton correspondant à  l'icône.

D/Variable.

 

Donc maintenant, quand je vois qu'une des icônes associée à  mes variables est l'icone standard, je clique sur le bouton, et tout est remis au carré. Cela évite d'avoir un main loop qui tourne pour chaque variable 99% du temps pour rien.

 

On a donc trouvé une parade à  la deuxième limitation ;-)

 

Pour la première limitation (mise à  jour après un restart de la box) la solution est facile :

Créer une scène qui appelle la VD "Var_Update" / bouton 1 au démarrage de la box.

post-1320-0-43496300-1426854242_thumb.png

post-1320-0-37245300-1426854245_thumb.png

--[[
%% autostart
--]]

fibaro:sleep (10*1000)
fibaro:call(361, "pressButton", "1") 

où 361 est l'ID du Vd "Var_Update"

Merci à  Steven qui finalement à  trouvé la solution du sleep au début de la scène, ainsi qu'à  i-magin et mprinfo pour leurs bonnes idées

  • Upvote 3
Lien vers le commentaire
Partager sur d’autres sites

Pour être précis, et puisque je suis cité, ce qui marche chez moi, c'est la scène suivante exécutée au démarrage de la box (voir ci-après)

Cette scène permet d'afficher dans un module virtuel, l'icône et le mode de chauffage correspondant à  l'état d'un module Qubino FP, uniquement au démarrage de la box (ou lors de la sauvegarde de la scène)

En marche normale, l'icône et le mode de chauffage sont gérés par les 6 boutons du module virtuel correspondant au 6 ordres possibles du Qubino FP

--[[
%% autostart
%% properties
%% globals
--]]

--
-- Scène exécutée après redémarrage box HC2
--

-- chauffage Salon
local id_qubino_salon = 255
local id_chauffe_salon = 155
local id_icone = {
[99] = 1016,
[50] = 1047,
[40] = 1048,
[30] = 1012,
[20] = 1013,
[0] = 1050,
}
local mod_chauffe = {
[99] = "CONFORT",
[50] = "CONFORT -1",
[40] = "CONFORT -2",
[30] = "ECO",
[20] = "HORS-GEL",
[0] = "ARRET"
}
fibaro:call(id_chauffe_salon, "setProperty", "currentIcon", id_icone[tonumber(fibaro:getValue(id_qubino_salon, "value"))])
fibaro:call(id_chauffe_salon,"setProperty","ui.Label1.value",mod_chauffe[tonumber(fibaro:getValue(id_qubino_salon, "value"))])
fibaro:debug("Redémarrage box : "..os.date())

Je n'ai donc pas testé la procédure de @jojo  ;) ... un peu trop complexe pour moi

Lien vers le commentaire
Partager sur d’autres sites

i-magin,

Merci pour ta précision. Plein d'espoir àla lecture de ton feedback, j'ai collé le code de la VD_Update dans la scène.

Et zut, ça ne fonctionne toujours pas. Je crois avoir compris : on ne pourrait pas faire de pressButton depuis une scène... Je t'este cela ce WE

Lien vers le commentaire
Partager sur d’autres sites

Aucun souci pour exécuter un "pressButton" depuis une scène, et heureusement....

La programmation de mon chauffage tient essentiellement dans une scène qui appelle des boutons de modules virtuels

 

Petit rappel : ne pas oublier de valider l'option "Scène Active" 

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Dans GEA ... une scène .. cela donne cela

 

{"VirtualDevice", <ID_MODULE>, <position du bouton>}

 

donne

 

fibaro:call(<ID_MODULE>, "pressButton", <position du bouton>)

 

Donc oui c'est 100% possible :)

Lien vers le commentaire
Partager sur d’autres sites

donc cela devrait être un problème chez moi uniquement, et tant mieux si ça marche chez vous. Je ferai avec.

Même si "ma" proposition semble complexe (beaucoup de call imbriqués) il me semble qu'elle a l'avantage d'être simple àmaintenir une fois mise en place.

Lien vers le commentaire
Partager sur d’autres sites

je vous le donne en 1000 : la solution au problème de démarrage de la scène avec le redémarrage de la box est venu de qui ?

 

de Steven, bien-sà»r !

 

II fallait juste mettre un sleep de 10s au démarrage de la scène, histoire de laisser le temps à  notre petite box de se réveiller en douceur  :P

Lien vers le commentaire
Partager sur d’autres sites

oui mprinfo, ce code pourrait fonctionner si mes variables ont toutes les  mêmes valeurs autorisées ("Autorisé" et "Interdit'), mais s'il y a d'autres valeurs ('Oui' ou "Non"), ou plus que 2 valeurs, ça ne marche plus. Il faudra quelque chose de plus générique, surtout si je veux le partager : Disons que toi tu utilises des variables avec comme valeurs permises "Permis" et "Non-Permis" (par exple), il faut que ça marche aussi ...

Lien vers le commentaire
Partager sur d’autres sites

merci pour l'idée, c'est une excellente piste d'amélioration, je devrais m'y pencher dessus, mais je DOIS (et ça va être dur ...) essayer de ne plus trop toucher àla domotique jusqu'au 20 avril ...

Lien vers le commentaire
Partager sur d’autres sites

  • 5 mois après...
  • 1 an après...

Bonsoir à vous,

je remonte ce sujet car j'aimerai afficher dans l'étiquette d'un VD, la valeur de consommation d'un FGS223.

Je récupère la valeur via le json, mais je ne sais pas si c'est possible d'afficher la valeur récupérée via l'étiquette, en la renommant par exemple.

A la place de "consommation", je voudrais afficher la valeur récupérée via json.

 

 

 

 

Sans titre.png

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...