Premier script probleme
Premier script probleme
Bonsoir a tous,
Voici le premier script qui ne fonctionne pas et que j'ai édité dans la fonction événement.....j'ai besoin de vous!
commandArray = {}
if (devicechanged['ambilight_power'] == 'On')
then
os.execute('curl -X POST -H "Content-Type: application/json" -d '{"power":"Off"}' http://192.168.1.22:1925/1/ambilight/power')
end
return commandArray
merci d'avance
Voici le premier script qui ne fonctionne pas et que j'ai édité dans la fonction événement.....j'ai besoin de vous!
commandArray = {}
if (devicechanged['ambilight_power'] == 'On')
then
os.execute('curl -X POST -H "Content-Type: application/json" -d '{"power":"Off"}' http://192.168.1.22:1925/1/ambilight/power')
end
return commandArray
merci d'avance
Re: Premier script probleme
Pour info l'erreur serait sur la 4 eme ligne
Re: Premier script probleme
Ambitieux
du embedded json dans curl lui-même embedded dans un appel execute lua ...
Décris un peu mieux ton erreur stp pour aider a l'analyse, domoticz affiche quoi ??? mais déjà en lecture "rapide", il me semble que je vois une quote simple dans l'appel os.execute lui-même en quote simple. A priori un escape pour ces quotes simples, essayer \' pour les deux quotes du -d '...' de curl ?
Décris un peu mieux ton erreur stp pour aider a l'analyse, domoticz affiche quoi ??? mais déjà en lecture "rapide", il me semble que je vois une quote simple dans l'appel os.execute lui-même en quote simple. A priori un escape pour ces quotes simples, essayer \' pour les deux quotes du -d '...' de curl ?
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
Re: Premier script probleme
rimram31 a écrit :Ambitieuxdu embedded json dans curl lui-même embedded dans un appel execute lua ...
Décris un peu mieux ton erreur stp pour aider a l'analyse, domoticz affiche quoi ??? mais déjà en lecture "rapide", il me semble que je vois une quote simple dans l'appel os.execute lui-même en quote simple. A priori un escape pour ces quotes simples, essayer \' pour les deux quotes du -d '...' de curl ?
Rimram j' ai pas tout compris a ta réponse,je suis novice. Pour simplifié je veux faire exécuter a domoticz une commande POST avec données via inter virtuel;
http://192.168.1.22:1925/1/ambilight/power
{"power":"Off"}
soit avec un script ou autre ,et par la suite établir d'autres commandes du même type.
merci de ton aide
Re: Premier script probleme
En gros, Rimram31 te dit de mettre ça :
Code : Tout sélectionner
os.execute('curl -X POST -H "Content-Type: application/json" -d \'{"power":"Off"}\' http://192.168.1.22:1925/1/ambilight/power')
Re: Premier script probleme
Yep
Comme dans d'autres langages, en LUA il faut "escaper" un caractère du genre simple quote ' ou double quote " si tu veux la mettre dans la chaine elle-même alors que ce caractère est justement celui utilisé pour délimiter la chaine au sens du langage. http://www.lua.org/pil/2.4.html Quand tu as des ' tu délimites avec " ou l'inverse, par contre quand tu as les deux tu es un peu coincé d'où la syntaxe possible en précédant de \ D'autres langages demanderont par exemple de doubler la quote. Si tu veux insérer un \, il te faut indiquer \\ (ça peut devenir comique ...)
Quand je disais plus haut que tu étais ambitieux c'est que ça peut être sportif parfois de faire un appel système (pour toi curl) demandant déjà des quotes pour syntaxe, le tout donné en paramètre dans un autre langage qui lui aussi va demander des quotes en séparateur, ca peut faire quote de quote de quote ... sans oublier que simple ou double quote n'ont pas la même signification en shell
Comme dans d'autres langages, en LUA il faut "escaper" un caractère du genre simple quote ' ou double quote " si tu veux la mettre dans la chaine elle-même alors que ce caractère est justement celui utilisé pour délimiter la chaine au sens du langage. http://www.lua.org/pil/2.4.html Quand tu as des ' tu délimites avec " ou l'inverse, par contre quand tu as les deux tu es un peu coincé d'où la syntaxe possible en précédant de \ D'autres langages demanderont par exemple de doubler la quote. Si tu veux insérer un \, il te faut indiquer \\ (ça peut devenir comique ...)
Quand je disais plus haut que tu étais ambitieux c'est que ça peut être sportif parfois de faire un appel système (pour toi curl) demandant déjà des quotes pour syntaxe, le tout donné en paramètre dans un autre langage qui lui aussi va demander des quotes en séparateur, ca peut faire quote de quote de quote ... sans oublier que simple ou double quote n'ont pas la même signification en shell
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
Re: Premier script probleme
Neutrino a écrit :En gros, Rimram31 te dit de mettre ça :Code : Tout sélectionner
os.execute('curl -X POST -H "Content-Type: application/json" -d \'{"power":"Off"}\' http://192.168.1.22:1925/1/ambilight/power')
voici le log que ca me donne
Error: EventSystem: in Ambil On: [string "commandArray = {} ..."]:2: attempt to index global 'devicechanged' (a nil value
j'ai editer comme suit:
commandArray = {}
if (devicechanged['ambilight_power'] == 'On')
then
os.execute('curl -X POST -H "Content-Type: application/json" -d \'{"power":"On"}\' http://192.168.1.22:1925/1/ambilight/power')
end
return commandArray
Re: Premier script probleme
Merci,mais malheureusement je comprend que la moitié...mais ça me fais avancerrimram31 a écrit :Yep![]()
Comme dans d'autres langages, en LUA il faut "escaper" un caractère du genre simple quote ' ou double quote " si tu veux la mettre dans la chaine elle-même alors que ce caractère est justement celui utilisé pour délimiter la chaine au sens du langage. http://www.lua.org/pil/2.4.html Quand tu as des ' tu délimites avec " ou l'inverse, par contre quand tu as les deux tu es un peu coincé d'où la syntaxe possible en précédant de \ D'autres langages demanderont par exemple de doubler la quote. Si tu veux insérer un \, il te faut indiquer \\ (ça peut devenir comique ...)
Quand je disais plus haut que tu étais ambitieux c'est que ça peut être sportif parfois de faire un appel système (pour toi curl) demandant déjà des quotes pour syntaxe, le tout donné en paramètre dans un autre langage qui lui aussi va demander des quotes en séparateur, ca peut faire quote de quote de quote ... sans oublier que simple ou double quote n'ont pas la même signification en shell
Re: Premier script probleme
Utile de préciser le message d'erreur: attempt to index global 'devicechanged' (a nil value ...)
Là, c'est propre a domoticz, si je ne me trompe pas le tableau devicechanged n'existe que pour les scripts dits "device". Il n'est pas créé par domoticz pour les autres types de script LUA d'ou l'erreur quand tu essaies d'y accéder.
Edit: Désolé j'essaierai de mieux vulgariser, l'histoire des caractères c'est que si tu écris x = 'toto'truc' le langage prend le premier ' comme la fin de la chaine s'arrête a 'toto' et ne comprends rien au reste (et le plus souvent se plante en erreur). Si on veut insérer un ' dans une chaine on écrit donc \' Dans ton cas tu appelles os.execute qui attend une chaine en paramètre (la ligne de commande a exécuter), chaine qui contient elle-même des ' , ceux destinés a curl. J'espère avoir été plus clair.
Là, c'est propre a domoticz, si je ne me trompe pas le tableau devicechanged n'existe que pour les scripts dits "device". Il n'est pas créé par domoticz pour les autres types de script LUA d'ou l'erreur quand tu essaies d'y accéder.
Edit: Désolé j'essaierai de mieux vulgariser, l'histoire des caractères c'est que si tu écris x = 'toto'truc' le langage prend le premier ' comme la fin de la chaine s'arrête a 'toto' et ne comprends rien au reste (et le plus souvent se plante en erreur). Si on veut insérer un ' dans une chaine on écrit donc \' Dans ton cas tu appelles os.execute qui attend une chaine en paramètre (la ligne de commande a exécuter), chaine qui contient elle-même des ' , ceux destinés a curl. J'espère avoir été plus clair.
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
Re: Premier script probleme
rimram31 a écrit :Utile de préciser le message d'erreur: attempt to index global 'devicechanged' (a nil value ...)
Là, c'est propre a domoticz, si je ne me trompe pas le tableau devicechanged n'existe que pour les scripts dits "device". Il n'est pas créé par domoticz pour les autres types de script LUA d'ou l'erreur quand tu essaies d'y accéder.
Edit: Désolé j'essaierai de mieux vulgariser, l'histoire des caractères c'est que si tu écris x = 'toto'truc' le langage prend le premier ' comme la fin de la chaine s'arrête a 'toto' et ne comprends rien au reste (et le plus souvent se plante en erreur). Si on veut insérer un ' dans une chaine on écrit donc \' Dans ton cas tu appelles os.execute qui attend une chaine en paramètre (la ligne de commande a exécuter), chaine qui contient elle-même des ' , ceux destinés a curl. J'espère avoir été plus clair.
ok merci ,oui en effet c'est plus clair
As tu une solution pour mon erreur?