quadal Posté(e) le 14 août 2019 Signaler 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
Lazer Posté(e) le 14 août 2019 Signaler 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
quadal Posté(e) le 14 août 2019 Auteur Signaler Posté(e) le 14 août 2019 merci Lazer desolé pour le bordel merci d'avoir modifié. je teste.
quadal Posté(e) le 14 août 2019 Auteur Signaler Posté(e) le 14 août 2019 tu est le meilleur Lazer. ca marche merci
Messages recommandés