Aller au contenu

Pressbutton


Berale64

Messages recommandés

Je me demande si Fibaro va, un jour, corriger cette inconsistance dans les VD.

 

Pour modifier une étiquette, on utilise son ID:   fibaro:call(IDVD, "setProperty", "ui.Label1.value"," blabla");

Par contre pour actionner un bouton, il faut connaitre sa position dans le VD: fibaro:call(IDVD, "pressButton", 3);

 

Pourquoi pas son ID, ce qui rend les modifs beaucoup plus souples.

Étrangement, en mode Bloc, c'est bien l'ID du bouton qui est utilisé;

 

Peut être les pros du LUA ont une idée pour scanner le contenu d'un VD, rechercher un ID particulier et en retourner le numéro qui va bien.

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

Le scan serait une boucle facile à  faire (grâce à  la lecture du device via l'API), mais ça oblige à  mettre ces quelques lignes de LUA dans chaque bouton, chaque main loop, et chaque scène qui va cliquer sur le boutons grâce à  leur ID.... donc un peu lourd.

 

Je suis d'accord, ça serait bien que Fibaro fasse évoluer cette fonction. Est-ce que ça leur a déjà  été soumis ?

Lien vers le commentaire
Partager sur d’autres sites

J'ai quelques problèmes  dépatouiller le json des devices.

 

Voilà  la structure:

{"id":248,"name":"Pluviometrie","roomID":3,"type":"virtual_device","visible":true,"enabled":true,"properties":{"deviceIcon":1052,"ip":"","port":80,"log":"","logTemp":"","currentIcon":"1052","log":"","logTemp":"","mainLoop":"","ui.Label1.value":"0 mm","ui.Label2.value":"21 mm","ui.Label3.value":"21 mm","ui.Label4.value":"11/22/15 10:00:28","ui.Label5.value":"2 mm","visible":"true",

"rows":[{"type":"label","elements":[{"id":1,"lua":false,"waitForResponse":false,"caption":"Today","name":"Label1","favourite":false,"main":false}]},
{"type":"label","elements":[{"id":2,"lua":false,"waitForResponse":false,"caption":"Last Day","name":"Label5","favourite":false,"main":false}]},
{"type":"label","elements":[{"id":3,"lua":false,"waitForResponse":false,"caption":"Last 7 days","name":"Label2","favourite":false,"main":false}]},
{"type":"label","elements":[{"id":4,"lua":false,"waitForResponse":false,"caption":"Last 30 days","name":"Label3","favourite":false,"main":false}]},
{"type":"button","elements":[{"id":5,"lua":true,"waitForResponse":false,"caption":"Refresh","name":"Button11","empty":false,"msg":"---- Data WU ---\nlocal cle_api = \"e165a5bb1d584e41\" -- cle api de chez Wunderground\nlocal pws = \"ICOULOUN7\" -- station ID

et voilà  le code:

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

local devicesJSon = api.get("/devices")
 
 
for k, v in pairs(devicesJSon) do
   if (v.type == "virtual_device") then
      fibaro:debug(v.name);
      Rows = v.properties.rows;
      fibaro:debug(#Rows);
 
        for k2, v2 in pairs(Rows) do
     --  fibaro:debug(v2.type);
     
          if (v2.type == "button") then
      
              fibaro:debug(v2.elements["name"]);
         
          end
        end
   end
end

mais j'obtiens "nil" quand j'imprime le nom du bouton. J'ai pas encore tout compris dans les structures json !!! :(

Lien vers le commentaire
Partager sur d’autres sites

j'ai test la solution du non développeur Lazer, et ça fonctionne

--[[
%% properties
%% globals
--]]
 
 
local devicesJSon = api.get("/devices")
 
 
for _, v in pairs(devicesJSon) do
   if (v.type == "virtual_device") then
      fibaro:debug(v.name.." ["..v.id.."]")
      Rows = v.properties.rows
      fibaro:debug("#rows : " ..#Rows)
 
      for _, v2 in pairs(Rows) do
        fibaro:debug("Row type : " ..v2.type)
        if (v2.type == "button") then
          fibaro:debug(v2.elements[1].name)
        end
      end
   end
end

Lien vers le commentaire
Partager sur d’autres sites

Et voilà. ça roule:

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

local devicesJSon = api.get("/devices")
 
 
for k, v in pairs(devicesJSon) do
   if (v.type == "virtual_device") then
      fibaro:debug("----"..v.name);
      Rows = v.properties.rows;
      fibaro:debug(#Rows);
 
        for k2, v2 in pairs(Rows) do
     --  fibaro:debug(v2.type);
     
          if (v2.type == "button") then
              n = #v2.elements;
              for i = 1,n do
                fibaro:debug(v2.elements[i].name.."  "..v2.elements[i].id);
              end
          end
        end
   end
end

L'idée, maintenant, serait de faire une variable globale, comme les IDs pour GEA, avec juste le nom des boutons, mais ils doivent être tous différents ou alors nom du VD concaténé avec nom du bouton.

Lien vers le commentaire
Partager sur d’autres sites

oui je te conseille plutôt de concaténer avec le nom du VD.

Sinon il est quasi certain que tu auras des boutons en double (un exemple : tous mes fils pilotes ont chacun un VD qui sont tous identiques)

 

pour la variable globale, il y a l'astuce du json.encode() pour stocker un tableau dans la VG.

Lien vers le commentaire
Partager sur d’autres sites

Voilàle résultat.

La clé est donc "nom du VD" signe "_" ID du bouton.

Le tout est enregistré dans une variable globale VDButtons que vous devez créer.

--[[
%% properties
%% globals
--]]
 
local keyButtons = "{";
local devicesJSon = api.get("/devices");
 
 
for k, v in pairs(devicesJSon) do
  
   if (v.type == "virtual_device") then
      
      Rows = v.properties.rows;
      fibaro:debug("----"..v.name.."  "..#Rows);
 
        for k2, v2 in pairs(Rows) do
     
          if (v2.type == "button") then
              n = #v2.elements;
              for i = 1,n do
                fibaro:debug(v2.elements[i].name.."  "..v2.elements[i].id);
                local str = v.name.."_"..v2.elements[i].name;
                str = str:gsub("[éêèë]", "E"):gsub("EE", "E"):gsub("[ûüù]", "U"):gsub("UU", "U"):gsub("[àâä]", "A"):gsub("AA", "A"):gsub("[öô]", "O"):gsub("OO", "O"):gsub("[îï]", "I"):gsub("II", "I"):gsub("%W", "_");
                fibaro:debug(str);
                keyButtons = keyButtons..'"'..str..'":'..v2.elements[i].id..',';
              end
          end
        end
   end
end
keyButtons = keyButtons.."}";
print(keyButtons);
fibaro:setGlobal("VDButtons", keyButtons);
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...