Aller au contenu

Steven

Membres confirmés
  • Compteur de contenus

    4 434
  • Inscription

  • Dernière visite

  • Jours gagnés

    201

Tout ce qui a été posté par Steven

  1. OK, as-tu essayé le script ?
  2. Ben oui, je t'ai pas oublié
  3. Sinon, voici le code. Si tu dois ajouter le 10, met le simplement dans le tableau des icones. Donc si tu as 61, cela te donnera 1027 si tu as 50, cela te donnera 1134 ... Il manque juste le 100 qui ne donnera aucune valeur et cela prendra donc en compte comme si c'est un 0. local Qubino_ID = 302 -- Tables des icones local icone = { [99] = 1027, [50] = 1134, [40] = 1135, [0] = 1030, [20] = 1029, [30] = 1028 } local value = tonumber(fibaro:getValue(Qubino_ID, "value")) local ico = icone[0] local min = 999 for k, v in pairs(icone) do if (value <= k and k < min) then ico = v min = k end end fibaro:debug(ico) fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", tostring(ico)) local temp = fibaro:getValue(279, "value") fibaro:log(temp .." °C" ) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value",temp.. " °C")
  4. @Did Dans ton tableau, il te manque donc le 10 ?
  5. Pour vous faire patientez en attendant que sa fille le laisse se reposer un peu C'est un complément à ceci : Précis Sur Les Variables Locales/globales Pour la variable avec une portée globale et les passages de paramètres, voici une explication et un petit script pour bien comprendre son fonctionnement. Notion de base sur le passage de paramètre : Les paramètres d'une fonction peuvent être de 2 manières différentes (par référence ou par valeur) : - référence : la fonction reçoit l'adresse mémoire du paramètre. Un changement de valeur affectera TOUT le script - valeur : on reçoit la valeur du paramètre Ce dernier est copié dans une nouvelle référence propre à la fonction. Un changement de valeur n'affectera que la fonction. en LUA, chaque passage de paramètre ce fait en "valeur" SAUF pour les tables (c'est comme en français, il y a toujours une exception). Donc si je fais function maFonction(var) print(var) end maFonction("Coucou") j'envoi à ma fonction la valeur, soit une copie de "Coucou". Si a l'intérieur de maFonction je modifie la valeur, cela n'aura un impact QU'AU sein de maFonction. maFonction va donc créer une nouvelle variable "var" dans laquelle il va copier la valeur "Coucou" Si je fais local coucou = "Coucou" function maFonction() print(coucou) end et que dans maFonction je modifie coucou, alors coucou va être modifié pour tout le script puisque la modification aura eu lieu sur sa référence. En bref, si on est au sein d'un script ou d'une fonction, nous travaillons sur les références. Si nous passons les informations en tant que paramètre, nous travaillons sur une valeur. local coucou = "Coucou" function maFonction(variable) print(coucou) print(variable) end maFonction("Coucou") Plus compliqué car la référence coucou est envoyée en paramètre et devient donc une copie de valeur. local coucou = "Coucou" function maFonction(variable1, variable2) print(variable1) print(variable2) end maFonction("Coucou", coucou) Allez un bon script vaut mieux qu'un long discours : function scope1() -- la variable var n'existe pas print(var) --- nil (variable inexistante) end function scope2(var) -- la variable est passée en paramètres donc visible -- bien que déclarée après -- En sortant de cette méthode, var aura repris ça valeur -- initial car elle a été passée en paramètre soit par -- valeur print(var .. " dans scope2()") -- ______ var = "Scope2" print(var) -- Scope2 end local var = "-=init=-" function scope3() -- la variable est connue car déclarée avant. Elle est assignable -- par contre, si on déclare une variable du même nom au sein -- de cette même function, en sortant la variable aura repris sa valeur "Scope3" print(var .. " dans scope3()") var = "Scope3" print(var) local var = "Byebye" print(var) end function exception(unTableau) -- Les tableaux sont toujours traité comme une référence unTableau[1] = "Et voilà " end print(var .. " avant tout") scope1() print(var .. " après scope1()") scope2(var) print(var .. " après scope2()") scope3() print(var .. " après scope3()") -- Exception avec les table qui sont toujours envoyé en tant que référence. local table = {[1]="Humm"} print(table[1]) exception(table) print(table[1]) Debug : [DEBUG] 11:39:22: -=init=- avant tout [DEBUG] 11:39:22: nil [DEBUG] 11:39:22: --init=- après scope1() [DEBUG] 11:39:22: --init=- dans scope2() [DEBUG] 11:39:22: Scope2 [DEBUG] 11:39:22: -=init=- après scope2() [DEBUG] 11:39:22: -=init=- dans scope3() [DEBUG] 11:39:22: Scope3 [DEBUG] 11:39:22: Byebye [DEBUG] 11:39:22: Scope3 après scope3() [DEBUG] 11:39:22: Humm [DEBUG] 11:39:22: Et voilà . . Allez, dans combien de temps, notre mprinfo national va en faire un tuto avec des jolies couleurs ?
  6. Moi je m'en fou suis super intéressé .. mais ça fait 5
  7. @Did Tu préfères que entre 0 et 19 ce soit l'icone 1030 puis entre 20 et 29 le 1029, ... ?
  8. @mprinfo Heuu, non ... NomVG est déclaré en tant que variable Globale au script, tout en haut du code. Elle est donc visible de partout dans le script. L'erreur que je vois dans mon code est function traitement(lever, coucher, heure) local valeur = "Nuit" -- test si on est le jour ou la nuit if (heure >= lever) and (heure < coucher) then valeur = "Jour" end UpdateVG(nuit) -- mise a jour de la VG Jour_Nuit end nuit n'existe pas, c'est valeur qu'il faut mettre. Bien évidement, il peux y avoir d'autres erreurs. Ca vous ira ????? Moi je verrais bien un hystérésis
  9. @mprinfo C'est rassurant de voir qu'à ton âge, on a encore des idées .. mon lointain avenir est donc encore prometteur. OK @Moicphil Pépé est entrain de réflechir .. tu auras une réponse la semaine prochaine. Plus sérieusement, pour une fois qu'un gars est plus vieux que moi sur le forum, j'ai le droit de le chambrer, non ? allez s'il vous plaît
  10. Oui sans soucis
  11. @Nico Nous aussi on est content que tu ailles arrêté @mprinfo Moi LUA c'est début 2014, j'ai un an d'avance sur toi et 3'543'234 ans de retard sur Krikroff Mais, de tout façon, il est hors quota et de plus il programme tellement mal que même chez Fibaro, quand ils copient son code, il le comprenne pas ... heinnnn comment ça c'est pas Krikoff qui code avec le pieds ... mais heuuu alors, vous voulez dire que c'est les développeurs de Fibaro qui sont pas au top ... Nooooonnn ! @D-GK Attention, c'est du Java et non pas LUA:
  12. Un exemple : -- =============================================== -- Snippets : Variables Globales -- =============================================== -- Description : -- Fonctions permettant la manipulation des -- variables globales -- =============================================== -- Version du firmeware : 4.x -- Destination : Scénarios -- =============================================== -- ----------------------------------------------- -- Retourne la valeur stockée dans une variable -- ----------------------------------------------- -- Paramètres : -- nom : le nom de la variable àinterroger -- Retour : -- la valeur de la varibale -- Exemple : -- getValue("Test") -- ----------------------------------------------- function getValue(nom) return fibaro:getGlobalValue(nom) end -- ----------------------------------------------- -- Stocke la valeur dans une variable -- ----------------------------------------------- -- Paramètres : -- nom : le nom de la variable àinterroger -- valeur : la valeur àstocker -- Exemple : -- setValue("Test", 100) -- ----------------------------------------------- function setValue(nom, valeur) fibaro:setGlobal(nom, valeur) end -- ----------------------------------------------- -- Retourne la date/heure de modification de la -- variable -- ----------------------------------------------- -- Paramètres : -- nom : le nom de la variable àinterroger -- Retour : -- date/heure de la dernière modification -- c.f : http://www.lua.org/pil/22.1.html -- Exemple : -- local modif = getDateModification("Test") -- modif.year, modif.hour, modif.min, ... -- ----------------------------------------------- function getDateModification(nom) return os.date("*t", fibaro:getGlobalModificationTime(nom)) end -- ----------------------------------------------- -- Supprime une variable -- ----------------------------------------------- -- Paramètres : -- nom : le nom de la variable àsupprimer -- Exemple : -- supprimer("Test") -- ----------------------------------------------- function supprimer(nom) api.delete("/globalVariables/" .. nom) end -- ----------------------------------------------- -- Modifie une variable -- ----------------------------------------------- -- Paramètres : -- nom : le nom de la variable àmodifier -- valeur : nouvelle valeur de la variable -- choix : un tableau des choix possible -- Exemples : -- modifier("Endroit", "Maison", {"Maison", "Travail"}) -- modifier("NombreJours", 100) -- ----------------------------------------------- function modifier(nom, valeur, choix) local variable = {} variable.value = tostring(valeur) variable.isEnum = false if (type(choix) ~= "nil") then variable.isEnum = true variable.enumValues = choix end api.put("/globalVariables/" .. nom, variable) end -- ----------------------------------------------- -- Ajoute une variable -- ----------------------------------------------- -- Paramètres : -- nom : le nom de la variable àajouter -- valeur : la valeur de la variable -- choix : un tableau des choix possible -- Exemples : -- ajouter("Endroit", "Maison", {"Maison", "Travail"}) -- ajouter("NombreJours", 100) -- ----------------------------------------------- function ajouter(nom, valeur, choix) local enum = 0 if (type(choix) ~= "nil") then enum = 1 end api.post("/globalVariables", {name=nom, isEnum=enum}) modifier(nom, valeur, choix) end -- ----------------------------------------------- -- Voir si une variable existe ou non -- et la modifier ou créer -- ----------------------------------------------- -- Paramètres : -- nom : le nom de la variable àtraiter -- valeur : la valeur de la variable -- choix : un tableau des choix possible -- Exemples : -- traiter("Endroit", "Maison", {"Maison", "Travail"}) -- traiter("NombreJours", 100) -- ----------------------------------------------- function traiter(nom, valeur, choix) if (fibaro:getGlobalValue(nom) == nil) then ajouter(nom, valeur, choix) elseif (type(choix) == "nil") then setValue(nom, valeur) else modifier(nom, valeur, choix) end end -- ----------------------------------------------- -- Retourne toutes les informations d'une variables -- ----------------------------------------------- -- Paramètres : -- nom : le nom de la variable àtraiter -- Exemples : -- local info = getInfo("Test") -- info.value, info.name, info.readOnly, -- info.isEnum, info.enumValues, ... -- ----------------------------------------------- function getInfo(nom) return api.get("/globalVariables/" .. nom) end
  13. Je verrais bien une sous-rubrique "Snippets" sous HC2 ou Tuto : http://fr.wikipedia.org/wiki/Snippet
  14. Steven

    Ipad Limité Sur Le Forum

    Soit disant Apple a inventé la poubelle .. c'est pas justement pour y mettre les iPads ? Ok, c'était une vanne gratuite et ridicule
  15. Tu sais que j'ai commencé ma carrière chez HP ? Un proliant c'est du 43W au repos alors que le DS214play c'est 13W au repos et 20W en utilisation .. je calcule cela juste pour savoir à quel fréquence les enfants vont devoir pédaler . J'ai déjà quelques scénarios en tête : Quand j'allume la TV, cela allume le local ou se trouve le vélo, ainsi les enfants savent qu'ils doivent commencer à pédaler ... c'est si je veux regarder un film stocker sur le NAS. Par contre, Synology c'est du Linux et pour moi Linux, c'est 5 lettres qui ne veulent rien dire J'ai du chercher hier pendant 1 heure pour savoir comment ajouter un chemin dans le PATH et surtout comment le stocker dans mon profile. Je sens que je vais en baver.
  16. mprinfo = 1 CPU downclocker, 64Ko RAM, 0 ou 1 bitte .. j'ai pas bien compris la fin @mprinfo : Tout les temps que tu consacres à faire des tutos est du temps gagné pour les autres. Donc merci pour nous tous. @D-GK Attention, optimiser le temps du développeur ne veux pas dire minimiser le nombre de ligne à son paroxysme. Cela signifie surtout "centraliser" et "réutiliser" le code existant (en gros, éviter les doublons et les copier/coller en créant des méthodes (function)). Cela signifie aussi d'essayer de respecter les conventions de nommages et les habitudes des autres développeurs (afin de permettre une reprise plus aisée de son code). J'ai déjà analyser le code de certains collègues ou on trouve des méthodes "getMontantFacturation" qui retourne ... la date de la prochaine facturation ... cherchez l'erreur et surtout la perte de temps quand on cherche un bug. Mais je suis 100% d'accord avec toi, parfois la lecture la "mono-ligne" est destructrice, exemple : boolean resultat = voiture.roule() ? feu.vert() ? support.autoroute() : stop() ? true : feu.rouge() ? voiture.enpanne() : false Bon alors, c'est quoi le résultat ... ben heuuu, la couleur du moteur n'aurait-elle pas une influence sur le type de pneu ? Et oui, j'ai cette année plus de 25 ans de développement ... ouchhh .. dans mon cas, on parle plus de "garbage collector" bien que collector me va bien .. d'ailleurs, on parle de quoi .. j'ai un blanc ... humm un petit blanc, c'est une bonne idée ça ou un rouge... heuuu, pffft, c'est l'heure de la sieste non ? :-)
  17. Garbage collector Un gabagge collector n'est-il pas le truc inventé pour palier au mauvais développement ? ... Je plaisante . Il y en a un, mais comme toujours, moins la mémoire est sollicitée, moins le garbage collector fonctionne, meilleures sont les performances. Il ne faut pas oublier que lorsque le garbage collector fait son nettoyage, il prend énormément de ressources. Je travaille sur Java, et c'est horrible de voir que plus on améliore le garbage collector, plus les développeurs ne font pas attention. C'est le serpent qui se mord la queue. "Un garbage collector est coà»teux en performance, bien que dans la plus part des cas, son utilisation permet d'augmenter les performances globales d'une application" ... et si, un jour, on se mettait autour d'une table et qu'on se disait : - Il y a 25 ans, on faisait attention au nombre de ligne de code - Il y a 20 ans, on faisait attention à l'utilisation de la mémoire - Il y a 10 ans, on faisait attention à la place disque - Aujourd'hui, on se fout de tout alors on a inventé la "défragmentation" Pour les curieux : Ramasse-miettes (Garbage Collector) . . . Librairies Oui LUA permet les librairies, mais pas sur la Fibaro ou cette possibilité est désactivée. Le mot clé, de mémoire est : require . . . P.S. Jamais je n'ai pensé que mon post ce retrouverais en tant que tuto La prochaine fois, je mettrais des exemples plus parlant et j'étofferais plus mes dires . . P.S.2 Pour mprinfo, un gabage collector est le Alzeihmer d'un programme, le truc qui fait que ta mémoire se vite (à ton age .. trop vite )
  18. Madame a pris une DS214play ... et oui, c'est Madame qui veux faire du cloud local Pour le vélo, l'équipement est tout prêt mais j'attends que les enfants aillent 8 ans pour ne pas être dans l'illégalité
  19. J'en tremble encore, de savoir qu'il y a un truc énergivore à la maison ... brrrrrr ... ça fait peur le nom "énergivore" ... on dirait un monstre qui va vous croquer durant votre sommeil
  20. @pepite Tu dois avoir quelque chose de bizzare dans ta variable globale qui fait que le json.decode ne te renvoi pas un tableau mais un chiffre. Je te laisse vérifier. @Did Si tu es sà»re des valeurs et des id d'icones, tu peux essayer ceci : fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", tostring(icone[tonumber(fibaro:getValue(Qubino_ID, "value"))])) au lieu d'envoyer un numéro d'icone, on lui envoi le numéro sous forme de chaine .. me semble que j'avais eu ce soucis. Sinon, ajoute cette ligne a la fin pour controler les valeurs : fibaro:debug("Quibino value = " .. fibaro:getValue(Qubino_ID, "value"))
  21. Tiens, je pensais l'avoir corrigé celle là. C'est pairs au lieu de ipairs.... Juste enlever le i.
  22. Et oui... Je suis un faible
  23. Ce tuto m'a été très utile Merci beaucoup
  24. Voici une proposition : Il faut juste mettre en entête, les ID des Modules virtuels (ex. 194 currentIcon). Donc chaque fois que le currentIcon du module virtuel va changer, cette scène va stocker l'information dans une variable globale. Au démarrage de la box, elle va chercher la variable globale et va écrire les valeurs stockées dans les modules virtuels. En bref, elle écoute les changements de currentIcon et les restaure au redémarrage. Il faut créé la variable globale. --[[ %% autostart %% properties 104 currentIcon --]] local variableGlobale = "Icones" local trigger = fibaro:getSourceTrigger() if (trigger.type == "autostart" or trigger.type == "other") then fibaro:debug("Mise à jour des icones sur les VD") local icones = json.decode(fibaro:getGlobalValue(variableGlobale)) -- On parcours toutes les entrées et on met l'icone à jour for k,v in pairs(icones) do fibaro:debug(string.format("Module : %s - currentIcon %s", k, v)) fibaro:call(tonumber(k), "setProperty", "currentIcon", v) end elseif (trigger.type == "property") then local prop = trigger.propertyName local device = trigger.deviceID local val = fibaro:getValue(device, prop) fibaro:debug(string.format("Module Virtuel %s (%d) propriété %s = %s", fibaro:getName(device), device, prop, val)) local icones = json.decode(fibaro:getGlobalValue(variableGlobale)) if (not icones) then icones = {} end -- On ajoute/modifie la valeur du couple Virtual Device/Icone icones[device] = val -- On remet cela en json dans la variable globale "Icones" fibaro:setGlobal(variableGlobale, json.encode(icones)) end
  25. Je test une autre solution
×
×
  • Créer...