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
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 (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¶m=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 (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 !