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 <\>.
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Requête GET HTTP via script LUA

Message par patrice »

Bonsoir
Donne nous la réponse intégrale de ton serveur ici
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
BenjaminV
Messages : 21
Inscription : 24 févr. 2015, 22:08

Re: Requête GET HTTP via script LUA

Message 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 ...
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Requête GET HTTP via script LUA

Message 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..
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 :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 :(
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Requête GET HTTP via script LUA

Message par vil1driver »

ahhh j'avais mal lu, désolé :/
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 »

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.
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Requête GET HTTP via script LUA

Message 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
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
BenjaminV
Messages : 21
Inscription : 24 févr. 2015, 22:08

Re: Requête GET HTTP via script LUA

Message 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...
BenjaminV
Messages : 21
Inscription : 24 févr. 2015, 22:08

Re: Requête GET HTTP via script LUA

Message 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
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Requête GET HTTP via script LUA

Message par patrice »

Parfait !

Pour Lua , je passe ...
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
Répondre