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 :
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 :
En revanche, si j'ai bien compris, je pense que la 3e ligne doit se transformer en :
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¶m=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
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