Peter Posté(e) le 1 juin 2019 Signaler Posté(e) le 1 juin 2019 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
Barelle Posté(e) le 1 juin 2019 Signaler Posté(e) le 1 juin 2019 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);
Barelle Posté(e) le 1 juin 2019 Signaler Posté(e) le 1 juin 2019 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);
Peter Posté(e) le 1 juin 2019 Auteur Signaler Posté(e) le 1 juin 2019 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
Barelle Posté(e) le 1 juin 2019 Signaler Posté(e) le 1 juin 2019 fibaro:call(thisdevice, "setProperty", "ui.Label1.value", temp.." °") fibaro:call(thisdevice, "setProperty", "ui.Label2.value", hum.." %") Et voilà ! De rien. 1
Peter Posté(e) le 1 juin 2019 Auteur Signaler Posté(e) le 1 juin 2019 merci a toi j'ai enfin pu mettre cette espeasy et sont dht11 en situation encore un grand merci
Peter Posté(e) le 8 juin 2019 Auteur Signaler Posté(e) le 8 juin 2019 (modifié) 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é le 8 juin 2019 par Peter
Barelle Posté(e) le 9 juin 2019 Signaler Posté(e) le 9 juin 2019 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...
Peter Posté(e) le 9 juin 2019 Auteur Signaler Posté(e) le 9 juin 2019 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)
Barelle Posté(e) le 9 juin 2019 Signaler Posté(e) le 9 juin 2019 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
Peter Posté(e) le 9 juin 2019 Auteur Signaler Posté(e) le 9 juin 2019 @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
Barelle Posté(e) le 9 juin 2019 Signaler Posté(e) le 9 juin 2019 Et en mettant : if tonumber(status) == 200 then à la place de : if status == 200 then
Peter Posté(e) le 9 juin 2019 Auteur Signaler Posté(e) le 9 juin 2019 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
giroquoi Posté(e) le 22 mars 2020 Signaler Posté(e) le 22 mars 2020 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
Barelle Posté(e) le 22 mars 2020 Signaler Posté(e) le 22 mars 2020 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.
giroquoi Posté(e) le 22 mars 2020 Signaler Posté(e) le 22 mars 2020 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)
Barelle Posté(e) le 22 mars 2020 Signaler Posté(e) le 22 mars 2020 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é ?
giroquoi Posté(e) le 22 mars 2020 Signaler Posté(e) le 22 mars 2020 Non pas du tout, pour l'instant j'ai un switch input (relié physiquement à un capteur PIR) qui doit me renvoyer 1 ou 0 Dans ESP Easy la dernière colonne 'VALUES' varie bien en fonction d'une présence ou non
Barelle Posté(e) le 22 mars 2020 Signaler Posté(e) le 22 mars 2020 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.
giroquoi Posté(e) le 22 mars 2020 Signaler Posté(e) le 22 mars 2020 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 ?
Barelle Posté(e) le 22 mars 2020 Signaler Posté(e) le 22 mars 2020 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
giroquoi Posté(e) le 22 mars 2020 Signaler Posté(e) le 22 mars 2020 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
giroquoi Posté(e) le 22 mars 2020 Signaler Posté(e) le 22 mars 2020 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)
Barelle Posté(e) le 22 mars 2020 Signaler Posté(e) le 22 mars 2020 C'est curieux, la requête avec tasknr retourne un json invalide. 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
giroquoi Posté(e) le 22 mars 2020 Signaler Posté(e) le 22 mars 2020 [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)
Messages recommandés