Arbu-jl Posté(e) le 12 février 2014 Signaler Partager Posté(e) le 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? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Gregory Posté(e) le 12 février 2014 Signaler Partager Posté(e) le 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nvince76 Posté(e) le 12 février 2014 Signaler Partager Posté(e) le 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nvince76 Posté(e) le 12 février 2014 Signaler Partager Posté(e) le 12 février 2014 en effet si math.floor renvoie un entier, la méthode de grégory est la plus propre Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nvince76 Posté(e) le 12 février 2014 Signaler Partager Posté(e) le 12 février 2014 Cela suffira function round(num, dec) local mult = 10^(dec or 0) return math.ceil(num * mult) / mult end Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nvince76 Posté(e) le 12 février 2014 Signaler Partager Posté(e) le 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?? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krikroff Posté(e) le 12 février 2014 Signaler Partager Posté(e) le 12 février 2014 Tu peux utiliser la fonction "insérer un extrait de code" c'est <> dans l'éditeur (sous le ). Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nvince76 Posté(e) le 13 février 2014 Signaler Partager Posté(e) le 13 février 2014 ok, impecc merci Krikroff Lien vers le commentaire Partager sur d’autres sites More sharing options...
Arbu-jl Posté(e) le 13 février 2014 Auteur Signaler Partager Posté(e) le 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.... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Arbu-jl Posté(e) le 13 février 2014 Auteur Signaler Partager Posté(e) le 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) Lien vers le commentaire Partager sur d’autres sites More sharing options...
flechg Posté(e) le 22 octobre 2016 Signaler Partager Posté(e) le 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")) Lien vers le commentaire Partager sur d’autres sites More sharing options...
flechg Posté(e) le 22 octobre 2016 Signaler Partager Posté(e) le 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 25 octobre 2016 Signaler Partager Posté(e) le 25 octobre 2016 Si tu ne veux pas les centimètres, le plus simple est result = math.floor(result) Lien vers le commentaire Partager sur d’autres sites More sharing options...
flechg Posté(e) le 26 octobre 2016 Signaler Partager Posté(e) le 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 31 octobre 2016 Signaler Partager Posté(e) le 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
flechg Posté(e) le 31 octobre 2016 Signaler Partager Posté(e) le 31 octobre 2016 MERCI encore pour ton aide steven tout fonctionne 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés