Aller au contenu

Messages recommandés

Posté(e)

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  :huh:

 

 

 

 

Posté(e)

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
    }

},

...

Posté(e)

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é

Posté(e)

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 ;)

Posté(e)

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 ?

  • Upvote 1
Posté(e)

@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)

Posté(e)

@Lazer, pas de risque de virus hormis celui de vouloir absolument trouver  :P

 

@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  :)

Posté(e)

Bon je te laisse regarder le code de jojo du coup :)

 

Finalement je me suis lancé dans du javascript ce soir :rolleyes: (cf topic GreaseMonkey)

Posté(e)

Puis je permettre malgré toutes les méchancetés que vous me faites :2:

 

@pitp2 c'est vrai que ton code torture la tête :D

 

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 :D

Posté(e)

@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) :D

Posté(e)

Ah ce diplomate Mprinfo  :)  tu ne voudrais pas aller en Syrie il y a une place de diplomate à  prendre  :2:

 

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  :P  sera surement plus belle quoi que  :D

 

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  :(

  • Upvote 1
Posté(e)

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  :2:

  • Upvote 1
Posté(e)

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 ???

Posté(e)

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. :D

 

@jojo c'est la st valentin aujourd'hui, un petit resto cela te dis ? Oubli pas ta carte bleue :98:

×
×
  • Créer...