Page 1 sur 1

recupérer une variable utisateur avec les regles espeasy

Publié : 27 déc. 2019, 22:27
par gibus17
bonsoir
Je suis débutant nul en anglais et je n'ai pas réussi à trouver sur le forum <https://www.letscontrolit.com/forum/> une info que je sache exploiter pour résoudre mon problème, je me tourne vers vous avec l'espoir que vous pourrez m'aider.

J'ai un sonoff dual qui est flashé avec l'espeasy. Lors d'un arret alimentation afin de ne pas perdre une info d'état, je stock celle-ci dans une variable utilisateur de domoticz avec la commande suivante dans les règles d'espeasy :

Code : Tout sélectionner

 SendToHTTP,192.168.1.51,8080,/json.htm?type=command&param=updateuservariable&idx=2&vname=Var_sonof_duo&vtype=2&vvalue=0
pour la récupérer j'exécute la commande suivante dans les règles d'espeasy :

Code : Tout sélectionner

SendToHTTP,192.168.1.51,8080,/json.htm?type=command&param=getuservariable&idx=2
.
la réponse n'est pas exploitable directement car elle contient les infos suivantes

Code : Tout sélectionner

	
result	
0	
LastUpdate	"2019-12-27 21:34:44"
Name	"Var_sonof_duo"
Type	"2"
Value	"20"
idx	"2"
status	"OK"
title	"GetUserVariable"
Pouvez vous me dire comment faire dans les regles espeasy pour extraire le contenu de Value soit dans ce cas "20"

Re: recupérer une variable utisateur avec les regles espeasy

Publié : 01 janv. 2020, 10:08
par adv
Salut Gibus,

j'ai un besoin similaire sauf que personnellement j'ENVOIE la valeur de Domoticz vers ESPeasy, je ne fais pas l'inverse comme tu voudrais.

Cela ne nécessite aucune ligne de code (autre que celle qui permet d'envoyer la donnée).

Je ne sais pas t'aider pour "décapsuler" ta donnée 20 qui se trouve au milieu.

J'ai une autre approche pour toi, mais peut-être que tu vas trouver ça un peu bricolo...

Tu dois pour cela envoyer l'uptime du Sonoff à Domoticz (ça se fait via un device de type Text dans Domoticz, et un device de type Generic - System Info dans EspEasy).
Ensuite tu écris un script de type device en lua, si uptime = 0 (indique qu'il vient de démarrer) tu renvois alors ta donnée 20 dans un device de type dummy de l'espeasy, tu pourras alors l'utiliser dans tes rules...
Voici la commande pour envoyer la donnée (dans ton LUA):

os.execute('curl "192.168.0.15/control?cmd=TaskValueSet,6,1,'..variable..'"')

L'ip est à adapter, ainsi que le 6 et le 1 et variable.
6 correspond au numéro de Task de ton device Dummy dans ESPeasy
1 correspond à la première donnée (il peut y en voir 4) de ton Dummy.

Dans ton script tu appelleras la donnée avec [DUMMY#Ext] (dans mon cas):
dummy.jpg
dummy.jpg (19.97 Kio) Consulté 2802 fois
Dis moi si ça peut aider.

Re: recupérer une variable utisateur avec les regles espeasy

Publié : 02 janv. 2020, 16:00
par gibus17
merci pour votre réponse.
je vais l'essayer.
J'ai mis en oeuvre une autre approche. Avec ce script LUA

Code : Tout sélectionner


moteur= ""
 index = 0

function mise_a_jour (moteur)--, index) 
  t1  =  os.time () 
  print("os.time = "..t1)
  s  =  otherdevices_lastupdate [moteur]
  index  =  otherdevices_idx [moteur]
  print ("dernier maj  = "..s)
  print("index  =  "..index)
-- renvoie une date-heure comme 2013-07-11 17:23:12

  year = string.sub(s, 1, 4)
  month = string.sub(s, 6, 7)
  day = string.sub(s, 9, 10)
  hour = string.sub(s, 12, 13)
  minutes = string.sub(s, 15, 16)
  seconds = string.sub(s, 18, 19)
    
  etat = otherdevices_svalues[radiateur]
  t2  =  os.time { year = year ,  month = month ,  day = day ,  hour = hour ,  min = minutes ,  sec = seconds } 
  difference  =  ( os.difftime  ( t1 ,  t2 )) 
  print ("DIFFERENCE = "..difference)
  if  ( difference  >  250  and  difference  < 400 )  then 
  --  otherdevices_svalues['Radiateur_esp'] = etat
    commandArray[#commandArray+1]={['OpenURL']="192.168.1.51:8080/json.htm?type=command&param=switchlight&idx="..index.."&switchcmd=Set%20Level&level=".. etat}
    print("...........envoi  ....."..etat)
  end  -- du if 
end  --de la fonction
commandArray  =  {}
mise_a_jour('Moteur_esp') --, 19)
mise_a_jour('Moteur_sonof') --, 20)

return  commandArray
Ainsi toutes les 3 minutes, soit tous les 3 tours du LUA, domoticz envoi l'état dans lequel les switchs doivent être.
Ainsi lors d'une coupure d'alim ou d'un reboot d'un périphérique ESP, celui ci est remis dans un état conforme à l'état du switch dans domoticz.