Aller au contenu

Messages recommandés

Posté(e)

Bonjours a tous,

 

Pourquoi UNIVERSEL

 

Parce que cette télécommande peut facilement être utilisé pour de FGD

par exemple, il suffit de mettre l'id d'un FGD et ca fonctionne (pour les puristes il faudra changer le mots volets par FGD)

 

Je débute en lua, j'ai donc décider de me faire une télécommande via un Module Virtuel

 

Mon objectif principal et d' optimisez au maximum mon code je pense que les experts du lua vont encore diminuer le nombres de lignes

 

J'ai donc réfléchi (oui ca m'arrive) pour que cela soit le plus simple possible a gérer. j'ai pas envie de tous refaire a chaque fois qu'un ID change

 

la télécommande ce divise en 3 Zones + 1 Slider

 

le Slider sert a choisir la valeur d'ouverture du volet je ne parlerai donc jamais de fermeture mais d'une ouverture a "0"

 

Chaque Zone ce divise en 3 boutons

 

Ouvrir = ouverture de la zone

Slider = ouvre la zone en fonction de la position du slider

Fermer = fermeture de la zone

 

Pour installer ce module il va falloir crée plusieurs variables

 

Il faut absolument respecté les majuscules et minuscules

 

2 variables globales

 

IdI9305=(id de votre téléphone)

                             ex : IdI9305=134 (cette variable va servir un faire un push lors de l'actionnement d'une zone)

VoletsSlider=0

                             elle va nous permettre a stocker la valeur de notre slider

 

3 Variables prédéfinies

 

V_Zone1

V_Zone2

V_Zone3

 

dans chacune de ces variables on va indiqué les id des volets attention a la syntaxe.

si vous voulez modifier les id il faut supprimer la variable prédéfinies et la recrée

L'id du volets peut être mis dans plusieurs zone

 

exemple :

 

V_Zone1=5,7,9

V_Zone2=19,23,25

V_Zone3=29,27,17,5

 

post-374-0-33490900-1423924441_thumb.jpg

 

Voila le plus dur est fait.

 

Pour le slider Voici ce que j'ai fais. Le début du code a été récupérer sur le forum

-- Permet de récuperer la valeur slider
function map_range( a1, a2, b1, b2, s )
return b1 + (s-a1)*(b2-b1)/(a2-a1)
end

local V_Slider = map_range(0, 100, 0, 100, _sliderValue_ );

-- Mise a jour de la Variable globale Slider
fibaro:setGlobal('VoletsSlider', V_Slider)
fibaro:debug( "Valeur Slider = " ..V_Slider )
-- mise a jour des labelles
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblZone1.value", " Slider = " ..V_Slider)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblZone2.value", " Slider = " ..V_Slider)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblZone3.value", " Slider = " ..V_Slider)

je vais vous donnez le code pour un bouton c'est sensiblement le même pour les autres.

-- traitement de la varialble globale Merci Steven
function split(text, sep)
           local sep, fields = sep or ":", {}
           local pattern = string.format("([^%s]+)", sep)
           text:gsub(pattern, function(c) fields[#fields+1] = c end)
return fields
end

local mon_tableau = fibaro:getGlobal('V_Zone1');
local V_Id = split(mon_tableau, ",")
-- fin du traitement de la varialble globale 

-- Numero de la Zone
local Zone = 1 
-- Valeur 0=Fermer - 99 = Ouvert
local V_Status = fibaro:getGlobalValue("VoletsSlider")                     
-- Recuperation de id du tel pour le push
local IdTel = fibaro:getGlobalValue("IdI9305") 
-- Initialisation de la table
local V_IdValue = {};
fibaro:debug("Nombres Modules = " ..#V_Id)

  for i = 1,#V_Id do
               
      fibaro:call(V_Id[i], "setValue", V_Status ); -- Commande Module
      V_IdValue[i] = fibaro:getValue(V_Id[i], 'value' ); -- recuperation de la valeur du module
      fibaro:debug( V_IdValue[i] .."  " .. i )
  
  end

local V_Status = fibaro:getGlobalValue("VoletsSlider")

fibaro:sleep(2*1000)
-- Mise a jour label
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblZone1.value", #V_Id .." Volets")
-- Envoi du Push
fibaro:call(IdTel, "sendPush", "Les " ..#V_Id .." Volets de La Zone " ..Zone .." sont Ouverts")

Voila ce que ca donne au final

 

post-374-0-71722700-1423924908_thumb.jpg

 

Je voulais tous particulièrement dire merci a lionel57, Berale24 pour la réalisation de tableaux

Ainsi qu'a Steven pour le bout de code qu'il a partagé sur le forum et donc je me suis servi

 

 

Voici le lien pour télécharger le version 1.0

 

Volets_V1.0.vfib

 

Télécommande Volets, FGD etc... V2.0

(8 Zone ou Prg)

 

 

post-374-0-32178700-1425922092_thumb.jpg

 

Il faut crée 2 variables globale :

 

- VoletsSlider (si déja crée aucun soucis ca fonctionnera)

- VoletsZone

-- Nom du Programme + id des volets ex : {"RDC", 8, 15, 23}
local Var_Id = {"Valeur a renseigner"}

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

-- 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)

il faut renseigner la zone + les id

 

Exemple :

-- Nom du Programme + id des volets ex : {"RDC", 8, 15, 23}
local Var_Id = {"Rez De Chaussé", 5, 7, 9}

cette manipulation est a faire pour chaque touche Prg que vous voulez utiliser

 

Voici le code lorsque l'on appui sur Envoi :

-- Récupération de vos id en début de vos scripts
Var_Id=json.decode((fibaro:getGlobal('VoletsZone')));
local Var_Zone = tostring(Var_Id[1])

-- Valeur 0=Fermer - 99 = Ouvert
local V_Status = fibaro:getGlobalValue("VoletsSlider") 
-- Recuperation de id du tel pour le push
local IdTel = fibaro:getGlobalValue("IdI9305") 
-- Initialisation de la table
local V_IdValue = {};
fibaro:debug("Nombres Modules = " ..#Var_Id)

  for i = 2,#Var_Id do
      V_IdValue[i] = fibaro:getValue(Var_Id[i], 'value' ); -- recuperation de la valeur du module         
      if V_IdValue[i] ~= V_Status then 
         fibaro:call(Var_Id[i], "setValue", V_Status ); -- Commande Module
      else
        fibaro:debug(V_IdValue[i] .." = " .. V_Status )
      end
  end

fibaro:sleep(2*1000)
-- Mise a jour label
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", "Les " ..#Var_Id-1 .." Modules de La Zone " ..Var_Zone .." ACTIONNES")
-- Envoi du Push
fibaro:call(IdTel, "sendPush", "Les " ..#Var_Id-1 .." Volets de La Zone " ..Var_Zone .." ACTIONNES")

Utilisation :

 

On sélectionne un programme le nom des modules ainsi que leurs valeurs actuel s'affiche (Mise en page pas toujours super car on affiche cela dans une étiquette)

On sélectionne une valeur avec le SLIDER ou OUVRIR ou FERMER

On sélectionne Envoyer et c'est parti

 

Je vais peut être ajouter 3 nouvelles touche pour actionner des Scenes

 

Voici le lien pour télécharger le version 2.0b :

 

Volets_V2.0b.vfib

 

 

Voici un script pour la télécommande qui permet de sélectionner tous les volets sans avoir a donner les ID  Fonctionne avec des FGRM222 et FGRM221

 

Il suffit de copier ce script dans l'un des 8 prg

-- Ne Rien Modifier en dessous de cette ligne ---------------
local HC2 = Net.FHttp("127.0.0.1", 11111)
local reponse = HC2:GET("/api/devices")
local NombreModule = json.decode(reponse)
 
local Var_Id = {"Tous"}
 
for i = 3, #NombreModule do
   local theType = string.sub(fibaro:getType(i), 12,15)
   
   local Var_Name = fibaro:getName(i)
   -- Si égale à  'blind'
   if (theType == 'FGRM') then
      local t_id = #Var_Id + 1
      table.insert(Var_Id, t_id, tonumber(i))
      fibaro:debug("Type : "..theType..' - Volets ID '..i .." = "..Var_Name)
   end  
end
 
local Var_NameZone = (tostring(Var_Id[1])) -- Nom de la Zone ex : "RDC = "
 
-- 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)
 
  
  • Upvote 4
Posté(e)

super boulot !!

 

suggestion, ce serait sympa de pouvoir definir les zones avec des noms type, rdc, etage, chambre ou autre plutôt que Zone 1 ou zone 2 non ?

Posté(e)

Dans ce modules Virtuel tout ce qui est étiquettes peut être changer sans que cela pose probléme.

c'est l'ID qu'il ne faut surtout pas toucher

Posté(e)

@moicphil

Cadeau de saint valentin pour madame une belle télécommande :60: :60:

J'ai aussi fais cela par rapport au travail de lionel57 et de sont application sur android

tu vois que le 54 et le 57 ne sont pas en guerre :)

Posté(e)

Merci mprinfo.

 

Je vais tester / décortiquer ton module universel.

Je mettais fait un MV pour gérer mes volets roulants (mon premier MV  :rolleyes:) mais ta version avec le slider me botte!

Posté(e)

en fait le slider mets a jours la variable global VoletsSlider

 

donc grâce a cette variable tu peux envoyer n'importe quel valeur a tes modules volets roulant ou modules dinnable

  • 2 semaines après...
Posté(e)

oui c'est possible mais je vois pas l'intéret

le slider sert a choisir une valeur

ensuite tu n'as plus qu'a choisir le bouton slider de la zone que tu veux controlé

Posté(e)

Effectivement, tu sais, je suis un peu con  :P

 

Par contre si on ne veut pas de notification push par exemple? ou si on veut sur 2 tel différent?   :13:

Posté(e)

pour le push (envoi de notification sur le tel)

-- Recuperation de id du tel pour le push
local IdTel = fibaro:getGlobalValue("IdI9305") 
-- Envoi du Push
fibaro:call(IdTel, "sendPush", "Les " ..#V_Id .." Volets de La Zone " ..Zone .." sont Ouverts")


la ligne 3 récupère l'ID du tel de la variable globale IdI9305 (c'est la ref de mon tel)

la ligne 5 envoi le push

dans le bouton c'est la ligne 18 et 37

il suffit de mettre -- au debut de la ligne ou de la suprimer

 

il faut faire cela pour chaque bouton.

 

pour avoir plusieurs tel

je te conseil de créer une variable globale

exemple

TEL1="ID du tel 1"

TEL2="ID du tel 2"

etc.....

pour envoyer le push

-- Recuperation de id du tel pour le push

local IdTel1 = fibaro:getGlobalValue("TEL1") 
local IdTel2 = fibaro:getGlobalValue("TEL2") 
-- Envoi du Push
fibaro:call(IdTel1, "sendPush", "Les " ..#V_Id .." Volets de La Zone " ..Zone .." sont Ouverts")
fibaro:call(IdTel2, "sendPush", "Les " ..#V_Id .." Volets de La Zone " ..Zone .." sont Ouverts")


pour envoyer un push c'est la commande suivante

fibaro:call(IdTel, "sendPush", "Texte à  envoyer")

Posté(e)

Nikel merci pour tout  :13:

 

 

EDIT: pour rajouter une zone 4, que dois je modifier? créer une variable V_Zone4 et la suite ??

Posté(e)

cependant pourrais je te demander encore une faveur stp  :P

 

post-135-0-38237600-1425832769_thumb.png

 

pourrais tu faire comme dans la version à  3 zone, pas de slider ni de titre stp dans l icone du module comme ci dessus.

 

 

post-135-0-74386900-1425832869_thumb.png

 

Et faire comme ci dessus pour voir le nombre de volets et pas la valeur slider stp

 

 

Si cela prends trop de temps, ne te casse pas la tete  :13:

 

 

 

 

×
×
  • Créer...