Aller au contenu
ebouilleur

[VD] concaténation variable

Recommended Posts

Bonjour, 

 

J'essayer de faire un truc, mais je n'y arrive pas et ca commence a me souler :(

Pour info, je suis partis du VD Volets V2.0b que j'ai pas mal retravailler.

 

Ce que j'essaye de faire, c'est d'afficher dans une étiquette la valeur concaténé de 2 variable obtenu a parti de clic sur des boutons

Genre :

bouton 1 : Ouvrir

bouton 2 : salon

et je souhaite que mon étiquette affiche "Ouvrir salon"

 

C'est possible?

une piste svp?

Merci

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu mets bouton 1 dans une variable global

bouton 2 dans une autre.

et lorsque tu affiches tu fais VG1..VG2

c’est ça ?

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour le coup, non je l'ai pas mis dans une variable globale, j'espère que ça marcherai sans au seins du même module.

Si pas le choix je vais faire ça.

merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @ebouilleur

Je vais essayer de récapituler point par point ce que je pense avoir compris.

Ainsi, réajuste chacune de mes affirmations si nécessaire, cela permettra à tout le monde de mieux comprendre ton besoin.

 

- Tu es parti d'un VD existant que tu as modifié. (Peux-tu éventuellement mettre un lien vers la page de ce VD? Je ne l'ai pas trouvé)

- Tu as rajouté un champ "Etiquette" dans ce VD

- Tu as bien veillé à ce que ça ne perturbe pas le fonctionnement du VD : Ordre des boutons appuyés

- Sur ce VD, lorsque tu appuies sur des boutons, ça te modifie la valeur de deux variables

- Cela semble donc être une variable LUA classique. Mais où est déclarée et modifiée cette variable? Dans la mainloop du VD?

 

Admettons que tes variables soient dans la mainloop, tu devrais les afficher dans une étiquette de la manière suivante :

local var1 = "ouvrir";
local var2 = "salon";

fibaro:call(fibaro:getSelfId(), "setProperty", "ui.NomLabel.value", var1.." "..var2);

 

Modifié par J3R3M

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici le VD d'origine : http://blog-fibaro.fr/tuto-ouvrants-telecommande-universel-pour-volets-roulant/ (il est aussi présent sur le forum je l'avait aperçu)

 

J'ai rajouté en effet un nouveau champ étiquettes pour des raisons de simplicité (et j'aurais supprimer les autres après)

 

Je n'ai rien dans la mainloop du VD.

 

En fait sur mon 2eme bouton (qui est le bouton ouvrir), c'est là que je veux faire la concaténation, mais je pense que la variable n'existe pas.

je fais donc

 

local VoletsNameZone = " Ouvrir " .. Var_NameZone ;
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label4.value", VoletsNameZone )
Modifié par ebouilleur

Partager ce message


Lien à poster
Partager sur d’autres sites

Peux-tu mettre ici le code complet de ton bouton s'il-te-plaît (en utilisant les balises code en LUA) ?

Egalement, peux-tu faire un screenshot de ton VD ?

L'étiquette que tu cherche à modifier s'appelle bien "Label4" dans ton VD ?

Partager ce message


Lien à poster
Partager sur d’autres sites

image.png

 

Voici le code du bouton "Maison" :

-- Nom du Programme + id des volets ex : {"RDC", 8, 15, 23}
local Var_Id = {"Maison", 11, 9, 5, 7, 20}

-- Ne Rien Modifier en dessous de cette ligne ---------------
local Var_NameZone = (tostring(Var_Id[1])) -- Nom de la Zone ex : "RDC = "

fibaro:setGlobal('VoletsNameZone',Var_NameZone);
-- Sauvegarde des id dans la variable globale
fibaro:setGlobal('VoletsZone',json.encode(Var_Id));
local Var_Name = ""

  for i = 2,#Var_Id do
  
      local TempName = fibaro:getName(Var_Id[i])
      local TempValue = fibaro:getValue(Var_Id[i], 'value' ); -- recuperation de la valeur du module
      Var_Name = (Var_Name ..TempName .."=" ..TempValue .." - ")
  
  end
-- Mise a jour label
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label3.value", Var_NameZone)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", Var_Name)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label4.value", Var_NameZone)

et le bouton "ouvrir" :

fibaro:setGlobal('VoletsSlider', 99);
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", " = " .."Ouvrir" .."  ")

fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label4.value", " Ouvrir " .. Var_NameZone )

Et oui là ou je veux afficher "ouvrir maison" c'est bien l'étiquette 4

Merci

 

PS : je viens de comprendre qu'il faut utiliser le 1er bouton pour le code et pas "extrait de code"...

Modifié par ebouilleur

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @ebouilleur,

En fait, si je comprends bien, tu as actuellement deux étiquettes : une Action et l'autre Zone, contenant chacune une valeur.

Tu souhaites "simplement" que le message "mixé" apparaisse dans une seule et même étiquette au lieu de deux distinctes, c'est bien ça ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors, après avoir compris, sache que ce que tu souhaites va complexifier le code pour simplement un affichage différent dans le VD.

Lorsque deux valeurs différentes sont dans la même variable, il va falloir les séparer pour en créer deux distinctes, en passant par une fonction.

Cette fonction peut choisir les x premiers caractères et les associer à une première variable et affecter les autres à une seconde variable. Ce qui implique que le nombre de caractères doit être le même à chaque fois.

Sinon, il est aussi possible de séparer ces valeurs par un caractère spécifique, comme un tiret ou même un espace.

Seulement, il ne faut pas que ce caractère soit présent autre part dans une des chaînes de caractère, sous peine d'obtenir une affichage erroné.

 

Je pense que ça ne vaut pas forcément la peine de s'embêter pour juste modifier un affichage.

Mais, si tu souhaites le faire par défi ou simplement parce que tu le veux absolument, regarde du côté de la fonction string.gsub() ;)

Modifié par J3R3M

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 4 minutes, J3R3M a dit :

Lorsque deux valeurs différentes sont dans la même variable, il va falloir les séparer pour en créer deux distinctes, en passant par une fonction.

Cette fonction peut choisir les x premiers caractères et les associer à une première variable et affecter les autres à une seconde variable. Ce qui implique que le nombre de caractères doit être le même à chaque fois.

Oui mais une fois qu'elles seront réuni, il n'y aura pas de traitement à faire, donc je n'aurais pas besoin de les scinder (et donc d'utiliser une fonction). j'avoue que c'est pas clair...

 

C'est une demande de ma chérie, qui ne voit pas tout d'un seul coup d’œil sur l'écran de son smartphone ^^ 

Je vais regarder la fonction, merci

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 7 heures, ebouilleur a dit :

Oui mais une fois qu'elles seront réuni, il n'y aura pas de traitement à faire, donc je n'aurais pas besoin de les scinder (et donc d'utiliser une fonction). j'avoue que c'est pas clair...

Le besoin de les distinguer se fera sentir lorsque tu voudras changer la valeur de l'action et/ou la zone dans l'étiquette.

Sinon, tu remplaceras tout à chaque appui sur un bouton, quel qu'il soit ;)

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 20 heures, J3R3M a dit :

Le besoin de les distinguer se fera sentir lorsque tu voudras changer la valeur de l'action et/ou la zone dans l'étiquette.

Sinon, tu remplaceras tout à chaque appui sur un bouton, quel qu'il soit ;)

Oui l'idée était de tout remplacer sans se poser des questions :)

Merci

Modifié par ebouilleur

Partager ce message


Lien à poster
Partager sur d’autres sites

×