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.

  • Like 1

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

Bonjour, 

Je rencontre une erreur lors du déboguage du code.

Sauriez vous à quoi cela correspond?

Voici le code que j'ai copié collé et modifié selon vos remarques 

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 tonumber(status) == 200 then
    jsonTable = json.decode(response); -- decodage de la table json espeasy
	for _, row in ipairs(jsonTable.TaskValues) do
							-- 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

J'obtiens le debug suivant :

[DEBUG] 13:31:12: { "TaskValues": [ {"ValueNumber":1, "Name":"State", "NrDecimals":0, "Value":0 }], "TTL":1000, "DataAcquisition": [ {"Controller":1, "IDX":0, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":1, "Type":"Switch input - Switch", "TaskName":"pirdupir", "TaskDeviceNumber":1, "TaskEnabled":"true", "TaskNumber":1 } "TTL":1000 }

[ERROR] 13:31:12: line 10: Expected the end but found T_STRING at character 391

On voit qu'il y a une Communication qui se fait avec l'espeasy puisqu'il reconnait le nom du capteur PIR "pirdupir" par contre pas de retour de valeur et cette erreur :

[ERROR] 13:31:12: line 10: Expected the end but found T_STRING at character 391

 

Merci pour votre retour

 

Partager ce message


Lien à poster
Partager sur d’autres sites

La réponse ne comprend pas les champs Temperature et Humidity, il faudrait changer la requête :

 

response, status, errorCode = conn:GET('/json?tasknr=' .. taskId)

en 

 

response, status, errorCode = conn:GET('/json')

puis, reposte le debug.

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici le debug après modif

 

[DEBUG] 14:26:17: {"System":{ "Build":20104, "Git Build":"mega-20200310", "System Libraries":"ESP82xx Core 3d128e5c, NONOS SDK 2.2.2-dev(a58da79), LWIP: 2.1.2 PUYA support", "Plugin Count":46, "Plugin Description":"[Normal]", "Local Time":"1970-01-01 00:43:28", "Unit Number":0, "Unit Name":"ESP_Easy", "Uptime":43, "Last Boot Cause":"Cold boot", "Reset Reason":"External System", "Load":8.80, "Load LC":4426, "CPU Eco Mode":"false", "Heap Max Free Block":19320, "Heap Fragmentation":11, "Free RAM":21736 }, "WiFi":{ "Hostname":"ESP-Easy", "IP Config":"DHCP", "IP Address":"192.168.5.70", "IP Subnet":"255.255.255.0", "Gateway":"192.168.5.1", "STA MAC":"84:F3:EB:E3:8C:81", "DNS 1":"192.168.5.1", "DNS 2":"(IP unset)", "SSID":"Time Capsule", "BSSID":"70:73:CB:B6:ED:B9", "Channel":11, "Connected msec":2605135, "Last Disconnect Reason":1, "Last Disconnect Reason str":"(1) Unspecified", "Number Reconnects":0, "Force WiFi B/G":"false", "Restart WiFi Lost Conn":"false", "Force WiFi No Sleep":"false", "Periodical send Gratuitous ARP":"false", "Connection Failure Threshold":0, "RSSI":-85 }, "Sensors":[ { "TaskValues": [ {"ValueNumber":1, "Name":"State", "NrDecimals":0, "Value":0 }], "DataAcquisition": [ {"Controller":1, "IDX":0, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":1, "Type":"Switch input - Switch", "TaskName":"pirdupir", "TaskDeviceNumber":1, "TaskEnabled":"true", "TaskNumber":1 } ], "TTL":1000 }

[ERROR] 14:26:17: line 11: bad argument #1 to 'ipairs' (table expected, got nil)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Dans la réponse de l'ESP Easy, il n'y a aucune valeur ressemblant à une température ou une humidité, as-tu bien un capteur qui y est connecté et qui y est déclaré ? 

Partager ce message


Lien à poster
Partager sur d’autres sites

Non pas du tout, pour l'instant j'ai un switch input (relié physiquement à un capteur PIR) qui doit me renvoyer 1 ou 0

image.thumb.png.b0cd82c735317d4bbc7a7901e6994be9.png

 

Dans ESP Easy la dernière colonne 'VALUES' varie bien en fonction d'une présence ou non

image.png

Partager ce message


Lien à poster
Partager sur d’autres sites

Dans ce cas, il est tout à fait normal que cela ne fonctionne pas, le code servant à récupérer les valeurs de température et d'humidité d'un capteur DHT22.

Partager ce message


Lien à poster
Partager sur d’autres sites

Ceci explique cela :/ navré

J'ai un peu de mal à Interpreter le code.

Comment puis je l'adapter pour récupérer l'information binaire du switch ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Avec cela, on ne devrait pas être loin du résultat attendu :

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)
if tonumber(status) == 200 then
      jsonTable = json.decode(response);
      fibaro:debug("Nom du capteur=".. jsonTable.TaskName..", valeur="..jsonTable.TaskValues.Value);
else 
      fibaro:debug("error") 
end

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Code

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)
if tonumber(status) == 200 then
      jsonTable = json.decode(response);
      fibaro:debug("pirdupir=".. jsonTable.TaskName..", valeur="..jsonTable.TaskValues.Value);
else 
      fibaro:debug("error") 
end

debug

[DEBUG] 15:54:09: { "TaskValues": [ {"ValueNumber":1, "Name":"pirdupir", "NrDecimals":0, "Value":0 }], "TTL":1000, "DataAcquisition": [ {"Controller":1, "IDX":1, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":1, "Type":"Switch input - Switch", "TaskName":"pirdupir", "TaskDeviceNumber":1, "TaskEnabled":"true", "TaskNumber":1 } "TTL":1000 }

[ERROR] 15:54:09: line 8: Expected the end but found T_STRING at character 394

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Si c'est la même erreur que précedemment, 

je modifie la ligne 4

J'obtiens cette fois 

 

Code

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')
fibaro:debug(response)
if tonumber(status) == 200 then
      jsonTable = json.decode(response);
      fibaro:debug("pirdupir=".. jsonTable.TaskName..", valeur="..jsonTable.TaskValues.Value);
else 
      fibaro:debug("error") 
end

Debug

[DEBUG] 15:56:29: {"System":{ "Build":20104, "Git Build":"mega-20200310", "System Libraries":"ESP82xx Core 3d128e5c, NONOS SDK 2.2.2-dev(a58da79), LWIP: 2.1.2 PUYA support", "Plugin Count":46, "Plugin Description":"[Normal]", "Local Time":"1970-01-01 00:05:41", "Unit Number":0, "Unit Name":"ESP_Easy", "Uptime":6, "Last Boot Cause":"Cold boot", "Reset Reason":"External System", "Load":9.20, "Load LC":4392, "CPU Eco Mode":"false", "Heap Max Free Block":18864, "Heap Fragmentation":13, "Free RAM":21560 }, "WiFi":{ "Hostname":"ESP-Easy", "IP Config":"DHCP", "IP Address":"192.168.5.70", "IP Subnet":"255.255.255.0", "Gateway":"192.168.5.1", "STA MAC":"84:F3:EB:E3:8C:81", "DNS 1":"192.168.5.1", "DNS 2":"(IP unset)", "SSID":"Time Capsule", "BSSID":"70:73:CB:B6:ED:B9", "Channel":11, "Connected msec":338518, "Last Disconnect Reason":1, "Last Disconnect Reason str":"(1) Unspecified", "Number Reconnects":0, "Force WiFi B/G":"false", "Restart WiFi Lost Conn":"false", "Force WiFi No Sleep":"false", "Periodical send Gratuitous ARP":"false", "Connection Failure Threshold":0, "RSSI":-84 }, "Sensors":[ { "TaskValues": [ {"ValueNumber":1, "Name":"pirdupir", "NrDecimals":0, "Value":0 }], "DataAcquisition": [ {"Controller":1, "IDX":1, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":1, "Type":"Switch input - Switch", "TaskName":"pirdupir", "TaskDeviceNumber":1, "TaskEnabled":"true", "TaskNumber":1 } ], "TTL":1000 }

[ERROR] 15:56:29: line 9: attempt to index field 'TaskValues' (a nil value)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est curieux, la requête avec tasknr retourne un json invalide. :angry:

 

donc, on va utiliser la requête json qui retourne un max de données  :

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

fibaro:debug(response)

if tonumber(status) == 200 then
	jsonTable = json.decode(response); -- decodage de la table json espeasy
	for _, row in ipairs(jsonTable.Sensors.TaskValues) do
		if row.Name == sensorName then
			sensorValue = row.Value;
			fibaro:debug("Nom du capteur=".. row.Name..", valeur="..row.Value);
			break;
		end
	end
else 
	fibaro:debug("error, status="..status) 
end

 

Partager ce message


Lien à poster
Partager sur d’autres sites
[DEBUG] 16:24:13: {"System":{ "Build":20104, "Git Build":"mega-20200310", "System Libraries":"ESP82xx Core 3d128e5c, NONOS SDK 2.2.2-dev(a58da79), LWIP: 2.1.2 PUYA support", "Plugin Count":46, "Plugin Description":"[Normal]", "Local Time":"1970-01-01 00:33:26", "Unit Number":0, "Unit Name":"ESP_Easy", "Uptime":33, "Last Boot Cause":"Cold boot", "Reset Reason":"External System", "Load":9.50, "Load LC":4029, "CPU Eco Mode":"false", "Heap Max Free Block":3832, "Heap Fragmentation":59, "Free RAM":9936 }, "WiFi":{ "Hostname":"ESP-Easy", "IP Config":"DHCP", "IP Address":"192.168.5.70", "IP Subnet":"255.255.255.0", "Gateway":"192.168.5.1", "STA MAC":"84:F3:EB:E3:8C:81", "DNS 1":"192.168.5.1", "DNS 2":"(IP unset)", "SSID":"Time Capsule", "BSSID":"70:73:CB:B6:ED:B9", "Channel":11, "Connected msec":188448, "Last Disconnect Reason":200, "Last Disconnect Reason str":"(200) Beacon timeout", "Number Reconnects":3, "Force WiFi B/G":"false", "Restart WiFi Lost Conn":"false", "Force WiFi No Sleep":"false", "Periodical send Gratuitous ARP":"false", "Connection Failure Threshold":0, "RSSI":-86 }, "Sensors":[ { "TaskValues": [ {"ValueNumber":1, "Name":"pirdupir", "NrDecimals":0, "Value":1 }], "DataAcquisition": [ {"Controller":1, "IDX":1, "Enabled":"true" }, {"Controller":2, "IDX":0, "Enabled":"false" }, {"Controller":3, "IDX":0, "Enabled":"false" }], "TaskInterval":1, "Type":"Switch input - Switch", "TaskName":"pirdupir", "TaskDeviceNumber":1, "TaskEnabled":"true", "TaskNumber":1 } ], "TTL":1000 }

[ERROR] 16:24:13: line 11: bad argument #1 to 'ipairs' (table expected, got nil)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×