Aller au contenu

Messages recommandés

Posté(e)

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?

Posté(e)

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
Posté(e)

  1. function round(num, dec)

  2. local mult = 10^(dec or 0)

return math.ceil(num * mult) / mult

end

 

PS : comment faite vous vos copie d'écran de code??
Posté(e)

Tu peux utiliser la fonction "insérer un extrait de code" c'est <> dans l'éditeur (sous le :)).

Posté(e)

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.... :huh:

Posté(e)

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)
  • 2 ans après...
Posté(e)


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

Posté(e)
[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

Posté(e)


-- 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
×
×
  • Créer...