Forum KNX francophone / English KNX forum

Version complète : Socket lua... tu va me rendre fou !!
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.

Casi

Bonsoir !!

J'exécute un script lua via une rule linknx, mais celle-ci ne semble
pas s'exécuter voici en détail le code pour comprendre :

<!-- Règles automatiques -->
<rule id="RadioSDB">
<condition type="object" id="audio_sdb"
value="on" trigger="true"/>
<actionlist type="if-true">
<action type="script">
http = require("socket.http")
c = http.request("http://192.168.1.51:8081/
requests/status.xml?command=in_play&input=http://xxx/mfm.php")
</action>
</actionlist>
<actionlist type="on-false">
<action type="script">
http = require("socket.http")
c = http.request("http://
192.168.1.51:8081/requests/status.xml?
command=pl_stop")
</action>
</actionlist>
</rule>

Dans ce code c'est la partie if-true qui ne fonctionne pas !
Pour info, un écouteur vlc est présent sur le 192.168.1.51 port 8081
Si j'exécute cette requête dans un navigateur, cela marche! Si
j'exécute cette requête via lua, cela marche :
bash > lua

> http = require("socket.http")
> c = http.request("http://192.168.1.51:8081/requests/status.xml?command=in_play&input=ht...")

Par contre via linknx, rien a faire !!!!!!!!!! alors que la condition
on-false est bien exécutée !!!!!!!!

Je vois aussi dans la trace que les deux conditions sont bien
exécutes :

1299018330 INFO Object : New value on for object audio_sdb (type:
1.001)
1299018330 INFO SwitchingObject : SwitchingObject (id=audio_sdb):
Compare value_m='1' to value='1'
1299018330 INFO Condition : ObjectCondition (id='audio_sdb') evaluated
as '1'
1299018330 INFO Action : Execute LuaScriptAction
Write from 1.1.13 to 1/1/5: 00
1299018332 INFO Object : New value off for object audio_sdb (type:
1.001)
1299018332 INFO SwitchingObject : SwitchingObject (id=audio_sdb):
Compare value_m='0' to value='1'
1299018332 INFO Condition : ObjectCondition (id='audio_sdb') evaluated
as '0'
1299018332 INFO Action : Execute LuaScriptAction
Write from 1.1.40 to 1/1/8: 00

Une bonne âme qui connait lua serait le bienvenu !!!!

Cordialement,
Yannick

Arnaud Cognard

Hello,
Tiens, c'est la journée lua.
Pas certains que ca joue, mais il manque pas 1 ";" a chaque fin de ligne ?
http = require("socket.http");
c =
http.request("http://192.168.1.51:8081/requests/status.xml?command=pl_stop")
;
Arnaud

-----Message d'origine-----
De : domotique-eib@googlegroups.com [mailto:domotique-eib@googlegroups.com]
De la part de Casi
Envoyé : mardi 1 mars 2011 23:44
À : domotique-EIB
Objet : Socket lua... tu va me rendre fou !!


Bonsoir !!

J'exécute un script lua via une rule linknx, mais celle-ci ne semble
pas s'exécuter voici en détail le code pour comprendre :

<!-- Règles automatiques -->
<rule id="RadioSDB">
<condition type="object" id="audio_sdb"
value="on" trigger="true"/>
<actionlist type="if-true">
<action type="script">
http = require("socket.http")
c =
http.request("http://192.168.1.51:8081/requests/status.xml?command=in_play&i
nput=http://xxx/mfm.php")
</action>
</actionlist>
<actionlist type="on-false">
<action type="script">
http = require("socket.http")
c =
http.request("http://192.168.1.51:8081/requests/status.xml?command=pl_stop")
</action>
</actionlist>
</rule>

Dans ce code c'est la partie if-true qui ne fonctionne pas !
Pour info, un écouteur vlc est présent sur le 192.168.1.51 port 8081
Si j'exécute cette requête dans un navigateur, cela marche! Si
j'exécute cette requête via lua, cela marche :
bash > lua

> http = require("socket.http")
> c =
http.request("http://192.168.1.51:8081/requests/status.xml?command=in_play&i
nput=ht...")

Par contre via linknx, rien a faire !!!!!!!!!! alors que la condition
on-false est bien exécutée !!!!!!!!

Je vois aussi dans la trace que les deux conditions sont bien
exécutes :

1299018330 INFO Object : New value on for object audio_sdb (type:
1.001)
1299018330 INFO SwitchingObject : SwitchingObject (id=audio_sdb):
Compare value_m='1' to value='1'
1299018330 INFO Condition : ObjectCondition (id='audio_sdb') evaluated
as '1'
1299018330 INFO Action : Execute LuaScriptAction
Write from 1.1.13 to 1/1/5: 00
1299018332 INFO Object : New value off for object audio_sdb (type:
1.001)
1299018332 INFO SwitchingObject : SwitchingObject (id=audio_sdb):
Compare value_m='0' to value='1'
1299018332 INFO Condition : ObjectCondition (id='audio_sdb') evaluated
as '0'
1299018332 INFO Action : Execute LuaScriptAction
Write from 1.1.40 to 1/1/8: 00

Une bonne âme qui connait lua serait le bienvenu !!!!

Cordialement,
Yannick

Casi

Faut avouer que lua est super... quand on sait s'en servir Smile

Même avec un ; a chaque fin de ligne ça ne fonctionne pas mieux....

Casi

j'ai fait un petit programme qui écoute ce que linknx envoi via le
script lua, voici le résultat :

GET /requests/status.xml?command=volumeval=10 HTTP/1.1
host: 192.168.1.21
te: trailers
connection: close, TE
user-agent: LuaSocket 2.0.2

Maintenant voici ce que renvois le même script mais lancé manuellement
par lua dans un terminal :

GET /requests/status.xml?command=volume&val=10 HTTP/1.1
host: 192.168.1.21
te: trailers
connection: close, TE
user-agent: LuaSocket 2.0.2


La différence est de taille !!!!!!!! en effet, linknx tronque le
caractère "&" trés important dans une URL.

Maintenant si quelqu'un sait comment empêcher ce "tronquage" je
prends !!!

On 2 mar, 00:19, Casi <yann...@magikdo.com> wrote:
> Faut avouer que lua est super... quand on sait s'en servir Smile
>
> Même avec un ; a chaque fin de ligne ça ne fonctionne pas mieux....

Cyrille Demaret

Tu pourrais essayer avec un <![CDATA[. Donc par exemple:

<action type="script">
<![CDATA[
http = require("socket.http")
c =
http.request("http://192.168.1.51:8081/requests/status.xml?command=in_play&i
nput=http://xxx/mfm.php")
]]>
</action>

Cyrille

-----Message d'origine-----
De : domotique-eib@googlegroups.com [mailto:domotique-eib@googlegroups.com]
De la part de Casi
Envoyé : mercredi 2 mars 2011 00:37
À : domotique-EIB
Objet : Re: Socket lua... tu va me rendre fou !!

j'ai fait un petit programme qui écoute ce que linknx envoi via le script
lua, voici le résultat :

GET /requests/status.xml?command=volumeval=10 HTTP/1.1
host: 192.168.1.21
te: trailers
connection: close, TE
user-agent: LuaSocket 2.0.2

Maintenant voici ce que renvois le même script mais lancé manuellement par
lua dans un terminal :

GET /requests/status.xml?command=volume&val=10 HTTP/1.1
host: 192.168.1.21
te: trailers
connection: close, TE
user-agent: LuaSocket 2.0.2


La différence est de taille !!!!!!!! en effet, linknx tronque le caractère
"&" trés important dans une URL.

Maintenant si quelqu'un sait comment empêcher ce "tronquage" je prends !!!

On 2 mar, 00:19, Casi <yann...@magikdo.com> wrote:
> Faut avouer que lua est super... quand on sait s'en servir Smile
>
> Même avec un ; a chaque fin de ligne ça ne fonctionne pas mieux....

fred

http.request("http://192.168.1.51:8081/requests/status.xml?
command=in_play" .. string.char(38) .. "val=10"

Je suppose que linknx "requires" le module string.

fred

> il manque pas 1 ";"  a chaque fin de ligne ?

Non. Cf manuel de référence: "Each statement can be optionally
followed by a semicolon".

(http://www.lua.org/manual/5.1/manual.html)

Homodomoticus@gmail.com

Bonjour,

Je suis encore totalement novice avec lua. Si c'est du xml, est-ce qu'il ne faut pas "encoder" le "&" en "&amp;" ?

Cad :

> http.request("http://192.168.1.51:8081/requests/status.xml?command=in_play&amp;i
> nput=http://xxx/mfm.php")

Homodomoticus

Le 2 mars 2011 à 01:49, "Cyrille Demaret" <ziki@omail.be> a écrit :

> Tu pourrais essayer avec un <![CDATA[. Donc par exemple:
>
> <action type="script">
> <![CDATA[
> http = require("socket.http")
> c =
> http.request("http://192.168.1.51:8081/requests/status.xml?command=in_play&i
> nput=http://xxx/mfm.php")
> ]]>
> </action>
>
> Cyrille
>
> -----Message d'origine-----
> De : domotique-eib@googlegroups.com [mailto:domotique-eib@googlegroups.com]
> De la part de Casi
> Envoyé : mercredi 2 mars 2011 00:37
> À : domotique-EIB
> Objet : Re: Socket lua... tu va me rendre fou !!
>
> j'ai fait un petit programme qui écoute ce que linknx envoi via le script
> lua, voici le résultat :
>
> GET /requests/status.xml?command=volumeval=10 HTTP/1.1
> host: 192.168.1.21
> te: trailers
> connection: close, TE
> user-agent: LuaSocket 2.0.2
>
> Maintenant voici ce que renvois le même script mais lancé manuellement par
> lua dans un terminal :
>
> GET /requests/status.xml?command=volume&val=10 HTTP/1.1
> host: 192.168.1.21
> te: trailers
> connection: close, TE
> user-agent: LuaSocket 2.0.2
>
>
> La différence est de taille !!!!!!!! en effet, linknx tronque le caractère
> "&" trés important dans une URL.
>
> Maintenant si quelqu'un sait comment empêcher ce "tronquage" je prends !!!
>
> On 2 mar, 00:19, Casi <yann...@magikdo.com> wrote:
>> Faut avouer que lua est super... quand on sait s'en servir Smile
>>
>> Même avec un ; a chaque fin de ligne ça ne fonctionne pas mieux....
>
>

Jupin Yannick

Bien vu, en effet ça marche très bien en encodant le &

Superbe ! Merci

Le 2 mars 2011 à 08:11, "Homodomoticus@gmail.com" <homodomoticus@gmail.com> a écrit :

> Bonjour,
>
> Je suis encore totalement novice avec lua. Si c'est du xml, est-ce qu'il ne faut pas "encoder" le "&" en "&amp;" ?
>
> Cad :
>
>> http.request("http://192.168.1.51:8081/requests/status.xml?command=in_play&amp;i
>> nput=http://xxx/mfm.php")
>
> Homodomoticus
>
> Le 2 mars 2011 à 01:49, "Cyrille Demaret" <ziki@omail.be> a écrit :
>
>> Tu pourrais essayer avec un <![CDATA[. Donc par exemple:
>>
>> <action type="script">
>> <![CDATA[
>> http = require("socket.http")
>> c =
>> http.request("http://192.168.1.51:8081/requests/status.xml?command=in_play&i
>> nput=http://xxx/mfm.php")
>> ]]>
>> </action>
>>
>> Cyrille
>>
>> -----Message d'origine-----
>> De : domotique-eib@googlegroups.com [mailto:domotique-eib@googlegroups.com]
>> De la part de Casi
>> Envoyé : mercredi 2 mars 2011 00:37
>> À : domotique-EIB
>> Objet : Re: Socket lua... tu va me rendre fou !!
>>
>> j'ai fait un petit programme qui écoute ce que linknx envoi via le script
>> lua, voici le résultat :
>>
>> GET /requests/status.xml?command=volumeval=10 HTTP/1.1
>> host: 192.168.1.21
>> te: trailers
>> connection: close, TE
>> user-agent: LuaSocket 2.0.2
>>
>> Maintenant voici ce que renvois le même script mais lancé manuellement par
>> lua dans un terminal :
>>
>> GET /requests/status.xml?command=volume&val=10 HTTP/1.1
>> host: 192.168.1.21
>> te: trailers
>> connection: close, TE
>> user-agent: LuaSocket 2.0.2
>>
>>
>> La différence est de taille !!!!!!!! en effet, linknx tronque le caractère
>> "&" trés important dans une URL.
>>
>> Maintenant si quelqu'un sait comment empêcher ce "tronquage" je prends !!!
>>
>> On 2 mar, 00:19, Casi <yann...@magikdo.com> wrote:
>>> Faut avouer que lua est super... quand on sait s'en servir Smile
>>>
>>> Même avec un ; a chaque fin de ligne ça ne fonctionne pas mieux....
>>
>>