Arbu-jl 13 Signaler ce message Posté(e) 12 février 2014 Bonsoir, Je récupère la valeur température d'un IPX800 (Analogique 1) que j'aimerai intégrer sur mon HC2. j'obtiens, de l'IPX 800 une valeur brute (vb), exemple 566. Après quelques recherche, j'ai trouvé la valeur de conversion en degré pour la sonde installée sur l'IPX. il s'agit de faire l'opération suivante: (vb * 0.00323 - 1.63) / 0.0326, le résultat obtenu est : 6.0791411042945, j'aimerai faire un arrondi à deux digit après la virgule. En code LUA, cela donne ..... local AN1 = math.floor(((response.AN1 * 0.00323 - 1.63) / 0.0326)) fibaro:setGlobal("AN1", AN1) fibaro:debug(AN1) fibaro:log(AN1) cependant, la valeur maintenant affiché dans le HC2 est de: 6 J'aimerai avoir les deux digits après la virgule, 6.08, mais honnêtement, je n'y arrive pas.... Pouvez-vous m'aider? Partager ce message Lien à poster Partager sur d’autres sites
Gregory 5 Signaler ce message Posté(e) 12 février 2014 Bonsoir, c'est parce que vous utilisez math.floor qui renvoi un entier, il faut faire une méthode d'arrondi, je ne suis pas encore spécialiste en LUA, mais j'ai l'impression qu'il n'y en a pas de toute prête. Mais c'est simple à implémenter function round(num, dec) local mult = 10^(dec or 0) return math.floor(num * mult + 0.5) / mult end il suffit ensuite d'appeler la fonction round, le premier paramètre est la valeur à arrondir, le second le nombre de décimales à conserver après la virgule 1 Partager ce message Lien à poster Partager sur d’autres sites
Nvince76 35 Signaler ce message Posté(e) 12 février 2014 pas encore de box et jamais codé en LUA La fonction : String.sub(AN1,1,4) ne fonctionnerait elle pas? à tout hasard Partager ce message Lien à poster Partager sur d’autres sites
Nvince76 35 Signaler ce message Posté(e) 12 février 2014 en effet si math.floor renvoie un entier, la méthode de grégory est la plus propre Partager ce message Lien à poster Partager sur d’autres sites
Nvince76 35 Signaler ce message Posté(e) 12 février 2014 Cela suffira function round(num, dec) local mult = 10^(dec or 0) return math.ceil(num * mult) / mult end Partager ce message Lien à poster Partager sur d’autres sites
Nvince76 35 Signaler ce message Posté(e) 12 février 2014 function round(num, dec) local mult = 10^(dec or 0) return math.ceil(num * mult) / mult end PS : comment faite vous vos copie d'écran de code?? Partager ce message Lien à poster Partager sur d’autres sites
Krikroff 1 924 Signaler ce message Posté(e) 12 février 2014 Tu peux utiliser la fonction "insérer un extrait de code" c'est <> dans l'éditeur (sous le ). Partager ce message Lien à poster Partager sur d’autres sites
Nvince76 35 Signaler ce message Posté(e) 13 février 2014 ok, impecc merci Krikroff Partager ce message Lien à poster Partager sur d’autres sites
Arbu-jl 13 Signaler ce message Posté(e) 13 février 2014 Merci beaucoup pour vos réponses. Bon, vous allez vite voir que je suis très limité en programmation, comment puis-je intégrer cette fonction dans mon code.... Partager ce message Lien à poster Partager sur d’autres sites
Arbu-jl 13 Signaler ce message Posté(e) 13 février 2014 Bonsoir, je pense avoir trouvé comment faire. En tout cas merci pour votre support. Excellente soirée HC2 = Net.FHttp("IPXIP",PORT) response = HC2:GET("/api/xdevices.json?cmd=30") response = json.decode(response) fibaro:debug(response.AN1) fibaro:debug(response.AN2) fibaro:debug(response.AN3) function round(num, dec) local mult = 10^(dec or 2) return math.floor(num * mult + 0.5) / mult end local AN1 = round((response.AN1* 0.00323 - 1.63) / 0.0326) fibaro:setGlobal("AN1", AN1) fibaro:debug(AN1) fibaro:log(AN1) Partager ce message Lien à poster Partager sur d’autres sites
flechg 41 Signaler ce message Posté(e) 22 octobre 2016 -- Obtenir l'emplacement de l utilisateur avec l ID local userLocation = fibaro:getValue(id, 'Location') --local testLocation = fibaro:getValue (id2, 'Location') local result -- calculer la distance entre l utilisateur et le lieu du test result = fibaro:calculateDistance(userLocation, testLocation)/1000 fibaro:debug('La distance est ' .. result .. 'm.') fibaro:setGlobal("Distance", result) fibaro:log(fibaro:getGlobalValue("Distance")) Partager ce message Lien à poster Partager sur d’autres sites
flechg 41 Signaler ce message Posté(e) 22 octobre 2016 bonsoir j ai posté le code ci-dessus car je voudrais arrondir le resultat mais je n y arrive pas un idée merci encore Partager ce message Lien à poster Partager sur d’autres sites
Steven 2 335 Signaler ce message Posté(e) 25 octobre 2016 Si tu ne veux pas les centimètres, le plus simple est result = math.floor(result) Partager ce message Lien à poster Partager sur d’autres sites
flechg 41 Signaler ce message Posté(e) 26 octobre 2016 [ERROR] 19:13:47: line 5: bad argument #1 to 'floor' (number expected, got nil) @steven merci pour ton aide mais je ne suis pas arrivé je sais pas ou mettre le code j avais déjà essayer mais sans succès voici le message d erreur avec le code ci dessous local result = math.floor(result) merci encore Partager ce message Lien à poster Partager sur d’autres sites
Steven 2 335 Signaler ce message Posté(e) 31 octobre 2016 -- Obtenir l'emplacement de l utilisateur avec l ID local userLocation = fibaro:getValue(id, 'Location') --local testLocation = fibaro:getValue (id2, 'Location') -- calculer la distance entre l utilisateur et le lieu du test local result = fibaro:calculateDistance(userLocation, testLocation)/1000 result = math.floor(result) fibaro:debug('La distance est ' .. result .. 'm.') fibaro:setGlobal("Distance", result) fibaro:log(fibaro:getGlobalValue("Distance")) 1 Partager ce message Lien à poster Partager sur d’autres sites
flechg 41 Signaler ce message Posté(e) 31 octobre 2016 MERCI encore pour ton aide steven tout fonctionne 1 Partager ce message Lien à poster Partager sur d’autres sites