Page 3 sur 4

Re: Requête GET HTTP via script LUA

Publié : 01 mars 2015, 18:43
par patrice
Bonsoir
Donne nous la réponse intégrale de ton serveur ici

Re: Requête GET HTTP via script LUA

Publié : 01 mars 2015, 19:45
par BenjaminV
La voici,

Code : Tout sélectionner

b8%3A27%3Aeb%3A73%3A5e%3A40 mixer volume 30
30 représente le volume et varie de 0 à 100...

Et le script simple

Code : Tout sélectionner

#!/bin/bash
echo -e "$1\nexit\n" | netcat $2 $3
Avec comme appel de fonction et les 3 arguments

Code : Tout sélectionner

./squeeze.sh "mixer volume ?" 192.168.1.80 9090
Faire l'appel d'un script bash à partir d'un script LUA ne devrait pas poser de problème. Mon problème est donc
-Récupérer la valeur affichée via "echo"
-Décomposer cette réponse pour en extraire le volume
-Renvoyer cette valeur dans une variable interne à Domoticz que je puisse exploiter via des scripts en LUA

Je me suis attaqué à quelque chose de bien plus complexe que je ne pensais ...

Re: Requête GET HTTP via script LUA

Publié : 01 mars 2015, 20:53
par vil1driver
je pense que ceci doit faire le job:

Code : Tout sélectionner

commandArray = {}

  -- Path to curl
local curl = '/usr/bin/curl'
 -- url à joindre
local url = 'http://..............'

local retour = os.capture(curl url, true);
local volume = tonumber(string.sub(retour, 41, 44))

print(volume)

return commandArray
il y surement plus propre, mais ça doit fonctionner comme ceci, pas besoin de script bash à mon avis..

Re: Requête GET HTTP via script LUA

Publié : 01 mars 2015, 23:49
par BenjaminV
vil1driver a écrit :je pense que ceci doit faire le job:

Code : Tout sélectionner

commandArray = {}

  -- Path to curl
local curl = '/usr/bin/curl'
 -- url à joindre
local url = 'http://..............'

local retour = os.capture(curl url, true);
local volume = tonumber(string.sub(retour, 41, 44))

print(volume)

return commandArray
il y surement plus propre, mais ça doit fonctionner comme ceci, pas besoin de script bash à mon avis..
Bonsoir,

Malheureusement, je dois réaliser une requête via telnet ou netcat pour avoir la réponse du serveur... Il ne me semble pas qu'il soit possible de le faire via une url. Seules les commandes fonctionnent via url et non les requêtes :(

Re: Requête GET HTTP via script LUA

Publié : 02 mars 2015, 09:43
par vil1driver
ahhh j'avais mal lu, désolé :/

Re: Requête GET HTTP via script LUA

Publié : 03 mars 2015, 18:35
par BenjaminV
Si quelqu'un a une idée il est le bienvenu :) sinon je laisse tomber et je ne me contente que d'envoyer des commandes sans avoir de retour d'état.

Re: Requête GET HTTP via script LUA

Publié : 03 mars 2015, 22:20
par patrice
Bonsoir

Si on considère ta chaine de caractères renvoyée par ton equipement
b8%3A27%3Aeb%3A73%3A5e%3A40 mixer volume 30
un
cat fic|cut -d' ' -f3
te renvoie le 3eme champ de la chaine soit "volume"
et donc
cat fic|cut -d' ' -f4
affiche le 4eme champ soit
...
...
...
"30"

C'est gagné
Je modifierai donc le squueeze.sh pour qu'il envoie tout ça dans un fichier avec un #!/bin/bash
echo -e "$1\nexit\n" | netcat $2 $3 >fichiersortie

et puis un script qui contiendrait

#!/bin/bash
monvolume=$(cat fichiersortie|cut -d' ' -f4)
echo $monvolume

te donne une variable bash $monvolume que tu peux reutiliser pour alimenter la variable utilisateur Domoticz via l'API JSON
ici
http://www.domoticz.com/wiki/Domoticz_A ... _variables


Bien sur tu peux tout mettre dans ton fichier squeeze.sh

My 2 cts

Re: Requête GET HTTP via script LUA

Publié : 04 mars 2015, 18:30
par BenjaminV
Génial merci Patrice effectivement ça fonctionne !

Le piège par contre lors du renvoi de variable au niveau de Domoticz sont les espaces. A éviter donc !

Je vais créer un script "propre" et je le posterai. Je pense que ça peut intéresser certaines personnes.

Par contre connais tu un bon tutoriel, didactique et convivial permettant de s'initier au bash sur Pi ? Tout ce que je trouve jusqu'à maintenant n'est pas des plus motivant...

Re: Requête GET HTTP via script LUA

Publié : 04 mars 2015, 18:49
par BenjaminV
Voici le script permettant de retourner la réponse dans une variable interne à Domitcz

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

Je donnerai également le script LUA permettant de faire appel au script suite à une requête PING

EDIT : Tant que j'y suis, j'ai une question extrêmement simple : Est-il possible de créer des tables à plusieurs colonnes dans un script LUA ? Exemple

Code : Tout sélectionner

local ping={}
ping['192.168.1.70']='Mon Ordinateur'; 'autre_colonne1'; 'autre_colonne2';...
Evidemment ce que j'ai noté n'est pas correct mais je n'ai pas trouvé de réponse à cette question

Re: Requête GET HTTP via script LUA

Publié : 04 mars 2015, 21:12
par patrice
Parfait !

Pour Lua , je passe ...