quadal Posté(e) le 14 août 2019 Signaler Partager Posté(e) le 14 août 2019 (modifié) Bonjour à tous, j'ai besoin d'aide pour récupérer une valeur de température sur esp easy, comme je suis une quiche en lua je n'y arrive pas. ci joint le json de esp easy et du code que j'ai trouvé sur le forum. les experts je compte sur vous. { "TaskValues": [ {"ValueNumber":1, "Name":"Temperature", "NrDecimals":2, "Value":23.60 }, {"ValueNumber":2, "Name":"Humidity", "NrDecimals":2, "Value":41.00 }], "TTL":60000, "DataAcquisition": [ {"Controller":1, "IDX":0, "Enabled":"false" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":60, "Type":"Environment - DHT11/12/22 SONOFF2301/7021", "TaskName":"sonde", "TaskDeviceNumber":5, "TaskEnabled":"true", "TaskNumber":1 } et le code selfId = fibaro:getSelfId() sleeptimer = 5 -- minutes between pollning local WEB = Net.FHttp("192.168.2.218",80) -- IP to your espeasy local response ,status, err = WEB:GET("/json?tasknr=1") -- task id on espeasy if (tonumber(status) == 200 and tonumber(err)==0) then local jsonTable = json.decode(response) name = jsonTable.Temperature value = jsonTable.Value --fibaro:debug(value) fibaro:log(value) fibaro:call(selfId, "setProperty", "ui.lbl1.value", value.." C") end fibaro:sleep(sleeptimer*1000*57) Modifié le 14 août 2019 par quadal Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) le 14 août 2019 Signaler Partager Posté(e) le 14 août 2019 Tu ne peux pas récupérer la température directement, elle est dans un tableau TaskValues à l'intérieur du JSON, qu'il faut donc parcourir avec une boucle for. Voici un exemple de code qui devrait fonctionner, attention je ne l'ai pas testé : local selfId = fibaro:getSelfId() local sleeptimer = 5 -- minutes between polling local WEB = Net.FHttp("192.168.2.218",80) -- IP to your espeasy local response, status, err = WEB:GET("/json?tasknr=1") -- task id on espeasy if tonumber(status) == 200 and tonumber(err) == 0 and response ~= "" then local jsonTable = json.decode(response) if type(jsonTable.TaskValues) == "table" then local value, v for _, v in pairs(jsonTable.TaskValues) do if v.Name and v.Name == "Temperature" then value = v.Value break end end if value then fibaro:debug("Température : " .. value .. "°C") fibaro:log(value) fibaro:call(selfId, "setProperty", "ui.lbl1.value", value.." C") else fibaro:debug("Attention : la température n'a pas été trouvée") end else fibaro:debug("Erreur : TaskValues n'existe pas") end else fibaro:debug("Erreur : impossible d'effectuer la requête HTTP") end fibaro:sleep(sleeptimer*1000*57) PS : tu peux formater ton code sur le forum avec les balises </> dans la barre d'outil, car là c'est franchement illisible, tu as de la chance que je n'avais rien à faire et que j'ai reformaté ton code dans mon Notepad++. 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
quadal Posté(e) le 14 août 2019 Auteur Signaler Partager Posté(e) le 14 août 2019 merci Lazer desolé pour le bordel merci d'avoir modifié. je teste. Lien vers le commentaire Partager sur d’autres sites More sharing options...
quadal Posté(e) le 14 août 2019 Auteur Signaler Partager Posté(e) le 14 août 2019 tu est le meilleur Lazer. ca marche merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) le 14 août 2019 Signaler Partager Posté(e) le 14 août 2019 Cool Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés