Aller au contenu

Messages recommandés

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

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

 

  • Thanks 1
×
×
  • Créer...