Aller au contenu

Arrondi En Lua


Arbu-jl

Messages recommandés

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

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

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

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

  • 2 ans après...


-- 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

[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


-- 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"))

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...