mprinfo Posté(e) le 24 mai 2015 Signaler Posté(e) le 24 mai 2015 Attention a l utilisation des vg cela et de plus en plus lent depuis la v4 donc la création d'une table en début de scripts via l'api ne doit guère être plus lourde en charge processeur qu un appel multiple a des vg et c'est bien plus simple comme solution Envoyé de mon SM-G900F
maconly34 Posté(e) le 24 mai 2015 Auteur Signaler Posté(e) le 24 mai 2015 Ok, je ne le savais pas. Mais pour compléter ta solution, on peut rajouter le contrôle que j'ai mis plus haut pour ne générer/mettre à jour la table qu'à la demande. Donc un bouton qui incrémente l'état d'une VG "mise_a_jour_table" et en début de script de génération : si mise_a_jour_table > locale_generation alors script de génération locale_generation = mise_a_jour_table Fin de si
maconly34 Posté(e) le 24 mai 2015 Auteur Signaler Posté(e) le 24 mai 2015 -- Mise àjour àla demande par incrémentation d'une variable globale (bouton de module virtuel) if mise_a_jour_table > local generation_a_faire then local generation = mise_a_jour_table local dead = true -- true pour exporter les devices morts local excludeType = {"weather", "HC_user", "iOS_device"} local excludeID = {} -- Initiate connection with HC2 HC2 = Net.FHttp("127.0.0.1", 11111) response ,status, errorCode = HC2:GET("/api/devices") devicesJSon = json.decode(response) local devices = {} local names = {} local rooms = {} function addName(name, roomname) if (type(names[name]) == "nil") then names[name] = true return name else return addName(name.."_"..roomname, roomname) end end function getRooms() response ,status, errorCode = HC2:GET("/api/rooms") roomsJSon = json.decode(response) rooms[0] = "inconnu" for k, v in ipairs(roomsJSon) do rooms[v.id] = v.name end end function rename(name, roomname) local name = name:upper():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", "_") local roomname = roomname:upper():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", "_") return addName(name, roomname) end getRooms() for k, v in pairs(devicesJSon) do local doit = (dead or not v.dead) if (doit) then for h, w in pairs(excludeType) do if (v.type == w) then doit = false end end if (doit) then for h, w in pairs(excludeID) do if (v.id == w) then doit = false end end end end if (doit) then table.insert(devices, v) end end table.sort(devices, function(a, return a.roomID<b.roomID end) local result = "<BR><BR>-- IDs générés le : " .. os.date("%d/%m/%y à%X") local room = -1 local lastinfo = ""; result = result .. "<BR><BR>local id = {" for k, v in ipairs(devices) do if (room ~= v.roomID) then room = v.roomID result = result .. "<BR>--"..rooms[v.roomID].."<BR>" end lastinfo = rename(v.name, rooms[v.roomID]) result = result .. lastinfo .. " = " .. v.id .. ", " end result = result .. "<BR>}" result = result .. "<BR>" result = result .. "<BR>-- usage :" result = result .. "<BR>-- fibaro:getValue(id[\""..lastinfo .."\"], \"value\")" result = result .. "<BR>-- GEA.add(id[\""..lastinfo .."\"], 30, \"\")" -- print(result) fibaro:debug(result)
mprinfo Posté(e) le 24 mai 2015 Signaler Posté(e) le 24 mai 2015 personnellement je mettrai le code en début de chaque scène voir pour réduire la table faire plusieurs table par exemple une pour les fgrm etc... en fonction de ce que la scène a besoin après il n'y a plus qu'a adapter le code que je t'ai donné pour qu'il utilise la bonne table
mprinfo Posté(e) le 24 mai 2015 Signaler Posté(e) le 24 mai 2015 tu fais cela dans un VD moi je l’aurai fais dans une scène avec par exemple autostart pour que cela soit mis a jour lors du démarrage et comme on peut exécuté un scéne je ne vois pas l'utilité d'utiliser un VD
maconly34 Posté(e) le 24 mai 2015 Auteur Signaler Posté(e) le 24 mai 2015 L'idée c'était de ne générer que lorsqu'on réinclus des modules, donc juste un petit bouton qui dit à tous les scripts de remettre à jour leurs table. Mais j'ai peut être pas tout saisie ? je débute sur Fibaro.
mprinfo Posté(e) le 24 mai 2015 Signaler Posté(e) le 24 mai 2015 non tu as bien saisi tu es chez apple lol les appels a l'api sont plus facile dans une scéne l'avantage de la scène c'est les triggers par exemple tu peux grace a %%autostart mettre a jour la table lors du démarrage de la box si tu veux seulement que la scène ce lance manuellement tu ne mets rien dans l'entête et lorsque tu as besoin tu cliques sur exécuté cela reviens au même que le VD Je n'utilise les VD que pour afficher des valeurs ou les changer ou faire une télécommande qui me permet de modifier des valeurs pour le reste j'utilise les scènes
maconly34 Posté(e) le 24 mai 2015 Auteur Signaler Posté(e) le 24 mai 2015 Effectivement il serait plus judicieux de lancer la scène de génération manuellement. Donc si je comprends bien, on met la variable %%autostart Et alors on peut n'exécuter le script de génération que si cette variable = True ? Pour concrétiser : on déclare la variable %%autostart  on mets le script de génération dans chaque scène  on contrôle celui-ci par un if autostart alors generation  puis script de la scène Donc normalement, si je redémarre la Box, autostart = true Alors toutes les scènes qui on la variable autostart vont s'exécuter (l'alarme va se déclencher, les volets vont s'ouvrir, le grille pain va repeindre le plafond...) Bon en fait j'ai pas vraiment saisi la structure générale HELP P.S. je ne me suis pas encore tapé la doc du LUA Fibaro, je code au feeling ;-)
mprinfo Posté(e) le 24 mai 2015 Signaler Posté(e) le 24 mai 2015 %%autostart dans l'entête sert a lancer la scène au démarrage --[[ %% autostart --]] si tu veux lancer un scène avec une vg ou avec un changement de proprieté d'un module --[[ %% properties 11 value 31 sceneActivation 169 sceneActivation %% globals SoleilLever SoleilCoucher Heure --]] si tu veux lancer la scéne manuelllement --[[ --]] --ou tu ne mets rien pour savoir comment la scène est lancer et récuperer le nom du déclencheur ainsi que ça valeur local trigger = fibaro:getSourceTrigger() if (trigger['type'] == 'global') then nomTrigger = trigger['name'] valeurTrigger = tonumber(fibaro:getGlobalValue(nomTrigger)) print("Nom du déclencheur = ", nomTrigger, " - Minutes : ", valeurTrigger) elseif (trigger['type'] == 'property') then nomTrigger = tonumber(trigger['deviceID']) fibaro:debug("trigger id = "..nomTrigger) valeurTrigger = tonumber(fibaro:getValue(nomTrigger, "sceneActivation")) print("ID du Module déclencheur = ", nomTrigger, " - Valeurs : ", valeurTrigger) else fibaro:debug("La scéne ne peut être lancer que par une Variable Globale") fibaro:abort(); end je suis comme toi je débute
maconly34 Posté(e) le 24 mai 2015 Auteur Signaler Posté(e) le 24 mai 2015 Cool, je copie ces bouts de codes dans mon bloc note !
mprinfo Posté(e) le 24 mai 2015 Signaler Posté(e) le 24 mai 2015 Lol tu demandes autrement pas de soucis j'avais fais une tuto a ce sujet : http://www.domotique-fibaro.fr/index.php/topic/4153-tout-sur-le-d%C3%A9clenchement-dune-sc%C3%A9ne-en-lua-by-steven/ Envoyé de mon SM-G900F
maconly34 Posté(e) le 24 mai 2015 Auteur Signaler Posté(e) le 24 mai 2015 Bon, je vais mettre tout ça en place le week end prochain, et je vous fait un feedback.
mprinfo Posté(e) le 24 mai 2015 Signaler Posté(e) le 24 mai 2015 Ok pas de soucis je vais voir comment tu vas procédé.... Envoyé de mon SM-G900F
maconly34 Posté(e) le 28 juin 2015 Auteur Signaler Posté(e) le 28 juin 2015 Me revoilou ;-) bon pour le moment j'ai joué la carte de la simplicité : création d'une table de mes modules dans le panneau de variables globales ex. : nom raccourci du module / n° ID VB1 valeur 51 VS1 valeur 111 VS2 valeur 8 ainsi dans mes scripts, je fais juste une récupération de la VG dans une VLocale local VS1 = fibaro:getGlobalValue("VS1") Ensuite les scripts non plus jamais à être modifiés : Action sur les volets fibaro:call(VS1, "close") fibaro:call(VS2, "close") fibaro:call(VS3, "setValue", « 50 ») En cas de réinclusion d’un module, il me suffit de mettre à jour le nouvel ID dans la table des VG Pour le moment, pas constaté de ralentissement.
mprinfo Posté(e) le 28 juin 2015 Signaler Posté(e) le 28 juin 2015 Regarde steven a fait ub truc très bien pour les id. Tu peux aussi récupérer l'id via le nom que tu donnes aux modules Envoyé de mon SM-G900F
maconly34 Posté(e) le 28 juin 2015 Auteur Signaler Posté(e) le 28 juin 2015 Dans la rubrique Tutos ? Sinon comment générer les données de template pour un module chinois et l'envoyer àFibaro. Merci Envoyé de mon iPhone en utilisant Tapatalk
mprinfo Posté(e) le 28 juin 2015 Signaler Posté(e) le 28 juin 2015 J'ai fais un tuto pour le template dans firmware hc2 si je me souviens bien Envoyé de mon SM-G900F
Did Posté(e) le 28 juin 2015 Signaler Posté(e) le 28 juin 2015 C'est ici: http://www.domotique-fibaro.fr/index.php/topic/3977-envoi-du-template-a-fibaro-pour-une-integration-dans-une-future-mise-a-jour/ 1
Messages recommandés