Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
LINKNX - Demande d'aide sur Lua
#1
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 Smile )

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 Smile

Idem pour &gt et &lt, 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 Smile
#2
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 Smile )

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/we...hEyFNx-UVQ

Bonne continuation,
Ben
#3
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 Smile )
>
> 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 Smile
>
> Idem pour &gt et &lt, 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 Smile
#4
Bonjour,
Merci à vous 2 Smile

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 Smile

J'avais aussi regardé le fichier sur le groupe, mais il n'y avais pas
de if à plusieurs fonctions Smile et pour <![CDATA[ je n'avais pas
compris l'intéret Smile

Merci beaucoup, maintenant je vais pouvoir avancer Smile
#5
Hmm.

Alors ce code que tu cites du manuel de Lua c'est du C, pas du Lua Smile
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 Smile
>
> 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 Smile
>
> J'avais aussi regardé le fichier sur le groupe, mais il n'y avais pas
> de if à plusieurs fonctions Smile et pour <![CDATA[  je n'avais pas
> compris l'intéret Smile
>
> Merci beaucoup, maintenant je vais pouvoir avancer Smile


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)