Page 1 sur 1

[RESOLU] Erreur time diff LUA "Capteur Humidité de surface]

Publié : 03 mai 2016, 00:27
par deennoo
Salut a tous,

Je rencontre un grave probleme, J'essaye depuis 3h de fait un script device avec une difference de temps mais c'est la loose, j'ai une erreur.

L'idee et de convertir une valeur analogique en % comme expliqué ici : http://domotique.web2diz.net/?p=629

Voici le script :

Code : Tout sélectionner

function timedifference(s)
   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)
   t1 = os.time()
   t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
   difference = os.difftime (t1, t2)
   return difference
end

commandArray = {}

if (timedifference(otherdevices_lastupdate['cpt_Hum_ESP']) < 30 and timedifference(otherdevices_lastupdate['Hum_ESP']) > 50)
then
   val = tonumber(otherdevices_svalues['cpt_Hum_ESP']);
   val1 = math.floor(100*(val/1024));
   
   commandArray['UpdateDevice']='1380|'..val1..'|0';
   print('Hum ESP - '..val1..' %'.."  "..val)
end
return commandArray
Voici L'erreur :

Code : Tout sélectionner

2016-05-03 00:26:29.330 MQTT: Topic: domoticz/in, Message: {"idx":1378,"nvalue":0,"svalue":"476.00"}
2016-05-03 00:26:29.434 Error: EventSystem: in script_device_humesp: [string "function timedifference(s) ..."]:2: bad argument #1 to 'sub' (string expected, got nil)
La ligne 2 c'est la ligne year.

J'ai parcourut les diiferents forum rapidement sans rien trouver, av ez vous une idée ?

Merci

Re: Erreur time diff LUA

Publié : 03 mai 2016, 00:38
par vil1driver
Salut,

Perso j'ai un peut de mal à voir l'intérêt des timedifference..
A moins de palier à un lancement trop fréquent cause d'un délai trop cours entre 2 envois dans le sketch arduino (ce qui ne semble pourtant pas être le cas puisque réglé à 10min).
Et a ce moment là, un script time ferait tout aussi bien l'affaire..

Essai juste avec un

Code : Tout sélectionner

if (deviceschanged['cpt_Hum_ESP']) then
Sinon je pense que l'erreur vient du fait que ton capteur d'humidité n'a pas encore de valeur de lastupdate.
Une mise à jour manuelle au moins une fois en JSON ... Peut être..

Re: Erreur time diff LUA

Publié : 03 mai 2016, 01:09
par deennoo
Mise a jour via Json faite : pareil erreur

J'ai aussi essaye device changed : mais en regardant les currents states on voit que le compteur est OPEN.

Peut être que le problème vient du fait que j'utilise 2 virtuels (un pour le compteur mis a jour par une ESP et le device d'humidité par le script).

Re: Erreur time diff LUA

Publié : 03 mai 2016, 01:15
par vil1driver
Virtuel ou non à mon avis c'est pareil..
A moins que tous les capteurs n'offrent pas les meme possibilité d'info dans les scripts lua.
Parfois domoticz implémente les choses au compte goutte

Et juste ceci dans un script_time ?

Code : Tout sélectionner


commandArray = {}

   print(otherdevices_svalues['cpt_Hum_ESP']) 
   val = tonumber(otherdevices_svalues['cpt_Hum_ESP'])
   val1 = math.floor(100*(val/1024))
   
   commandArray['UpdateDevice']='1380|'..val1..'|0'
   print('Hum ESP - '..val1..' %'.."  "..val)
   
return commandArray
Open ? De quel type est ton compteur ?
Peut-être en as tu choisi un contenant plusieurs infos, comme les compteurs elec et donc la récupération des infos se fait différemment..

Un peu comme ici
viewtopic.php?p=16029#p16029

Ps: pas de ; en fin de ligne en lua

Re: Erreur time diff LUA

Publié : 03 mai 2016, 08:32
par rimram31
vil1driver a écrit :...A moins que tous les capteurs n'offrent pas les meme possibilité d'info dans les scripts lua...
Pourtant dans le tuto http://domotique.web2diz.net/?p=629, le gars créé bien un capteur virtuel.

Effectivement déjà du print otherdevices_svalues['cpt_Hum_ESP'] otherdevices_lastupdate['cpt_Hum_ESP'] otherdevices_svalues['Hum_ESP'] otherdevices_lastupdate['Hum_ESP'] ... deennoo dans le script a l'arrache pour log et voir a quoi ça ressemble. L'erreur LUA indique que l'argument s passé a la fonction est nil (nul, n'existe pas) donc un des lastupdate ne retourne rien.

Re: Erreur time diff LUA

Publié : 03 mai 2016, 09:45
par deennoo
vil1driver a écrit : Et juste ceci dans un script_time ?

Code : Tout sélectionner


commandArray = {}

   print(otherdevices_svalues['cpt_Hum_ESP']) 
   val = tonumber(otherdevices_svalues['cpt_Hum_ESP'])
   val1 = math.floor(100*(val/1024))
   
   commandArray['UpdateDevice']='1380|'..val1..'|0'
   print('Hum ESP - '..val1..' %'.."  "..val)
   
return commandArray
Ceci fonctionne !

Re: Erreur time diff LUA

Publié : 03 mai 2016, 09:57
par vil1driver
;)

Re: Erreur time diff LUA

Publié : 03 mai 2016, 10:02
par deennoo
rimram31 a écrit :
vil1driver a écrit :...A moins que tous les capteurs n'offrent pas les meme possibilité d'info dans les scripts lua...
Pourtant dans le tuto http://domotique.web2diz.net/?p=629, le gars créé bien un capteur virtuel.

Effectivement déjà du print otherdevices_svalues['cpt_Hum_ESP'] otherdevices_lastupdate['cpt_Hum_ESP'] otherdevices_svalues['Hum_ESP'] otherdevices_lastupdate['Hum_ESP'] ... deennoo dans le script a l'arrache pour log et voir a quoi ça ressemble. L'erreur LUA indique que l'argument s passé a la fonction est nil (nul, n'existe pas) donc un des lastupdate ne retourne rien.
en faisant ce script :

Code : Tout sélectionner

commandArray = {}
   print(otherdevices_svalues['cpt_Hum_ESP'])
   print(otherdevices_lastupdate['cpt_Hum_ESP']) 
   print(otherdevices_svalues['Hum_ESP'])
   print(otherdevices_lastupdate['Hum_ESP'])
   
return commandArray
J'ai en retour :

Code : Tout sélectionner

2016-05-03 09:51:25.087 LUA: 475.00  ///Compteur
2016-05-03 09:51:25.087 LUA: 2016-05-03 09:51:24 ///Compteur
2016-05-03 09:51:25.087 LUA: 0 ///Hum ESP
2016-05-03 09:51:25.087 LUA: 2016-05-03 09:51:24  ///Hum ESP
Hum ESP a 0 ?

Alors que : /json.htm?type=devices&rid=1380

Code : Tout sélectionner

"ActTime" : 1462261994,
   "ServerTime" : "2016-05-03 09:53:14",
   "Sunrise" : "06:49",
   "Sunset" : "21:08",
   "result" : [
      {
         "AddjMulti" : 1.0,
         "AddjMulti2" : 1.0,
         "AddjValue" : 0.0,
         "AddjValue2" : 0.0,
         "BatteryLevel" : 255,
         "CustomImage" : 0,
         "Data" : "46",
         "Description" : "",
         "Favorite" : 1,
         "HardwareID" : 2,
         "HardwareName" : "Dummy",
         "HardwareType" : "Dummy (Does nothing, use for virtual switches only)",
         "HardwareTypeVal" : 15,
         "HaveTimeout" : false,
         "ID" : "00083379",
         "LastUpdate" : "2016-05-03 09:53:00",
         "Name" : "Hum ESP",
et
HUM ESP.PNG
HUM ESP.PNG (6.49 Kio) Consulté 9124 fois

Donc c'est le type de capteur "humidité de surface" qui pose probleme, car il a besoin d'avoir une "info" en nvalue plutot que svalue comme l'indique le WIKI :
https://www.domoticz.com/wiki/Domoticz_ ... s#Humidity

Code : Tout sélectionner

/json.htm?type=command&param=udevice&idx=IDX&nvalue=HUM&svalue=HUM_STAT
Sachant que le capteur "humidité de surface" n'a pas de HUM_STAT...

On va dire résolue, car on vient de trouver pourquoi et comment résoudre, merci de votre aide.

Maintenant optimisation du capteur en Wifi pour un deepsleep parce que maintenant les led allumés + le composant 'adaptateur" vont pas aider la batterie sur panneau solaire, et il est inutile d'avoir une relever toute les minutes pour les plantes, un tout les 6 h devrait suffir et va aider a la non oxydation du capteur (oui"l'atelier" est bien rangé...).
wifi hum.PNG
wifi hum.PNG (672.91 Kio) Consulté 9121 fois

Re: [RESOLU] Erreur time diff LUA "Capteur Humidité de surface]

Publié : 03 mai 2016, 22:01
par patrice
Hmm, Domoweed ou Domoticz ?

Re: [RESOLU] Erreur time diff LUA "Capteur Humidité de surface]

Publié : 03 mai 2016, 23:12
par deennoo
Je fais ceci pour ma serre de bambous a chaume noir/mauve, j'ai des graines a faire germer mais elles ont besoins de conditions spécifique (75% d'humidité et 25/30°c).

J'utilise ce genre de "pot" en fibre de coco car on peut les replantées directement.

A l'époque de cannaweed effectivement domoweed aurait été top !