Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Re: Syntax condition dans rules linknx
#1
au final voici une solution qui gère aussi le "off" du BP
exemple pour la rule du BP1 :
cela traitera la rule à chaque changement d'état de "BP1"

<rule id="commut_mode_BP1">
<condition type="object" id="BP1" trigger="true"/>
<actionlist>
<action type="script">
BP1 = obj("BP1");
M1 = obj("M1");
M2 = obj("M2");
M3 = obj("M3");
M4 = obj("M4");
if BP1 = "on"
if M1 = "on"
set("S1", "on");
set("S2", "off");
...
end;
if M2 = "on"
set("S1", "off");
set("S2", "off");
...
end;
...
end;
if BP1 = "off"
if M1 = "on"
set("S1", "on");
set("S2", "on");
set("S2_val_ecl", 50);
...
end;
if M2 = "on"
set("S1", "off");
set("S2", "on");
...
end;
...
end;
</action>
</actionlist>
</rule>


> il faudra aussi peut-être ne pas oublier le flag 's' dans la définition
> des objet M et BP

cela ne sert à "rien" le falg 's' sur M ou BP car on ne fait que les "lire"
par contre sur les sorties S1 à S6 ça peut-être utile pour forcer l'envoi

@+
Anthony.
#2
Bonjour,

je viens d’essayer le script (heu, oui, le temps me manque en ce moment...)
et j'ai une erreur :

1306422864 ERROR Action : LuaScriptAction error: [string "BP1 = obj("BP1");
BP2 = obj("BP2"); M1 = obj("M1"); M2 = obj("M..."]:1: 'then' expected near
'='

Voici le script:
############################
<rule id="commutation mode">
<condition type="or">
<condition type="object" id="BP1" value="on" trigger="true"/>
<condition type="object" id="BP2" value="on" trigger="true"/>
</condition>
<actionlist>
<action type="script">
BP1 = obj("BP1");
BP2 = obj("BP2");
M1 = obj("M1");
M2 = obj("M2");

if M1 = "on"
if BP1 = "on"
set("Downlight", "off");
set("Acceuil fenetre", "off");
set("Accueil mur", "off");
end;
if BP2 = "on"
set("Downlight", "on");
set("Acceuil fenetre", "on");
set("Accueil mur", "on");
end;
end;

if M2 = "on"
if BP1 = "on"
set("Downlight", "off");
set("Accueil fenetre", "on");
set("Accueil mur", "on");
end;
if BP2 = "on"
set("Downlight", "on");
set("Acceuil fenetre", "off");
set("Accueil mur", "off");
set("Accueil mur", "off");
end;
end;
</action>
</actionlist>
</rule>
#########################

A priori je n'ai pas vu de faute particulière. Je continu de chercher mais
si quelqu'un a une idée de suis preneur.

Merci d'avance !

Le 7 avril 2011 16:13, Anthony PENHARD <a.penhard@gmail.com> a écrit :

> au final voici une solution qui gère aussi le "off" du BP
> exemple pour la rule du BP1 :
> cela traitera la rule à chaque changement d'état de "BP1"
>
> <rule id="commut_mode_BP1">
> <condition type="object" id="BP1" trigger="true"/>
> <actionlist>
> <action type="script">
> BP1 = obj("BP1");
> M1 = obj("M1");
> M2 = obj("M2");
> M3 = obj("M3");
> M4 = obj("M4");
> if BP1 = "on"
> if M1 = "on"
> set("S1", "on");
> set("S2", "off");
> ...
> end;
> if M2 = "on"
> set("S1", "off");
> set("S2", "off");
> ...
> end;
> ...
> end;
> if BP1 = "off"
> if M1 = "on"
> set("S1", "on");
> set("S2", "on");
> set("S2_val_ecl", 50);
> ...
> end;
> if M2 = "on"
> set("S1", "off");
> set("S2", "on");
> ...
> end;
> ...
> end;
> </action>
> </actionlist>
> </rule>
>
>
> > il faudra aussi peut-être ne pas oublier le flag 's' dans la définition
> > des objet M et BP
>
> cela ne sert à "rien" le falg 's' sur M ou BP car on ne fait que les "lire"
> par contre sur les sorties S1 à S6 ça peut-être utile pour forcer l'envoi
>
> @+
> Anthony.
>
>
>
>
>
#3
dans ton script tu as :

if M1 = "on"

mais devrait être :

if M1 == "on"

je pense
valable pour tout tes "if"

@+
Anthony
#4
J'avais vu ca sur internet mais l'erreur avais juste changée je me suis dit
que ce n'était pas ça

1306425172 ERROR Action : LuaScriptAction error: [string "BP1 = obj("BP1");
BP2 = obj("BP2"); M1 = obj("M1"); M2 = obj("M..."]:1: 'then' expected near
'if'

Le 26 mai 2011 17:46, Anthony PENHARD <a.penhard@gmail.com> a écrit :

>
> dans ton script tu as :
>
> if M1 = "on"
>
> mais devrait être :
>
> if M1 == "on"
>
> je pense
> valable pour tout tes "if"
>
> @+
> Anthony
>
>
#5
Comme le message d'erreur le suggère, "'then' expected near 'if' "
signifie qu'il attend un "then" après le "if".

Ca devrait être un truc du style
if M1 == "on" then
if BP1 == "on" then
....



On 26 mai, 17:52, Stephane Triglia <stephane.trig...@gmail.com> wrote:
> J'avais vu ca sur internet mais l'erreur avais juste changée je me suis dit
> que ce n'était pas ça
>
> 1306425172 ERROR Action : LuaScriptAction error: [string "BP1 = obj("BP1");
> BP2 = obj("BP2"); M1 = obj("M1"); M2 = obj("M..."]:1: 'then' expected near
> 'if'
>
> Le 26 mai 2011 17:46, Anthony PENHARD <a.penh...@gmail.com> a écrit :
>
>
>
>
>
>
>
>
>
> > dans ton script tu as :
>
> > if M1 = "on"
>
> > mais devrait être :
>
> > if M1 == "on"
>
> > je pense
> > valable pour tout tes "if"
>
> > @+
> > Anthony
#6
Salut,

j'avais bien vu ça mais je n'avais pas pensé a le mettre sur le premier if
donc l'erreur restait identique et comme la ligne ne s'affiche pas dans
l'erreur ...

if M1 = "on"
if BP1 = "on" then
set("Downlight", "off");
set("Acceuil fenetre", "off");
set("Accueil mur", "off");
end;

donc ça ne marché pas ... mais étant donné que ça faisait partie de la même
condition (si M1 et si M2) je ne pensé pas qu'il le fallait...

En tout cas merci ça fonctionne a merveille !

Par contre j'ai un autre problème qui vient de linknx, dans le cadre de mon
utilisation je n'utilise pas le OFF du bouton et a moins de rajouter dans le
script "if BP1 = "off"", et de mettre mon BP en commutation ON/OFF je ne
vois pas comment ne pas prendre en compte le OFF (ou ca fait un appui de
plus "incertain" car pas de retour d'état si le BP a envoyé ON ou OFF en
dernier...

N'y a t'il pas un moyen pour que linknx reconnaisse l'envoi d'un ON
uniquement (le problème est que vu que linknx enregistre l'état il ne prend
pas en compte l'envoi d'un on sur un état déjà on).

Merci bien !

Stephane
2011/5/26 jef2000 <jef2000@ouaye.net>

> Comme le message d'erreur le suggère, "'then' expected near 'if' "
> signifie qu'il attend un "then" après le "if".
>
> Ca devrait être un truc du style
> if M1 == "on" then
> if BP1 == "on" then
> ....
>
>
>
> On 26 mai, 17:52, Stephane Triglia <stephane.trig...@gmail.com> wrote:
> > J'avais vu ca sur internet mais l'erreur avais juste changée je me suis
> dit
> > que ce n'était pas ça
> >
> > 1306425172 ERROR Action : LuaScriptAction error: [string "BP1 =
> obj("BP1");
> > BP2 = obj("BP2"); M1 = obj("M1"); M2 = obj("M..."]:1: 'then' expected
> near
> > 'if'
> >
> > Le 26 mai 2011 17:46, Anthony PENHARD <a.penh...@gmail.com> a écrit :
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > > dans ton script tu as :
> >
> > > if M1 = "on"
> >
> > > mais devrait être :
> >
> > > if M1 == "on"
> >
> > > je pense
> > > valable pour tout tes "if"
> >
> > > @+
> > > Anthony
>
#7
Je viens aussi de remarquer que tant que je n'ai pas mis a OFF un des deux
boutons (et donc désactiver une des action) je ne peut pas lancer de
seconde
action !?

Cas pratique:

1306482824 INFO Object : New value on for object M2 (type: 1.001)
1306482826 INFO Object : New value on for object BP1 (type: 1.001)
1306482826 INFO Rule : Evaluate rule commutation mode
1306482826 INFO ObjectValue : SwitchingObjectValue: Compare value_m='1' to
value='1'
1306482826 INFO Condition : ObjectCondition (id='BP1') evaluated as '1'
1306482826 INFO Rule : Rule commutation mode evaluated as 1, prev value was
1
1306482828 INFO Object : New value off for object BP2 (type: 1.001)
1306482828 INFO Rule : Evaluate rule commutation mode
1306482828 INFO ObjectValue : SwitchingObjectValue: Compare value_m='1' to
value='1'
1306482828 INFO Condition : ObjectCondition (id='BP1') evaluated as '1'
1306482828 INFO Rule : Rule commutation mode evaluated as 1, prev value was
1

Si j'envoi un off de BP1 avant l’enclenchement de BP2 ça fonctionne
correctement.

Un idée ?

Le 27 mai 2011 09:34, Stephane Triglia <stephane.triglia@gmail.com> a écrit
:

> Salut,
>
> j'avais bien vu ça mais je n'avais pas pensé a le mettre sur le premier if
> donc l'erreur restait identique et comme la ligne ne s'affiche pas dans
> l'erreur ...
>
> if M1 = "on"
> if BP1 = "on" then
> set("Downlight", "off");
> set("Acceuil fenetre", "off");
> set("Accueil mur", "off");
> end;
>
> donc ça ne marché pas ... mais étant donné que ça faisait partie de la
> même condition (si M1 et si M2) je ne pensé pas qu'il le fallait...
>
> En tout cas merci ça fonctionne a merveille !
>
> Par contre j'ai un autre problème qui vient de linknx, dans le cadre de mon
> utilisation je n'utilise pas le OFF du bouton et a moins de rajouter dans le
> script "if BP1 = "off"", et de mettre mon BP en commutation ON/OFF je ne
> vois pas comment ne pas prendre en compte le OFF (ou ca fait un appui de
> plus "incertain" car pas de retour d'état si le BP a envoyé ON ou OFF en
> dernier...
>
> N'y a t'il pas un moyen pour que linknx reconnaisse l'envoi d'un ON
> uniquement (le problème est que vu que linknx enregistre l'état il ne prend
> pas en compte l'envoi d'un on sur un état déjà on).
>
> Merci bien !
>
> Stephane
> 2011/5/26 jef2000 <jef2000@ouaye.net>
>
>> Comme le message d'erreur le suggère, "'then' expected near 'if' "
>> signifie qu'il attend un "then" après le "if".
>>
>> Ca devrait être un truc du style
>> if M1 == "on" then
>> if BP1 == "on" then
>> ....
>>
>>
>>
>> On 26 mai, 17:52, Stephane Triglia <stephane.trig...@gmail.com> wrote:
>> > J'avais vu ca sur internet mais l'erreur avais juste changée je me suis
>> dit
>> > que ce n'était pas ça
>> >
>> > 1306425172 ERROR Action : LuaScriptAction error: [string "BP1 =
>> obj("BP1");
>> > BP2 = obj("BP2"); M1 = obj("M1"); M2 = obj("M..."]:1: 'then' expected
>> near
>> > 'if'
>> >
>> > Le 26 mai 2011 17:46, Anthony PENHARD <a.penh...@gmail.com> a écrit :
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > > dans ton script tu as :
>> >
>> > > if M1 = "on"
>> >
>> > > mais devrait être :
>> >
>> > > if M1 == "on"
>> >
>> > > je pense
>> > > valable pour tout tes "if"
>> >
>> > > @+
>> > > Anthony
>>
>
>


Atteindre :


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