Requête GET HTTP via script LUA

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
BenjaminV
Messages : 21
Inscription : 24 févr. 2015, 22:08

Re: Requête GET HTTP via script LUA

Message par BenjaminV »

patrice a écrit :Parfait !

Pour Lua , je passe ...

Aaahh dommage ! J'avais justement un autre problème mais avec LUA cette fois-ci... Dans le log de Domoticz, j'ai une erreur comme quoi le script s'exécute depuis plus de 10 secondes ... Ce qui n'est cependant pas le cas il me semble.

Pour faciliter la tâche de Domoticz j'imagine que je devrais réaliser un script bash réalisant les relevés et les envoyants à Domoticz à intrervalle régulier (de manière identique à un script time mais en bash) via JSON mais là ça commence à devenir tordu il me semble...

Une idée pour résoudre cette erreur ? Eviter de faire des appels de scripts bash à partir de LUA et tout réaliser en Bash ?

EDIT : Ce délais de 10 secondes n'est absolument pas logique. J'ai même testé un script LUA tout bête ne faisant que :

Code : Tout sélectionner

os.execute('sudo /home/pi/domoticz/scripts/squeeze.sh "192.168.1.71 mixer volume ?" 192.168.1.80 9090 6 Squeezebox_Pi_Chambre')
en pensant qu'il s'agissait de boucles trop longues au gout du raspberry mais pas du tout. Même cette simple commande parait trop longue pour lui alors qu'en ssh, la réponse est instantanée. Encore un élément sur lequel je bloque :(
hobbe
Messages : 111
Inscription : 15 déc. 2014, 15:33

Re: Requête GET HTTP via script LUA

Message par hobbe »

BenjaminV a écrit :Une idée pour résoudre cette erreur ? Eviter de faire des appels de scripts bash à partir de LUA et tout réaliser en Bash ?

EDIT : Ce délais de 10 secondes n'est absolument pas logique. J'ai même testé un script LUA tout bête ne faisant que :

Code : Tout sélectionner

os.execute('sudo /home/pi/domoticz/scripts/squeeze.sh "192.168.1.71 mixer volume ?" 192.168.1.80 9090 6 Squeezebox_Pi_Chambre')
en pensant qu'il s'agissait de boucles trop longues au gout du raspberry mais pas du tout. Même cette simple commande parait trop longue pour lui alors qu'en ssh, la réponse est instantanée. Encore un élément sur lequel je bloque :(
Ce n'est pas une erreur, mais plus une sécurité de Domoticz qui évite les scripts trop demandeurs de ressources.

Ajoute un print au début du script, et un autre en fin de script.

Code : Tout sélectionner

print('=== point d'entree ===)
Dans les logs, tu verras la date pour chaque print, t'indiquant si ton script dépasse les 10s.

Copie ton script ici si tu souhaites que l'on jette un oeil.

Bon courage !
BenjaminV
Messages : 21
Inscription : 24 févr. 2015, 22:08

Re: Requête GET HTTP via script LUA

Message par BenjaminV »

Bonjour Hobbe,

Le script est des plus simpliste comme expliqué car je ne comprenais pas pourquoi en ssh le tout se déroule de manière instantanée et pas via un script LUA.

Voici le script. Simplifié au maximum pour voir s'il fonctionne.

Code : Tout sélectionner

commandArray={}
os.execute('sudo /home/pi/domoticz/scripts/squeeze.sh "192.168.1.71 mixer volume ?" 192.168.1.80 9090 6 Squeezebox_Pi_Chambre')
return commandArray
Le script bash

Code : Tout sélectionner

#!/bin/bash

# $1 is the command to the SB server. Here are some examples :
#       -  192.168.1.71 mixer volume ? = Ask the volume of the reader with IP 192.168.1.71. Address can also be MAC address (if not static)
#       - do the same with player id , player name, player ip , ... see also LMS > Help > Technical Informations > Logitech Command Line Interface
# $2 is the SB server IP address
# $3 is the SB port to communicate with CLI (Normally 9090)
# $4 is the uservariable idx placed in Domoticz
# $5 is the variable name placed in Domoticz. Warning, be carefull with space caracter !

#Netcat connection to the SB server. Return the answer in return_SB
echo -e "$1\nexit\n" | netcat $2 $3 >return_SB

#Take the last part of the answer. Works with volume for the moment.
answer=$(cat return_SB|cut -d' ' -f4)

#Uservariable modification  with JSON requesting
command1="http://192.168.1.60:8080/json.htm?type=command&param=updateuservariable&idx=$4&vname=$5&vtype=0"
command2="&vvalue=$answer"
command="$command1$command2"
echo $command
curl -s $command
et enfin la réponse

Code : Tout sélectionner

2015-03-05 18:18:00.487 LUA: --Point d entree--
2015-03-05 18:18:10.487 Error: Warning: lua script /home/pi/domoticz/scripts/lua/script_time_SBPIChambre.lua has been running for more than 10 seconds
2015-03-05 18:18:10.599 LUA: --Point de sortie---
Je comprend tout à fait l'idée logique de limiter le temps d'exécution à 10 secondes je ne comprends pas pourquoi il y a une telle différence entre un script directement exécuté en SSH ou exécuté par l'intermédiaire d'un script LUA.

Serait-ce l'emplacement de mon script bash ? Il est placé au chemin /pi/domoticz/scripts ... Juste avant les scripts LUA.

Si tu as une idée ... :)
Doume
Messages : 550
Inscription : 28 déc. 2014, 10:27
Localisation : Nord (59)
Contact :

Re: Requête GET HTTP via script LUA

Message par Doume »

J'ai moi aussi constaté que les scripts LUA pouvaient se déclencher avec d'énormes temps de retard sur les événements
Depuis, j'ai opté pour des vrais scripts shell, qui en plus peuvent lancer des process en parallèle
Les LUA sont inter-dépendants entre eux : Il faut attendre la fin du script A pour que B démarre
Un script shell peut lancer une attente en tâche de fond, et rendre la main immédiatement à Domoticz...
Je vois pas comment faire cela en LUA ou Blocky
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Requête GET HTTP via script LUA

Message par patrice »

Bonsoir
J'abonde dans le sens de Doume, je pense qu'on est vraiment plus libre pour les scripts via bash que Lua, de on trouvera plus facilement des exemples en bash que en Lua
Et j'dis pas ça parce que que j'ai la flemme d'apprendre un langage de plus ... :mrgreen:
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Requête GET HTTP via script LUA

Message par vil1driver »

Sauf que bash, quand tu connais pas... C'est horrible.

Lua j'ai lu 20 à 30 fois la doc domoticz, regardé quelques exemples et maintenant je fais pratiquement tout ce dont j'ai besoin de tête, c'est bien plus intuitif je trouve pour qui n'est pas développeur.

Maintenant tout s'apprends, j'en sais quelque chose, et j'avoue que certain scripts lua sont d'une lenteur étonnante ici aussi et pourtant core2duo inside, je vai probablement suivre vos conseil.... Mais ptète pas dès demain :-)

Si tu dis que les exemples sont plus faciles à trouver alors je les trouverai.

Peut on se passer totalement de lua ? Je pense surtout aux script_device..
J'ai vu dans l'un de tes article que tu te sert malgré tout de lua et sa fonction devicechanged pour appeler ton script shell...
J'en ai un qui est pas loin de dépasser les fameuses 10 secondes, je pense très prochainement tenter ton aproche, je vérai bien si la réactivité est meilleur.

Après il me semble que l'api json ne permet pa tout ce que lua propose... On FOR / AFTER ?
Après réflection, un sleep() et hop...mais ça me gène de mettre un script en pause pour plusieurs minutes..
Dernière modification par vil1driver le 06 mars 2015, 11:08, modifié 11 fois.
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
BenjaminV
Messages : 21
Inscription : 24 févr. 2015, 22:08

Re: Requête GET HTTP via script LUA

Message par BenjaminV »

vil1driver a écrit :Sauf que bash, quand tu connais pas... C'est horrible.

Lua j'ai lu 20 à 30 fois la doc domoticz, regardé quelques exemples et maintenant je fais pratiquement tout ce dont j'ai besoin de tête, c'est bien plus intuitif je trouve pour qui n'est pas développeur.

Maintenant tout s'apprends, j'en sais quelque chose, et j'avoue que certain scripts lua sont d'une lenteur étonnante ici aussi, je vai probablement suivre vos conseil.... Mais ptète pas dès demain :-)
Tout à fait d'accord concernant bash... Un bon tuto à conseiller ? Parce que ce que je trouve ne donne pas forcément envie.

Par contre je précise malgré tout pour les personnes pouvant lire que tous mes besoins ont été comblés par de simples scripts LUA. LUA convient très bien pour des scripts ne faisant pas intervenir des fonctions type os.execute (autre que ping) et encore heureux car LUA est tout de même nettement plus intuitif que bash
Doume
Messages : 550
Inscription : 28 déc. 2014, 10:27
Localisation : Nord (59)
Contact :

Re: Requête GET HTTP via script LUA

Message par Doume »

C'est vrai qu'ayant pas mal d'expérience en shell, ça me semble naturel d'opter pour ce language ( 25 ans de pratique !)
Ceci dit, LUA ne me pose pas de problèmes.

Mais c'est plus pour la liberté fonctionnelle offerte par l'usage du shell

Des tutos sur le shell, il y en a des tonnes, sur le Web : ainsi que d'excellents livres en librairie !

@BenjaminV :
c'est le temps de réponse de la squeezebox, qui fait que ta commande requiert plus de 10 secondes
a ta place, je lancerais la commande os.execute en lui ajoutant un '&' à la fin, dans la mesure ou tu n'attends pas des résultats du script dans ton LUA

Ainsi, le script sera lancé en background, et le contrôle rendu à LUA immédiatement ( < 10 secondes)
Dans ton cas, le LUA attend que ton script shell se termine, ce qui peut être long si ton serveur Squeezebox ne répond pas rapidement
BenjaminV
Messages : 21
Inscription : 24 févr. 2015, 22:08

Re: Requête GET HTTP via script LUA

Message par BenjaminV »

Doume a écrit :C'est vrai qu'ayant pas mal d'expérience en shell, ça me semble naturel d'opter pour ce language ( 25 ans de pratique !)
Ceci dit, LUA ne me pose pas de problèmes.

Mais c'est plus pour la liberté fonctionnelle offerte par l'usage du shell

Des tutos sur le shell, il y en a des tonnes, sur le Web : ainsi que d'excellents livres en librairie !

@BenjaminV :
c'est le temps de réponse de la squeezebox, qui fait que ta commande requiert plus de 10 secondes
a ta place, je lancerais la commande os.execute en lui ajoutant un '&' à la fin, dans la mesure ou tu n'attends pas des résultats du script dans ton LUA

Ainsi, le script sera lancé en background, et le contrôle rendu à LUA immédiatement ( < 10 secondes)
Dans ton cas, le LUA attend que ton script shell se termine, ce qui peut être long si ton serveur Squeezebox ne répond pas rapidement
Aah une solution à mon problème génial ! Je sais que beaucoup de tuto sont présents sur le net mais des tutos sympas ... Pas forcément ;)

Enfin je vais quand même essayer d'apprendre le bash :)

Mon problème est donc résolu, merci à tous ! Je mettrai les scripts complets lorsque j'aurai terminé
Répondre