Mémoriser une suite de chiffres affichés sur une page web simple

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 <\>.
Nicogluck
Messages : 112
Inscription : 24 nov. 2014, 14:54

Mémoriser une suite de chiffres affichés sur une page web simple

Message par Nicogluck »

Bonjour,

Mon installation contient une carte de relais IP que je contrôle via des lignes de commande HTTP.

Une commande particulière me permet de connaître l'état de chaque relais.
En l'occurence, " http://adresse_ip/port/99 " me renvoie une page blanche avec uniquement une suite de 16 chiffres à la suite, correspondant à l'état des 16 relais.
Ex : 0111000010011010

Je souhaite sauvegarder cette suite numérique, dans une variable utilisateur de Domoticz par exemple.

Le but est multiple : notamment avoir un retour sur l'état d'un relais après son activation ou bien sauvegarder l'état de la carte en cas de coupure de courant (dans ce cas, ça nécessiterait un fichier plutôt qu'une simple variable, évidemment).

Je débute en LUA. J'apprends vite mais là, c'est au delà de mes connaissances actuelles.
Merci à vous tous !
Synology DS415play / RFXCom / récepteurs 433 / sondes temp+hygro Oregon / cartes relais Sainsmart
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Mémoriser une suite de chiffres affichés sur une page web simple

Message par vil1driver »

salut,

crée une variable utilisateur nommée 'etat' par exemple
puis essai ceci:

Code : Tout sélectionner

commandArray = {}

  -- Path to curl
local curl = '/usr/bin/curl'

local state = os.capture(curl .. ' http://adresse_ip/port/99', true);

print('etat des relais: ' .. state)

commandArray['Variable:etat'] = tostring(state)

return commandArray
si tu n'as pas curl,

Code : Tout sélectionner

sudo apt-get update
sudo apt-get install libcurl3 curl php5-curl
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
Nicogluck
Messages : 112
Inscription : 24 nov. 2014, 14:54

Re: Mémoriser une suite de chiffres affichés sur une page web simple

Message par Nicogluck »

Merci vil1driver, mais ça ne marche pas.

Pour commencer, il me revoit " attempt to call field 'capture' (a nil value) " concernant la ligne "local state = ..."

En remplaçant os.capture par os.execute, le message d'erreur disparaît, mais ma variable ne contient que " True " et non une suite de 0 et 1.

Je pense qu'on est sur la bonne voie, mais là, je ne vois pas.
L'aide contextuelle de cUrl ne m'aide pas vraiment...
Synology DS415play / RFXCom / récepteurs 433 / sondes temp+hygro Oregon / cartes relais Sainsmart
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Mémoriser une suite de chiffres affichés sur une page web simple

Message par patrice »

Bonsoir
Les 2 fonctions ne font pas le même job

os.capture , capture la chaine de caractère renvoyée par l'appel de la commande système alors que
os.execute lance le programme en question et te renvoie True ou False si ça c'est bien passe ou mal

Il faut donc vraiment que tu garde os.capture

En tant que non expert patenté de Lua et malgré une autre tentative ce soir j'obtiens la même erreur que toi

Attendons que nos amis experts de la chose passent par 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
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Mémoriser une suite de chiffres affichés sur une page web simple

Message par vil1driver »

il faut dire que j'ai vraiment été mauvais sur ce coups :D

je ne t'ai donné qu'une partie du code, pas étonnant que ça ne fonctionnait pas.

voici le code dans son ensemble ce coups ci, testé fonctionnel ici.

Code : Tout sélectionner


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

commandArray = {}

  -- Path to curl
  local curl = '/usr/bin/curl'

  local cmd = curl .. ' http://_________________'
  local state = os.capture(cmd , true);
 

 print('etat des relais: ' .. state)

commandArray['Variable:etat'] = tostring(state)

  


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

Re: Mémoriser une suite de chiffres affichés sur une page web simple

Message par patrice »

Ah ce n'est pas une fonction du langage, alors ça ira mieux comme ça en effet
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
Nicogluck
Messages : 112
Inscription : 24 nov. 2014, 14:54

Re: Mémoriser une suite de chiffres affichés sur une page web simple

Message par Nicogluck »

Alors bon, on avance, mais c'est pas parfait... :?
D'abord, merci à vil1driver, mais j'ai omis un détail non négligeable :
La suite de chiffre que renvoie l'adresse de requete HTTP est également un lien (qui n'a aucune utilité, en passant).

Résultat, lorsque je lance le script, ma variable contient :
" <small><a href="http://192.168.1.110/30000"></a></small><a href="http://192.168.1.110/30000/101000100000 ... 1010</a><p> "

Y a-t-il un moyen de ne récupérer que la suite de chiffre ?
Synology DS415play / RFXCom / récepteurs 433 / sondes temp+hygro Oregon / cartes relais Sainsmart
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Mémoriser une suite de chiffres affichés sur une page web simple

Message par patrice »

Lua à une fonction qui permet de découper une chaine de caractères nommée string.sub

ainsi
string.sub("Hello Lua user", 7) -- from character 7 until the end
affichera
Lua user

infos sur les chaines ici http://www.luteus.biz/Download/LoriotPr ... _chaine_13
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
Nicogluck
Messages : 112
Inscription : 24 nov. 2014, 14:54

Re: Mémoriser une suite de chiffres affichés sur une page web simple

Message par Nicogluck »

Magnifique !!

Il ne me reste qu'à faire une petite routine pour vérifier que lorsque j'envoie une requête pour modifier l'état de certains relais, la carte me renvoie bien le nouvel état des relais concernés. Mais ça, je sais faire maintenant. ;)

Grand merci à vous deux, patrice et vil1driver, pour cette affaire !
Synology DS415play / RFXCom / récepteurs 433 / sondes temp+hygro Oregon / cartes relais Sainsmart
Nicogluck
Messages : 112
Inscription : 24 nov. 2014, 14:54

Re: Mémoriser une suite de chiffres affichés sur une page web simple

Message par Nicogluck »

Euh.... Juste une bricole :
Mes relais sont actionnés via des boutons On/Off qui lancent des scripts en shell.
Le mieux, à mon avis, est d'inclure ma petite routine de vérification dans ces scripts. Mais autant maintenant je me débrouille en LUA pour manipuler des boutons et des variables, autant en shell, ça se complique. :|

Malgré mes recherches, j'ai pas trouvé de lien possible entre une variable utilisateur et un script en shell...
Si vous pouviez encore me filer ce petit coup de main, ce serait cool.

Ensuite, pour trouver l'équivalent du sub.string en shell, je vais trouver, promis ! :P
Synology DS415play / RFXCom / récepteurs 433 / sondes temp+hygro Oregon / cartes relais Sainsmart
Répondre