Aller au contenu
Sakkhho

Balance Nokia Body+

Recommended Posts

Bonjour à tous.

 

En cette période de pré-fete, rien de tel que de savoir si on aura droit à reprendre du fois gras :-)

 

nokia.png.ae2e6862465a7f68d598c3025159fbba.png

 

Si vous avez  une balance NokiaBody ou Withings (je pense que cela fonctionne aussi) je vous propose d'intégrer les données dans la HC2.

Pas d'utilité domotique à 1ere vue mais c'est simplement pour tout avoir sous le meme dashboard...

Nokia mettant à disposition un api; il faut simplement récupérer les clés et token.

 

Etape 1 : 

- créer son compte sur developper  https://account.health.nokia.com/connectionuser/account_login?r=https%3A%2F%2Fdeveloper.health.nokia.com%2Fpartner%2Fadd

- créer son application (à la manière de netatmo) et récupérer les API KEY et API SECRET

- ensuite suivez les étapes 1 à 4 ici ; https://developer.health.nokia.com/api#first_steps

 

A la fin de l'etape 4 vous aurez donc l'URL qui permet d'attaquer l'API

 

Etape 2 :

 - importer le VD ci dessous : Nokia_Body+.vfib

 - renseignez votre taille en mètre sur la 1ere ligne

 - copier coller à partir de l'url que vous avez récupérer à l'étape 1 après  "/measure?action=getmeas&oauth_consumer_key="

-  changer l'icone

bodycardio-white-EU.png.973ade335d249a48fa8e560a061a0400.png

et voilà normalement vous avez tout ...

c'est très basique, c'est une V1.0 - si vous avez des idées on peut faire différemment...

 

A+

Modifié par Sakkhho
  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Bravo! beau boulot ! Ça va aider à tenir le cap!

 

Chez moi j'ai plusieurs "users" enregistrés sur la meme balance. Cela fonctionne impec pour le 1er mais pour le second, alors que j'obtiens une url qui est apparemment bonne j'ai le retour suivant ds le VD: [ERROR] 21:55:23: line 17: attempt to index field '?' (a nil value)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Félicitations :-)
Well done

Envoyé de mon Nexus 5X en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu as importé une seconde fois le VD pour ce 2nd user ?
Rappele moi la ligne 17? (Je suis pas devant mon Mac la.)

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui. c'est FatMass = round((jsonTable.body.measuregrps[1].measures[2].value)/100)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon ben je dois dire , que cela j'adore, je vais regarder le prix.

 

bon boulot

 

Pourrais tu me préciser la référence car vu qu'il y en a plusieurs modele.

 

nokia body+ a 69,90 ? car ton icône est celui du Cardio ?

Modifié par q.philippe

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui j ai pris la body+ pas la cardio moi. ( j ai l Apple Watch pour cela )

Partager ce message


Lien à poster
Partager sur d’autres sites

OK! En fait, c'est une cardio que j'ai, d'où le bug...

 

La balance remonte plus d'infos dans l'API. Du coup j'ai mis un "filtre" dans ton VD qui trie les mesures qui ne sont pas du poids:

 

local taille = 1.75 -- votre taille en metre
local nokiaURL ="XXXXX" -- copier ici l'url obtenu sur le site de nokia après le "consumer_key="
-------------------------------------------------------------
local Nokia = Net.FHttp("api.health.nokia.com",80)
local selfId = fibaro:getSelfId()
local response ,status, err = Nokia:GET("/measure?action=getmeas&oauth_consumer_key="..nokiaURL.."")
local jsonTable = json.decode(response)


function round(num, dec)
  local mult = 10^(dec or 1)
  return math.floor(num * mult + 0.5) / mult
end

local i = 1; while jsonTable.body.measuregrps[i].measures[1].type ~= 1 do i = i + 1 end
local Poids = round((jsonTable.body.measuregrps[i].measures[1].value)/1000)
fibaro:debug(" Poids actuel " .. Poids .. "Kg")

local j = i + 1; while jsonTable.body.measuregrps[j].measures[1].type ~= 1 do j = j + 1 end
local OldPoids= round((jsonTable.body.measuregrps[j].measures[1].value)/1000)
fibaro:debug(" Poids avant " .. OldPoids .. "Kg")

local Variation = round((Poids - OldPoids))

local FatMass = round((jsonTable.body.measuregrps[i].measures[2].value)/100)
fibaro:debug(" Masse Grasse " .. FatMass .."Kg")

local MasseMuscle = round((jsonTable.body.measuregrps[i].measures[3].value)/100)
fibaro:debug(" Masse Musculaire " .. MasseMuscle .."Kg")

local MasseEau = round((jsonTable.body.measuregrps[i].measures[4].value)/100)
fibaro:debug(" Masse Hydrique " .. MasseEau .."Kg")

local MasseOs = round((jsonTable.body.measuregrps[i].measures[5].value)/100)
fibaro:debug(" Masse Osseuse " .. MasseOs .."Kg")

local FreeFatMass = round((jsonTable.body.measuregrps[i].measures[6].value)/1000)
fibaro:debug(" Masse Maigre " .. FreeFatMass .."Kg")

local FatRatio = round((jsonTable.body.measuregrps[i].measures[7].value)/1000)
fibaro:debug(" Indice Masse Grasse " .. FatRatio .."%")

local Lastmeasure = jsonTable.body.measuregrps[i].date
local Oldmeasure = jsonTable.body.measuregrps[j].date
local delta = round((os.difftime(Lastmeasure,Oldmeasure))/(3600*24))
local delai = math.floor((os.time() - Lastmeasure)/60)
local lblEcart = (" Variation " .. Variation .. "Kg" .. " sur " .. delta .. " jours" )
local lblPoids = ("" .. Poids .. " Kg" )
local IMC = round(Poids/(taille*taille))

local lblMasseMuscle =("" .. MasseMuscle .." Kg")
local lblFatMass =("" .. FatMass .." Kg")
local lblFreeFatMass =("" .. FreeFatMass .." Kg")
local lblMasseEau =("" .. MasseEau .." Kg")
local lblMasseOs =("" .. MasseOs .." Kg")

fibaro:debug("Délai depuis dernière mesure: " .. delai)
fibaro:debug(lblEcart)
fibaro:debug("IMC: "  .. IMC)

fibaro:call(selfId, "setProperty", "ui.lblEcart.value", lblEcart)
fibaro:call(selfId, "setProperty", "ui.LblPoids.value", lblPoids)
fibaro:call(selfId, "setProperty", "ui.LblIMC.value", IMC)
fibaro:call(selfId, "setProperty", "ui.lblMasseGras.value", lblFatMass)
fibaro:call(selfId, "setProperty", "ui.lblMasseMaigre.value", lblFreeFatMass)
fibaro:call(selfId, "setProperty", "ui.lblMasseMuscle.value", lblMasseMuscle)
fibaro:call(selfId, "setProperty", "ui.lblMasseOs.value", lblMasseEau)
fibaro:call(selfId, "setProperty", "ui.lblMasseHydrique.value", lblMasseOs)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

désolé mais je ne comprends pas les 4 étapes

a l’étape que doit t'on mettre dans

Consumer key :

Consumer secret :

Callback URL (called by withings on step 2):

 

idem pour les autres etapes.

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

×