mprinfo Posté(e) le 14 février 2015 Signaler Posté(e) le 14 février 2015 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 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 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) 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) 4
pepite Posté(e) le 14 février 2015 Signaler Posté(e) le 14 février 2015 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 ?
mprinfo Posté(e) le 14 février 2015 Auteur Signaler Posté(e) le 14 février 2015 il suffit du modifier dans le module virtuel Etiquette par RDC
mprinfo Posté(e) le 14 février 2015 Auteur Signaler Posté(e) le 14 février 2015 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
mprinfo Posté(e) le 14 février 2015 Auteur Signaler Posté(e) le 14 février 2015 @moicphil Cadeau de saint valentin pour madame une belle télécommande :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
Rem's Posté(e) le 14 février 2015 Signaler Posté(e) le 14 février 2015 :icon1010:C'est du beau boulot ... bravo !!!
Moicphil Posté(e) le 14 février 2015 Signaler Posté(e) le 14 février 2015 Mdr mprinfo ! Faudrait déjà que j'ai des volets roulants à la maison ! En tout cas super boulot! bravo.
turlututu74 Posté(e) le 15 février 2015 Signaler Posté(e) le 15 février 2015 Bravo! Bien vu la fonction map_range je prends note pour mon travail actuel!
cboubou Posté(e) le 16 février 2015 Signaler Posté(e) le 16 février 2015 Merci mprinfo. Je vais tester / décortiquer ton module universel. Je mettais fait un MV pour gérer mes volets roulants (mon premier MV ) mais ta version avec le slider me botte!
mprinfo Posté(e) le 16 février 2015 Auteur Signaler Posté(e) le 16 février 2015 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
chrispec Posté(e) le 16 février 2015 Signaler Posté(e) le 16 février 2015 Bon tuto! Quelqu'un aurait-il une solution pour le slider sous HCL ? Et un bouton 'stop' ?
mikael2235 Posté(e) le 17 février 2015 Signaler Posté(e) le 17 février 2015 Sympa cette telecommande, je teste ce soir. Merci pour le partage [EDIT] Trop impatient : testé à distance... Marche parfaitement.
megabubu Posté(e) le 5 mars 2015 Signaler Posté(e) le 5 mars 2015 Super boulot Pourrait on mettre en place un slider différent par zone?
mprinfo Posté(e) le 6 mars 2015 Auteur Signaler Posté(e) le 6 mars 2015 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é
megabubu Posté(e) le 6 mars 2015 Signaler Posté(e) le 6 mars 2015 Effectivement, tu sais, je suis un peu con Par contre si on ne veut pas de notification push par exemple? ou si on veut sur 2 tel différent?
mprinfo Posté(e) le 6 mars 2015 Auteur Signaler Posté(e) le 6 mars 2015 Je suis sur smatphone je te donne la solution ce soir via pc plus simple
mprinfo Posté(e) le 6 mars 2015 Auteur Signaler Posté(e) le 6 mars 2015 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")
megabubu Posté(e) le 6 mars 2015 Signaler Posté(e) le 6 mars 2015 Nikel merci pour tout EDIT: pour rajouter une zone 4, que dois je modifier? créer une variable V_Zone4 et la suite ??
mprinfo Posté(e) le 7 mars 2015 Auteur Signaler Posté(e) le 7 mars 2015 je vais te faire cela ce WE pour la Zone4 1
mprinfo Posté(e) le 8 mars 2015 Auteur Signaler Posté(e) le 8 mars 2015 comme promis voici le module version 4 Zones Volets_V1.01.vfib 1
megabubu Posté(e) le 8 mars 2015 Signaler Posté(e) le 8 mars 2015 super, ca marche nikel tu utilises quoi comme icônes? tu les différencies aussi selon le type d ouverture?
megabubu Posté(e) le 8 mars 2015 Signaler Posté(e) le 8 mars 2015 cependant pourrais je te demander encore une faveur stp pourrais tu faire comme dans la version à 3 zone, pas de slider ni de titre stp dans l icone du module comme ci dessus. 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
Messages recommandés