LINKNX - Demande d'aide sur Lua - Version imprimable +- Forum KNX francophone / English KNX forum (https://www.knx-fr.com) +-- Forum : Français (https://www.knx-fr.com/forumdisplay.php?fid=3) +--- Forum : Archives eib-domotique (https://www.knx-fr.com/forumdisplay.php?fid=8) +--- Sujet : LINKNX - Demande d'aide sur Lua (/showthread.php?tid=1502) |
LINKNX - Demande d'aide sur Lua - Roby - 14/07/2010 Bonjour, J'ai des petits souci de compréhension sur les scripts lua géré par linknx ... Pour le moment, ca ne concerne que les "if". Je m'explique : Si je fais : "if a < b then set("mode","on") end;" C'est ok Si je fais "if a > b then set("mode","on") else set("mode","off") end;" C'est aussi ok. Mais dès que je veux mettre plusieurs commandes sur le if, par exemple : "if a > b { set("mode","on"); set("mode2","on"); } else { set("mode","off"); set("mode2","off"); }" La ca ne fonctionne pas, il me dit qu'il me manque le then avant le else ... (mais si je le met, ça ne fonctionne pas non plus ) Donc voila, si quelqu'un a déjà fait un if avec plusieurs actions, je suis preneur. Pour le moment, je fait un if et un else à une fonction 3 fois pour avoir mes 3 actions, mais bon c'est pas top pour les modifications ... Deuxième souci, mais un peu moins grave, pour les comparaisons, l'opérande > fonctionne, mais < indique une erreur, j'imagine que c'est la parsing XML qui pose souci, mais je ne sais pas comment échapper le caractère pour lui permettre de fonctionner. Pour le moment, j'échange mes variables de sens et j'utilise >, mais je voulais le signaler Idem pour > et <, toujours un message d'erreur dans les logs (sans le &), peux-être un problème identique ... Et dernière question, existe-t-il un simulateur de script lua histoire que je puisse tester avant de mettre dans linknx ? Merci d'avance LINKNX - Demande d'aide sur Lua - Ben - 14/07/2010 Salut, > Mais dès que je veux mettre plusieurs commandes sur le if, par > exemple : > "if a > b { > set("mode","on"); > set("mode2","on");} > > else > { > set("mode","off"); > set("mode2","off"); > > }" > > La ca ne fonctionne pas, il me dit qu'il me manque le then avant le > else ... (mais si je le met, ça ne fonctionne pas non plus ) Essaye comme ceci (sans les accolades, ni les points virgules) : if a > b then set("mode","on") set("mode2","on") else set("mode","off") set("mode2","off") end > Deuxième souci, mais un peu moins grave, pour les comparaisons, > l'opérande > fonctionne, mais < indique une erreur, j'imagine que > c'est la parsing XML qui pose souci, mais je ne sais pas comment > échapper le caractère pour lui permettre de fonctionner. Je te conseille d'encapsuler tes scripts LUA de cette manière : <![CDATA[ if a > b then set("mode","on") set("mode2","on") else set("mode","off") set("mode2","off") end ]]> Et la toute première ligne de ton fichier xml doit ressembler à ça : <?xml version="1.0" encoding="iso-8859-1"?> Comme ça, plus d'erreur de syntaxe XML... Si tu veux, il y a un fichier "linknx_exemple.xml" assez complet dans la rubrique "fichiers" : http://domotique-eib.googlegroups.com/web/linknx_exemple.xml?hl=fr&gda=8fIDZUMAAAAXLzoOa0MZ4vjJ8WbZS2YpOITTO-Xd_hJUTUapbOGV813N1eAbQtbNdyqmd8tNqB9V6u9SiETdg0Q2ffAyHU-dxHBssQETbNIfhEyFNx-UVQ Bonne continuation, Ben LINKNX - Demande d'aide sur Lua - fred - 14/07/2010 Tu peux installer Lua sur le Pc en "standalone", comme perl ou autre, et faire Lua mon_script.lua et si c'est pas syntaxiquement juste ca ralera. Il y a pleins de versions disponibles, les plus "officielles" sont la: http://luabinaries.sourceforge.net/download.html Je ne sais pas pourquoi si tu mets plusieurs actions tu passe de "then .. end" a "{ ... }" ? Ca marche pas comme ca: if a > b then set("mode","on"); set("mode2","on"); else set("mode","off"); set("mode2","off"); end Si jamais le manuel de référence de Lua est sur le web: http://www.lua.org/manual/5.1/manual.html HTH Fred On Jul 14, 9:22 am, Roby <goo...@macuba.net> wrote: > Bonjour, > > J'ai des petits souci de compréhension sur les scripts lua géré par > linknx ... > > Pour le moment, ca ne concerne que les "if". Je m'explique : > > Si je fais : > "if a < b then set("mode","on") end;" > C'est ok > Si je fais > "if a > b then set("mode","on") else set("mode","off") end;" > C'est aussi ok. > > Mais dès que je veux mettre plusieurs commandes sur le if, par > exemple : > "if a > b { > set("mode","on"); > set("mode2","on");} > > else > { > set("mode","off"); > set("mode2","off"); > > }" > > La ca ne fonctionne pas, il me dit qu'il me manque le then avant le > else ... (mais si je le met, ça ne fonctionne pas non plus ) > > Donc voila, si quelqu'un a déjà fait un if avec plusieurs actions, je > suis preneur. Pour le moment, je fait un if et un else à une fonction > 3 fois pour avoir mes 3 actions, mais bon c'est pas top pour les > modifications ... > > Deuxième souci, mais un peu moins grave, pour les comparaisons, > l'opérande > fonctionne, mais < indique une erreur, j'imagine que > c'est la parsing XML qui pose souci, mais je ne sais pas comment > échapper le caractère pour lui permettre de fonctionner. Pour le > moment, j'échange mes variables de sens et j'utilise >, mais je > voulais le signaler > > Idem pour > et <, toujours un message d'erreur dans les logs (sans > le &), peux-être un problème identique ... > > Et dernière question, existe-t-il un simulateur de script lua histoire > que je puisse tester avant de mettre dans linknx ? > > Merci d'avance LINKNX - Demande d'aide sur Lua - Roby - 16/07/2010 Bonjour, Merci à vous 2 Concernant le manuel de référence de Lua, j'avais justement trouvé ça : if (nsize == 0) { free(ptr); return NULL; } else return realloc(ptr, nsize); Qui était le seul exemple avec plusieurs actions ... mais ca ne fonctionne pas ... j'ai donc fait : if a > b then set("mode","on") set("mode2","on") else set("mode","off") set("mode2","off") end Et c'est ok ! (je ne sais pas si le proposition de fred avec les ; après chaque lignes fonctionne, je ne pense pas) Je me suis un peu emmelé dans tout ça J'avais aussi regardé le fichier sur le groupe, mais il n'y avais pas de if à plusieurs fonctions et pour <![CDATA[ je n'avais pas compris l'intéret Merci beaucoup, maintenant je vais pouvoir avancer LINKNX - Demande d'aide sur Lua - fred - 16/07/2010 Hmm. Alors ce code que tu cites du manuel de Lua c'est du C, pas du Lua Cette partie de la spec décrit comment "conduire" Lua depuis C (ce que fait LinKNX pour exécuter ton code Lua, en fait). Je sais c'est trompeur. Toute la section 3 parle de l'API en C de Lua. Code Lua -> section 2 seulement. Pour les ;, c'est comme tu veux. 2.4.1: "Each statement can be optionally followed by a semicolon" Bon amusement Fred On Jul 16, 12:05 pm, Roby <goo...@macuba.net> wrote: > Bonjour, > Merci à vous 2 > > Concernant le manuel de référence de Lua, j'avais justement trouvé > ça : > if (nsize == 0) { > free(ptr); > return NULL; > } > else > return realloc(ptr, nsize); > > Qui était le seul exemple avec plusieurs actions ... mais ca ne > fonctionne pas ... > > j'ai donc fait : > if a > b then > set("mode","on") > set("mode2","on") > else > set("mode","off") > set("mode2","off") > end > > Et c'est ok ! (je ne sais pas si le proposition de fred avec les ; > après chaque lignes fonctionne, je ne pense pas) > Je me suis un peu emmelé dans tout ça > > J'avais aussi regardé le fichier sur le groupe, mais il n'y avais pas > de if à plusieurs fonctions et pour <![CDATA[ je n'avais pas > compris l'intéret > > Merci beaucoup, maintenant je vais pouvoir avancer |