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 <\>.
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 »

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
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 »

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.
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 »

Fais voir ton script lua entier...
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 »

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
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 »

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
Dernière modification par vil1driver le 05 juin 2015, 12:47, modifié 1 fois.
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 »

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.
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 »

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
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 »

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 ! :)
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 »

Peut être ceci ?

viewtopic.php?f=17&t=456
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 »

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
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