Page 2 sur 3

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

Publié : 18 mars 2015, 08:51
par patrice
Bonjour

Je n'ai pas compris si tu parle des variables bash ou des variables Domoticz alors je réponds pour les 2

les variables utilisateur Domoticz sont appelables/creables/modifiables via l'api JSON regardes ici
http://www.domoticz.com/wiki/Domoticz_A ... _variables

Les variables du shell bash sont utilisables comme suit :
#!/bin/bash
tempo=$(curl -s "http://api.domogeek.fr/tempoedf/now")
echo $tempo

if [ $tempo = "bleu" ]
then


quant à la decoupe d'une chaine en shell il y a ca qui y reponds avec la commande shell cut
viewtopic.php?f=10&t=317&p=2390&hilit=cut#p2390

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

Publié : 05 juin 2015, 10:44
par Nicogluck
Salut !

Je patauge dans la semoule... :(
Je reviens sur ce topic car j'ai le Warning suivant :

Code : Tout sélectionner

Error: Warning: lua script /usr/local/domoticz/scripts/lua/script_device_memorelais.lua has been running for more than 10 seconds
Je voudrais donc réécrire mon script LUA en Shell, notamment ces lignes (avec la fonction os.capture définie en entête de script, bien entendu):

Code : Tout sélectionner

local cmd = '/usr/bin/curl http://192.168.1.110/30000/99'
local relais1 = os.capture(cmd , true);

relais1 = string.sub(relais1,112,127)

commandArray['Variable:Carte_relais_1'] = tostring(relais1)
Je remplacerais bien les 2 premières lignes par la commande wget, mais il manque sûrement quelque chose à ça :

Code : Tout sélectionner

relais1 = wget 'http://192.168.1.110/30000/99'
En revanche, si j'ai bien compris, je pense que la 3e ligne doit se transformer en :

Code : Tout sélectionner

relais1 = cut relais1|-c112-127
Quant à la dernière ligne, ça doit ressembler à quelque chose comme ça, mais je pense qu'il manque quelque chose pour l'exécuter... wget ?

Code : Tout sélectionner

http://192.168.1.100:8084/json.htm?type=command&param=saveuservariable&vname=Carte_relais_1&vtype=2&vvalue=relais1
Merci d'avance à tous pour les correctifs.

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

Publié : 05 juin 2015, 10:49
par vil1driver
Fais voir ton script lua entier...

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

Publié : 05 juin 2015, 11:46
par Nicogluck

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 = {}

if (devicechanged['Sauvegarde relais'] == 'On')
then
	local curl = '/usr/bin/curl'
	local cmd = curl .. ' http://192.168.1.110/30000/99'
	local relais1 = os.capture(cmd , true);
	relais1 = string.sub(relais1,112,127)
	local cmd = curl .. ' http://192.168.1.111/30000/99'
	local relais2 = os.capture(cmd , true);
	relais2 = string.sub(relais2,112,127)
	commandArray['Variable:Carte_relais_1'] = tostring(relais1)
	commandArray['Variable:Carte_relais_2'] = tostring(relais2)
end
return commandArray

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

Publié : 05 juin 2015, 11:57
par vil1driver
essai ceci

Code : Tout sélectionner

function os.capture(cmd)
  local f = assert(io.popen(cmd, 'r'))
  local s = assert(f:read('*a'))
  f:close()
  s = string.sub(s,112,127)
  return s
end

commandArray = {}

if (devicechanged['Sauvegarde relais'] == 'On')
then
   local curl = '/usr/bin/curl -m 4'
   local cmd1 = curl .. ' http://192.168.1.110/30000/99'
   local cmd2 = curl .. ' http://192.168.1.111/30000/99'
   
   local relais1 = os.capture(cmd1);
   local relais2 = os.capture(cmd2);
   
   commandArray[1]={['Variable:Carte_relais_1'] = relais1}
   commandArray[2]={['Variable:Carte_relais_2'] = relais2}
   
end
return commandArray

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

Publié : 05 juin 2015, 12:38
par Nicogluck
Désolé, j'ai dû mal m'exprimer. ;)

Mon script LUA tel qu'il il est ci-dessus fonctionne parfaitement bien.
Mais je souhaite écrire un script en Shell qui fait le même travail, et ainsi me débarrasser de ce script LUA.

J'ai trop peu de notions, je connais encore mal les commandes et fonctions en Shell.

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

Publié : 05 juin 2015, 12:40
par vil1driver
il me semblait comprendre que ce souhait venait de l'erreur que tu avais,
sans cette erreur qu'est-ce qui te pousse à vouloir le refaire en shell ?

sinon curl fonctionne aussi en shell

idem, je ne peux pas vraiment t'aider pour le shell
pour moi si c'est faisable en lua je reste avec lua

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

Publié : 05 juin 2015, 16:42
par Nicogluck
Vil1driver, j'ai testé ton script, plus dépouillé que le mien. Effectivement, le Warning n'apparaît plus.
Merci beaucoup, je n'aurais pas trouvé.

D'une manière générale, il me semble (peut-être à tort) que les scripts Shell surchargent moins le système que les LUA, mais je me trompe peut-être.

Pour finir avec ce sujet, j'ai besoin d'un script pour repositionner mes relais après un arrêt du système.
Il doit être écrit en Shell car il faut qu'il soit chargé au démarrage de Domoticz (cette fois, pas possible autrement), et doit exécuter les actions suivantes :
  • 1) Récupérer la variable Domoticz contenant l'état des relais (chaîne de 16 chiffres, 0 ou 1),
    2) Envoyer la requête HTTP de chaque relais qui est sensé être à 1 et non 0.
Comme dit précédemment, je connais mal les commandes Shell. J'ai seulement pu trouver des idées de lignes à insérer (cf. mon précédent message).
Si quelqu'un m'entend, qu'il vienne à mon aide ! :)

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

Publié : 05 juin 2015, 17:47
par vil1driver
Peut être ceci ?

viewtopic.php?f=17&t=456

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

Publié : 06 juin 2015, 16:23
par patrice
Bonjour
si j'avais à le faire en bash je commencerai par qq chose comme çela

Code : Tout sélectionner

!/bin/bash
curl  -s -o chaine.txt http://lesiteoutuvacherchertesinfosr/lapageenquestion.html
chaine=$(cat chaine.txt)

# la variable chaine contient la suite de 01;
# la preuve
echo  $chaine

#si on doit extraire des caracteres a certaines positions
#extraction dans chaine :position:longeur 
#numerotation a pertir de 0 dans la chaine
a=${chaine:0:2}
b=${chaine:2:2}
c=${chaine:4:2}

echo $a
echo $b 
echo $c

#supprimer le fichier
rm chaine.txt

bien sur il faudra y placer dedans les actions que tu veux faire vers ton domoticz en appelant l'API Json mais il y a plein d'exemples qui trainent ici et ailleurs

Bon jeu