Aller au contenu

Recommended Posts

Bonjour a tous

Je me casse les dents depuis 3jours sur se code 

 

local thisdevice = fibaro:getSelfId() 
  local taskId = "1"
   local conn = Net.FHttp(fibaro:getValue(thisdevice, 'IPAddress'), fibaro:getValue(thisdevice, 'TCPPort')) 
response, status, errorCode = conn:GET('/json?tasknr=' .. taskId)
 fibaro:debug(response)
   fibaro:sleep(1)
     if errorCode == 0 then 
  fibaro:debug(status) 
  
 jsonTable = json.decode(response);
   
   local temp = jsonTable.Temperature;
  
    local hum = jsonTable.Humidity;
  
fibaro:call(thisdevice, "setProperty", "ui.Label1.value", temp)
 fibaro:call(thisdevice, "setProperty", "ui.Label2.value", hum)
  else 
   fibaro:debug("error") 
 fibaro:call(thisdevice, "setProperty", "ui.Label1.value", "error")
  fibaro:call(thisdevice, "setProperty", "ui.Label2.value", "error")
  end

car je voudrais récupérer les infos de temperature et d'humidité d'une sonde DHT11 connecter sur un espeasy (Wemos D1)

je n'arrive pas a récupérer les infos du json voici ce que j'ai dans le debug du VD

[DEBUG] 15:04:37: { "TaskValues": [ {"ValueNumber":1, "Name":"Temperature", "NrDecimals":2, "Value":27.00 }, {"ValueNumber":2, "Name":"Humidity", "NrDecimals":2, "Value":64.00 }], "TTL":2000, "DataAcquisition": [ {"Controller":1, "IDX":1, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":2, "Type":"Environment - DHT11/12/22 SONOFF2301/7021", "TaskName":"temp-Humidite", "TaskEnabled":"true", "TaskNumber":1 }

si les pros du LUA pouvais me dire ou cela coince 

D'avance merci a tous 

Partager ce message


Lien à poster
Partager sur d’autres sites

Ce code fonctionne :

jsonTable = '{ "TaskValues": [ {"ValueNumber":1, "Name":"Temperature", "NrDecimals":2, "Value":27.00 }, {"ValueNumber":2, "Name":"Humidity", "NrDecimals":2, "Value":64.00 }], "TTL":2000, "DataAcquisition": [ {"Controller":1, "IDX":1, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":2, "Type":"Environment - DHT11/12/22 SONOFF2301/7021", "TaskName":"temp-Humidite", "TaskEnabled":"true", "TaskNumber":1 }'
jsonTable = json.decode(jsonTable)

local temp = jsonTable.TaskValues[1].Value;
local hum =  jsonTable.TaskValues[2].Value;
fibaro:debug("temp="..temp..", hum="..hum);

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Le même code un peu plus propre, les indices 1 et 2 codés en dur n'étant pas très élégants...

On recherche donc les valeurs Temperature et Humidity dans la table.

jsonTable = '{ "TaskValues": [ {"ValueNumber":1, "Name":"Temperature", "NrDecimals":2, "Value":27.00 }, {"ValueNumber":2, "Name":"Humidity", "NrDecimals":2, "Value":64.00 }], "TTL":2000, "DataAcquisition": [ {"Controller":1, "IDX":1, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":2, "Type":"Environment - DHT11/12/22 SONOFF2301/7021", "TaskName":"temp-Humidite", "TaskEnabled":"true", "TaskNumber":1 }'
jsonTable = json.decode(jsonTable)
for _, row in ipairs(jsonTable.TaskValues) do
  	fibaro:debug(json.encode(row))						-- Pour aider à la compréhension...
	if row.Name == "Temperature" then temp = row.Value
    elseif row.Name == "Humidity" then hum = row.Value
    end
end

fibaro:debug("temp="..temp..", hum="..hum);

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour et merci @Barelle 

sa fonctionne parfaitement j'aurais pas trouver 

es-que je peut te demandé 

sais tu comment mettre le symbole % et ° dans une etiquette de module virtuel 

en tout cas un grand merci a toi 

Partager ce message


Lien à poster
Partager sur d’autres sites
fibaro:call(thisdevice, "setProperty", "ui.Label1.value", temp.." °")
fibaro:call(thisdevice, "setProperty", "ui.Label2.value", hum.." %")

Et voilà !

De rien.

Partager ce message


Lien à poster
Partager sur d’autres sites

merci a toi  j'ai enfin pu mettre cette espeasy et sont dht11 en situation 

encore un grand merci 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir a tous 

Merci encore a @barelle pour sont code mais il y a un souci les valeur ne se mette pas a jour la valeur reste toujours a celle de la table json 

jsonTable = '{ "TaskValues": [ {"ValueNumber":1, "Name":"Temperature", "NrDecimals":2, "Value":27.00 }, {"ValueNumber":2, "Name":"Humidity", "NrDecimals":2, "Value":64.00 }], "TTL":2000, "DataAcquisition": [ {"Controller":1, "IDX":1, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":2, "Type":"Environment - DHT11/12/22 SONOFF2301/7021", "TaskName":"temp-Humidite", "TaskEnabled":"true", "TaskNumber":1 }'

et la deuxieme partie du code de @Barelle me sort une erreure

voici le code que j'utilise 

local thisdevice = fibaro:getSelfId() 
  local taskId = "1"
   local conn = Net.FHttp(fibaro:getValue(thisdevice, 'IPAddress'), fibaro:getValue(thisdevice, 'TCPPort')) -- connection espeasy/port
response, status, errorCode = conn:GET('/json?tasknr=' .. taskId)

fibaro:debug(response)

     fibaro:sleep(1)

       if errorCode == 0 then 
 
        fibaro:debug(status) 
  
     jsonTable = json.encode(jsonTable); --encodage de la table json espeasy
  
     
      
     jsonTable = '{ "TaskValues": [ {"ValueNumber":1, "Name":"Temperature", "NrDecimals":2, "Value":22.00 }, {"ValueNumber":2, "Name":"Humidity", "NrDecimals":2, "Value":59.00 }], "TTL":2000, "DataAcquisition": [ {"Controller":1, "IDX":1, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":2, "Type":"Environment - DHT11/12/22 SONOFF2301/7021", "TaskName":"temp-Humidite", "TaskEnabled":"true", "TaskNumber":1 }'
  
      jsonTable = json.decode(jsonTable); -- decodage de la table json espeasy

  
  
 local temp = jsonTable.TaskValues[1].Value;    -- enregistrment dans variable temp
 
  local hum =  jsonTable.TaskValues[2].Value;     --  enregistrment dans variable hum
 
    fibaro:debug("temp="..temp..", hum="..hum);
  
      fibaro:call(thisdevice, "setProperty", "ui.Label1.value", temp .."°")    -- affichage du resultat dans le label 1
  
         fibaro:call(thisdevice, "setProperty", "ui.Label2.value", hum .."%")     -- affichage du resultat dans le label 2
  else 
  
   fibaro:debug("error") 
 
    fibaro:call(thisdevice, "setProperty", "ui.Label1.value", "error")
  
      fibaro:call(thisdevice, "setProperty", "ui.Label2.value", "error")
  end

 local value = fibaro:getValue(389, "ui.Label1.value")
local value = fibaro:getValue(389, "ui.Label2.value")
  fibaro:log(value)
   fibaro:call(fibaro:getSelfId(), "setProperty", "logTemp", "TxtRed" )

portant dans le debug les valeur sont bonne dans le json.decode

mais fausse dans les variables voir debug dessous 

 

[DEBUG] 23:14:20: { "TaskValues": [ {"ValueNumber":1, "Name":"Temperature", "NrDecimals":2, "Value":20.00 }, {"ValueNumber":2, "Name":"Humidity", "NrDecimals":2, "Value":59.00 }], "TTL":2000, "DataAcquisition": [ {"Controller":1, "IDX":1, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":2, "Type":"Environment - DHT11/12/22 SONOFF2301/7021", "TaskName":"temp-Humidite", "TaskEnabled":"true", "TaskNumber":1 }
[DEBUG] 23:14:20: 200
[DEBUG] 23:14:20: temp=22, hum=59

si des expert pouvais me dire ou je me suis tromper merci a tous d'avance 

Modifié par Peter

Partager ce message


Lien à poster
Partager sur d’autres sites

Il faudrait sans doute supprimer la ligne

 jsonTable = '{ "TaskValues": [ {"ValueNumber":1, "Name":"Temperature", "NrDecimals":2, "Value":22.00 }, {"ValueNumber":2, "Name":"Humidity", "NrDecimals":2, "Value":59.00 }], "TTL":2000, "DataAcquisition": [ {"Controller":1, "IDX":1, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":2, "Type":"Environment - DHT11/12/22 SONOFF2301/7021", "TaskName":"temp-Humidite", "TaskEnabled":"true", "TaskNumber":1 }'

qui n'était là que pour les tests...

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello    @Barelle je viens de tester sans la table et j'ai une erreur mais comme je suis null voir plus que null en Lua je comprend pas

je te met le degub si tu peux m'aider a comprendre 

[DEBUG] 12:34:51: { "TaskValues": [ {"ValueNumber":1, "Name":"Temperature", "NrDecimals":2, "Value":24.00 }, {"ValueNumber":2, "Name":"Humidity", "NrDecimals":2, "Value":58.00 }], "TTL":2000, "DataAcquisition": [ {"Controller":1, "IDX":1, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":2, "Type":"Environment - DHT11/12/22 SONOFF2301/7021", "TaskName":"temp-Humidite", "TaskEnabled":"true", "TaskNumber":1 }
[DEBUG] 12:34:51: 200
[ERROR] 12:34:51: line 25: attempt to index global 'jsonTable' (a userdata value)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Peut-être avec le code ci-après :

local thisdevice = fibaro:getSelfId() 
local taskId = "1"
local conn = Net.FHttp(fibaro:getValue(thisdevice, 'IPAddress'), fibaro:getValue(thisdevice, 'TCPPort')) -- connection espeasy/port
response, status, errorCode = conn:GET('/json?tasknr=' .. taskId)

fibaro:debug(response)
//fibaro:sleep(1)
if status == 200 then 
    jsonTable = json.decode(response); -- decodage de la table json espeasy
	for _, row in ipairs(jsonTable.TaskValues) do
		fibaro:debug(json.encode(row))						-- Pour aider à la compréhension...
		if row.Name == "Temperature" then temp = row.Value
		elseif row.Name == "Humidity" then hum = row.Value
		end
	end
	fibaro:debug("temp="..temp..", hum="..hum);
	fibaro:call(thisdevice, "setProperty", "ui.Label1.value", temp .."°")    -- affichage du resultat dans le label 1
	fibaro:call(thisdevice, "setProperty", "ui.Label2.value", hum .."%")     -- affichage du resultat dans le label 2
else 
	fibaro:debug("error") 
	fibaro:call(thisdevice, "setProperty", "ui.Label1.value", "error")
    fibaro:call(thisdevice, "setProperty", "ui.Label2.value", "error")
end

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@Barelle merci pour ton aide mais il y a une erreur le debug donne cela 

 

[DEBUG] 14:16:23: { "TaskValues": [ {"ValueNumber":1, "Name":"Temperature", "NrDecimals":2, "Value":21.00 }, {"ValueNumber":2, "Name":"Humidity", "NrDecimals":2, "Value":65.00 }], "TTL":2000, "DataAcquisition": [ {"Controller":1, "IDX":1, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":2, "Type":"Environment - DHT11/12/22 SONOFF2301/7021", "TaskName":"temp-Humidite", "TaskEnabled":"true", "TaskNumber":1 }
[DEBUG] 14:16:23: error

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Et en mettant :

if tonumber(status) == 200 then

à la place de :

if status == 200 then

 

Partager ce message


Lien à poster
Partager sur d’autres sites

trop fort cela fonctionne encore un grand merci a toi 

il faut vraiment que je mi mette au Lua 

être bloqué comme cela C'est chiant en tout cas voici le debug une fois la modification faite 

[DEBUG] 14:41:48: { "TaskValues": [ {"ValueNumber":1, "Name":"Temperature", "NrDecimals":2, "Value":22.00 }, {"ValueNumber":2, "Name":"Humidity", "NrDecimals":2, "Value":68.00 }], "TTL":2000, "DataAcquisition": [ {"Controller":1, "IDX":1, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":2, "Type":"Environment - DHT11/12/22 SONOFF2301/7021", "TaskName":"temp-Humidite", "TaskEnabled":"true", "TaskNumber":1 }
[DEBUG] 14:41:48: {"Value":22,"NrDecimals":2,"Name":"Temperature","ValueNumber":1}
[DEBUG] 14:41:48: {"Value":68,"NrDecimals":2,"Name":"Humidity","ValueNumber":2}
[DEBUG] 14:41:48: temp=22, hum=68

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×