PITP2 Posté(e) le 12 février 2016 Signaler Posté(e) le 12 février 2016 Hello, ya un bout de Lua qui me résiste lol -- Affiche le retour json dans le debug function table.val_to_str ( v ) if "string" == type( v ) then v = string.gsub( v, "\n", "\\n" ) if string.match( string.gsub(v,"[^'\"]",""), '^"+$' ) then return "'" .. v .. "'" end return '"' .. string.gsub(v,'"', '\\"' ) .. '"' else return "table" == type( v ) and table.tostring( v ) or tostring( v ) end end function table.key_to_str ( k ) if "string" == type( k ) and string.match( k, "^[_%a][_%a%d]*$" ) then return k else return "[" .. table.val_to_str( k ) .. "]" end end function table.tostring( tbl ) local result, done = {}, {} for k, v in ipairs( tbl ) do table.insert( result, table.val_to_str( v ) ) done[ k ] = true end for k, v in pairs( tbl ) do if not done[ k ] then table.insert( result, table.key_to_str( k ) .. "=" .. table.val_to_str( v ) ) end end return "{" .. table.concat( result, "," ) .. "}" end HC2 = Net.FHttp("127.0.0.1",11111 ) jour_json = {"monday","tuesday","wednesday","thursday","friday","saturday","sunday"} periode_json = {"morning","day","evening","night"} data_json = {"hour","minute","temperature"} hour = {} minute = {} temperature = {} day ={} response, status, errorcode = HC2:GET("/api/panels/heating/5") monTableau = json.decode(response) fibaro:debug(table.tostring(monTableau)) -- i,j,k,l = 1 for i = 1 , 7 do for j = 1 , 7 do for k = 1 , 4 do for l = 1 , 3 do day[i] = monTableau.properties.jour_json[j].periode_json[k].data_json[l] end end end end Voila ce que me dit le debug [ERROR] 17:04:09: line 61: attempt to index field 'jour_json' (a nil value) Pourtant j'arrive à afficher ma table jour_json dans le debug
Lazer Posté(e) le 12 février 2016 Signaler Posté(e) le 12 février 2016 Y'a pas de champs jour_json dans ta variable montableau { "id": ?1, "name": "Chambre parents", "properties": { "monday": { "morning": { "hour": ?1, "minute": ?15, "temperature": ?18 }, "day": { "hour": ?6, "minute": ?45, "temperature": ?19 }, "evening": { "hour": ?7, "minute": ?45, "temperature": ?14 }, "night": { "hour": ?21, "minute": ?45, "temperature": ?19 } }, ...
PITP2 Posté(e) le 12 février 2016 Auteur Signaler Posté(e) le 12 février 2016 je suis bien d'accord mais c'est normal car j'ai écrit cela pour remplir un autre tableau à partir du Json day[i] = monTableau.properties.jour_json[j].periode_json[k].data_json[l] mais ce n'est peut etre pas autorisé
Lazer Posté(e) le 12 février 2016 Signaler Posté(e) le 12 février 2016 si tu veux indexer le jour àpartir de ton autre tableau, il faut que tu utilises des crochets, du genre : monTableau.properties.[jour_json[j]]... bon je file, je te laisser chercher et je regarde ça plus tard en détail
Lazer Posté(e) le 12 février 2016 Signaler Posté(e) le 12 février 2016 De retour devant mon PC préféré T'en es où alors ? Ca vaut le coup que je passe du temps à débugguer ton code dans mon HC2 ? Ca ne va pas mettre un virus ? 1
jojo Posté(e) le 12 février 2016 Signaler Posté(e) le 12 février 2016 @PITP2, Je n'ai pas trop le courage de regarder àfond, cela fait longtemps que je n'ai plus fait de LUA approfondi, mais je me demande si tu ne trouverais pas la réponse dans ce code ---------------------------------- -- Instructions ---------------------------------- --[[ pour le BACKUP 1) lancer cette scène en mode debug 2) copier les tables ListeHP = { ... } et ConfigHP = { ... } dans le bouton Restore du VD "Backup HeatPanel" 3) sauver le VD 4) exporter le VD sur votre disque dur pour le RESTORE (via le VD) 1) créer manuellement autant de Heating Panels qu'il y en a àrestaurer. 2) récupérez les ID de ces nouveaux Heating Panels via http://<ip>/api/panels/heating 3) dans la table ListHP, remplacer les ID actuels, par les nouveaux ID !! les noms référencés dans les tables ListeHP et ConfigHP doivent être IDENTIQUES --]] ---------------------------------- -- DO not change bellow this line ---------------------------------- Days = {"monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"} DayParts = {"morning", "day", "evening", "night"} -- backup Liste des heating panels jsonListe = api.get("/panels/heating") result = "<BR><BR>-- Backup liste des Heating Panels généré le : " .. os.date("%d/%m/%y à%X") result = result.. '<BR><BR>local ListeHP = {<BR>-- id, "name", ' for k, v in pairs(jsonListe) do result = result ..'<BR>'.. v.id ..', "' .. v.name ..'",' end result = result .. "<BR>}" --fibaro:debug(result) -- backup de la configuration détaillée des heating panels result = result.. "<BR><BR>-- Backup configuration des Heating Panls généré le : " .. os.date("%d/%m/%y à%X") result = result.. '<BR><BR>local ConfigHP = {<BR>-- "name", "day", "part", "hour", "minute", "temperature", ' for k, v in pairs(jsonListe) do jsonTable = api.get("/panels/heating/"..v.id) result = result ..'<BR>"' .. jsonTable.name ..'", ' for _,Day in pairs(Days) do result = result ..'<BR>"'..Day..'", ' for _,Part in pairs(DayParts) do result = result .. '"'..Part..'", ' result = result ..'"'.. jsonTable.properties[Day][Part].hour ..'", ' result = result ..'"'.. jsonTable.properties[Day][Part].minute ..'", ' result = result ..'"'.. jsonTable.properties[Day][Part].temperature ..'", ' end -- DayParts end -- Days end result = result .. "<BR>}" fibaro:debug(result)
PITP2 Posté(e) le 12 février 2016 Auteur Signaler Posté(e) le 12 février 2016 @Lazer, pas de risque de virus hormis celui de vouloir absolument trouver @jojo, sympa ton code et beaucoup plus propre c'est en gros ce que je voulais faire. Je décortique le truc et je reviens vers vous si j'ai des problèmes. Merci
Lazer Posté(e) le 13 février 2016 Signaler Posté(e) le 13 février 2016 Bon je te laisse regarder le code de jojo du coup Finalement je me suis lancé dans du javascript ce soir (cf topic GreaseMonkey)
mprinfo Posté(e) le 13 février 2016 Signaler Posté(e) le 13 février 2016 Puis je permettre malgré toutes les méchancetés que vous me faites @pitp2 c'est vrai que ton code torture la tête ton erreur est ici day[i] = monTableau.properties[jour_json[j]][periode_json[k]][data_json[l]] Le lua c'est comme les histoires d'amour il faut pas oublier les "[]" et surtout jamais de "." sinon c'est la fin. Et la tu beugs Autre conseil pour le lua car en amour j'y connais rien Jamais utiliser de "()" ou de break else to exit
PITP2 Posté(e) le 13 février 2016 Auteur Signaler Posté(e) le 13 février 2016 Cool ça marche merci Jojo et mprinfo, c'était bien la syntaxe qui n'était pas bonne
mprinfo Posté(e) le 13 février 2016 Signaler Posté(e) le 13 février 2016 @pitp2 de rien copain Par contre si je peux me permettre (diplomatie ON) jour_json = {"monday","tuesday","wednesday","thursday","friday","saturday","sunday"} periode_json = {"morning","day","evening","night"} data_json = {"hour","minute","temperature"} Je ne comprends pas pourquoi tu ajoutes json On ne traite pas un json on le décode pour en faire bien souvent une table moi j'aurai plutôt appelé mes varialble Jour_ heating ou simplement jour Il y a maintenant la possibilité de faire des filtres lorsque que l'on appel l'api de la HC2 cela simplifie pas mal le code j'ai fais quelques teste ça fonctionne pas mal mais juste dans les scéne. Vu ton code je pense que tu es sous un VD (diplomatie OFF)
PITP2 Posté(e) le 13 février 2016 Auteur Signaler Posté(e) le 13 février 2016 Ah ce diplomate Mprinfo tu ne voudrais pas aller en Syrie il y a une place de diplomate à prendre Le code posté n'est pas dutout ni optimisé ni fonctionnel, vous avez eu le droit à voir ce qui se passait dans mon esprit torturé la version Stable sera surement plus belle quoi que En tout cas je prends l'idée des filtres, j'avais vu passer en effet cela sur le change log mais je n'y avais plus penser 1
mprinfo Posté(e) le 13 février 2016 Signaler Posté(e) le 13 février 2016 Si je postule pour la Syrie tu voudras bien m'aider pour le CV Lol Envoyé de mon SM-G900F en utilisant Tapatalk
PITP2 Posté(e) le 13 février 2016 Auteur Signaler Posté(e) le 13 février 2016 Pourquoi pas, mais faudra demander aussi des conseils à Jojo. Je pensais d'ailleurs que tu allais prendre la place de Fabius au dernier remaniement ministériel 1
jojo Posté(e) le 13 février 2016 Signaler Posté(e) le 13 février 2016 trop tard, la place de Fabius est prise ... @PITP2 : tu ne veux tout de même pas envoyer mprinfo en Syrie pour qu'il y crève ???
PITP2 Posté(e) le 13 février 2016 Auteur Signaler Posté(e) le 13 février 2016 Non non loin de moi cette idée, en plus il doit me former ......
mprinfo Posté(e) le 14 février 2016 Signaler Posté(e) le 14 février 2016 trop tard, la place de Fabius est prise ... @PITP2 : tu ne veux tout de même pas envoyer mprinfo en Syrie pour qu'il y crève ??? Toujours vivant, rassurez vous, Toujours la banane, toujours debout, Il est pas né ou mal barré, Le crétin qui voudra m'enterrer. @jojo c'est la st valentin aujourd'hui, un petit resto cela te dis ? Oubli pas ta carte bleue
Messages recommandés