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

Requête GET HTTP via script LUA

Message par BenjaminV »

Bonjour à tous,

Je suis actuellement en train de réaliser des boutons virtuels afin de contrôler plusieurs Squeezebox (Squeezelite sur rPi). Jusqu'à maintenant pas de soucis pour contrôler le volume, réaliser un ping sur chaque Squeezebox, relancer la lecture, ... Cependant, mes requêtes sont lancées dans le vide du fait que je ne trouve pas comment réaliser une requête get dans un script en LUA. J'ai bien tenté de réaliser un get via os.execute, tel que réalisé avec la commande ping mais évidemment ça ne fonctionne pas.

J'ai bien trouvé quelques solutions sur internet via un script en Python mais je trouve l'idée d'un Script LUA vraiment sympa et facile à implanter (un simple copier-coller via ftp et hop on peut voir directement si notre script est fonctionnel). D'autant plus qu'à terme, je souhaiterais contrôler des modules IPX800 avec domoticz et des requêtes get (afin de connaître l'état des contacteurs) s'avèreraient réellement utiles.

Si quelqu'un a une idée, je le remercie d'avance :)

Bonne soirée.
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Requête GET HTTP via script LUA

Message par patrice »

Bonsoir
Utilise curl dans la commande avec la syntaxe curl qui va bien pour ton besoin

Un exemple d’identification et PUT en lua

print ("Turning off " .. DomDevice);
runcommand = "curl -H \"Authorization: Bearer " .. (apikey) .. "\" -XPUT https://api.lifx.com:443/v1beta1/lights/label: .. (lifxlabel) .. "/power.json?state=off";
os.execute(runcommand);
return commandArray
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 »

patrice a écrit :Bonsoir
Utilise curl dans la commande avec la syntaxe curl qui va bien pour ton besoin

Un exemple d’identification et PUT en lua

print ("Turning off " .. DomDevice);
runcommand = "curl -H \"Authorization: Bearer " .. (apikey) .. "\" -XPUT https://api.lifx.com:443/v1beta1/lights/label: .. (lifxlabel) .. "/power.json?state=off";
os.execute(runcommand);
return commandArray

Merci pour cette réponse Patrice,

Serait-il possible de détailler davantage la commande citée ? Je souhaiterais par exemple chercher le volume au niveau de mon serveur LMS. La commande serait donc du style :

os.execute('curl "http://192.168.1.xx:9002/status.html?p0=mixer&p1=volume"')

Ce que je viens d'écrire correspond à l'envoi d'une requête http au serveur pour régler le volume mais je ne vois pas comment intégrer une requête GET pour aller rechercher le volume. Je me suis basé d'après le tutoriel suivant :http://tutoriels.domotique-store.fr/con ... -http.html.
hobbe
Messages : 111
Inscription : 15 déc. 2014, 15:33

Re: Requête GET HTTP via script LUA

Message par hobbe »

La méthode facile, c'est d'ajouter une commande dans le tableau de retour.

Code : Tout sélectionner

commandArray['OpenURL'] = 'http://server/api'
Mais c'est dans le cas où tu ne t'intéresses pas à la valeur de retour.
De plus, on ne peut en mettre qu'un dans le script.
Voir la discussion Script Blocky avec temporisation.
hobbe
Messages : 111
Inscription : 15 déc. 2014, 15:33

Re: Requête GET HTTP via script LUA

Message par hobbe »

Une autre méthode, c'est d'utiliser curl ou wget dans un os.execute(), comme le souligne patrice.

Dans la discussion Récupéré les vacance scolaire, je donne un exemple ou on fait un GET et on lit le résultat par une méthode os.capture().

Code : Tout sélectionner

local cmd = curl .. " http://api.domogeek.fr/schoolholiday/" .. zone .. "/now"
local vac = os.capture(cmd, true)

Code : Tout sélectionner

-- Function to get result of HTTP request
function os.capture(cmd, raw)
  local f = assert(io.popen(cmd, 'r'))
  local s = assert(f:read('*a'))
  f:close()
  if raw then return s end
  s = string.gsub(s, '^%s+', '')
  s = string.gsub(s, '%s+$', '')
  s = string.gsub(s, '[\n\r]+', ' ')
  return s
end
Source : Stack Overflow

Bon courage !
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Requête GET HTTP via script LUA

Message par vil1driver »

Salut,

Pour complèter, est ce que ceci ne t'aiderait pas ?
viewtopic.php?f=10&t=301
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 »

Bonjour à tous,

Merci pour vos réponses et pour les différentes manières d'arriver au résultat recherché. Je n'avais pas trouvé la réponse à ma question mais probablement que mes mots clés n'étaient pas les plus adaptés (requête get http,..)

Je teste ça ce soir et je vous tiens au courant ! :)
BenjaminV
Messages : 21
Inscription : 24 févr. 2015, 22:08

Re: Requête GET HTTP via script LUA

Message par BenjaminV »

Génial, avec un mélange des différentes réponses, j'arrive à rendre le script fonctionnel. Cependant, je n'arrive pas à récupérer ce que je souhaite...

En gros pour avoir le status de LMS, la commande est http://ip_lms:9002/status.html. Cependant il m'envoie évidemment une grosse partie des composants de la page html.

Pour régler le volume, la commande est du type http://ip_lms:9002/status.html?p0=mixer&p1=volume&p2=valeur_du_volume... Cependant je ne vois pas comment m'y prendre pour ne pas envoyer une commande mais plutôt récupérer la valeur du volume. J'ai essayé de laisser la valeur du volume vide mais ça ne fonctionne pas...

Des idées ?
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Requête GET HTTP via script LUA

Message par patrice »

Bonsoir Benjamin

Déjà il faudrait savoir ce que te renvoie ton ampli exactement (du xml, json, texte simple...) lorsque tu l'interroge via la requete htp, puis modifier ton script pour qu'il aille chercher la valeur du volume.
As tu regardé sur le net si il n'y a pas des scripts identiques à ce que tu cherches

Si tu as un exemple de retour de ton ampli à montrer ici , faiz' y voir
A plus
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 »

patrice a écrit :Bonsoir Benjamin

Déjà il faudrait savoir ce que te renvoie ton ampli exactement (du xml, json, texte simple...) lorsque tu l'interroge via la requete htp, puis modifier ton script pour qu'il aille chercher la valeur du volume.
As tu regardé sur le net si il n'y a pas des scripts identiques à ce que tu cherches

Si tu as un exemple de retour de ton ampli à montrer ici , faiz' y voir
A plus
Bonsoir Patrice,

La seule "réponse" que j'ai trouvé est sur la commande du serveur et non sur les requêtes à lui adresser. Voici ou j'ai trouvé une partie de mes réponses

http://tutoriels.domotique-store.fr/con ... -http.html

Et entre autre le passage,

GET /status.html?p0=pause&p1=1 HTTP/1.0

Je n'ai pas trouvé d'autres éléments de réponse. Si je trouve, j'en ferai part mais je suppose que cette requête GET n'est pas suffisante...

J'ai également tenté les différentes formes d'adressage mais les seules informations que j'obtiens sont : l'état du lecteur (allumé ou éteint) et ce que le lecteur joue. Ça ne fait pas mon affaire évidemment
Répondre